AWS服务是基于SigV4格式的凭据来认证身份的,而不是基于x.509证书认证的,但是拥有x.509证书的设备也能调用AWS服务。常用的做法是通过规则引擎来操作AWS服务,设备发送消息给IoT Core,触发规则引擎执行一项调用AWS服务的操作。
为了让设备直接调用AWS服务,AWS IoT的凭据提供者可以让设备通过证书的方式认证AWS服务,具体流程如下:
1、请求安全token
设备向凭据提供者发送https请求,请求一个安全token,该请求包含x.509证书。
2、验证请求
凭据提供者将请求发送到AWS IoT认证和授权模块。
该模块认证X.509证书后,将计算出合适的权限,包含到安全的token,如果认证成功的话,证书将包含iot:AssumeRoleWithCertificate权限。
3、担任角色
对于验证成功,凭据提供者将会代表提前配置的IAM角色,调用AWS的安全token服务(AWS STS),角色必须拥有资源credentials.iot.amazonaws.com执行sts:AssumeRole权限
4、AWS安全token服务返回安全token
假如角色有权限,AWS STS将为凭据提供者返回一个临时的,权限受限的安全token
5、凭据提供者返回安全token
凭据提供者为设备返回安全token
6、使用安全token签发请求
设备使用安全token对AWS SigV4格式的AWS请求进行签名
7、验证签名
AWS服务调用IAM验证签名,并且授权请求访问IAM角色附加的策略
8、如果IAM验证签名成功,那么就会授权请求,请求就能访问服务了
最佳实践:
1、每个设备给定一个唯一的证书
2、设备支持证书过期后自动替换
3、下载证书和秘钥到设备上的安全的位置
4、当不再使用的时候停用CA证书
5、检测到非法的活动应当吊销证书