我正在尝试创建 AWS IoT 作业,我已遵循此处的先决条件。
创建 OTA 作业的 Lambda 具有所需的权限。
但是当我获得该作业的详细信息以了解为什么它尚未创建时。
我得到:
'Access denied when trying to get object. (Service: AWSIot; Status Code: 401; Error Code: UnauthorizedException; Request ID: 0d20d22e-9d19-46de-a5ba-9a0c02254ab7; Proxy: null)'
完整回复
aws iot get-ota-update
:
otaUpdateInfo:
additionalParameters: {}
awsJobExecutionsRolloutConfig: {}
awsJobPresignedUrlConfig:
expiresInSec: 1800
creationDate: '2024-03-27T11:27:13.385000+05:30'
description: 'Job Name: VarunJob_26-Mar-24#01'
errorInfo:
code: UnauthorizedException
message: 'Access denied when trying to get object. (Service: AWSIot; Status Code:
401; Error Code: UnauthorizedException; Request ID: 0d20d22e-9d19-46de-a5ba-9a0c02254ab7;
Proxy: null)'
lastModifiedDate: '2024-03-27T11:27:14.154000+05:30'
otaUpdateArn: arn:aws:iot:us-east-1:account:otaupdate/Ai8JXbggPogk43KdUrEduY
otaUpdateFiles:
- codeSigning:
dummySigningDetails
fileLocation:
s3Location:
bucket: ota-account-dev
key: users/user_id/firmwareimages/kjdfsjkdflkj/fdsjlkdsfkj.bin
otaUpdateId: Ai8JXbggPogk43KdUrEduY
otaUpdateStatus: CREATE_FAILED
protocols:
- MQTT
- HTTP
targetSelection: SNAPSHOT
targets:
- arn:aws:iot:us-east-1:account:thing/Ux96hQsNZWjqynXYD2zfvN
我唯一的猜测是 AWS IoT 无法解析其对该 S3 对象的访问。
我已授予在 IoT 服务角色中访问 S3 所需的权限:
Statement:
- Effect: Allow
Action:
- s3:GetObjectVersion
- s3:GetObject
- s3:PutObject
Resource: !Sub
- arn:aws:s3:::${OtaImageBucket}/*
- OtaImageBucket: !ImportValue OTAFirmwareS3BucketArn
奇怪的是,这个错误发生在我的临时帐户上。
但它适用于我的开发帐户。我们使用 Cloudformation 来管理基础设施,因此我知道应该在两端部署相同的资源。
非常感谢任何帮助。
没关系,事实证明我没有正确创建 S3 对象 ARN。
与:
Resource: !Sub
- arn:aws:s3:::${OtaImageBucket}/*
- OtaImageBucket: !ImportValue OTAFirmwareS3BucketArn
我的目标 ARN 出现了
arn:aws:s3:::
两次。
修复了这个问题并且成功了。
P.S 它在我的开发环境中工作的原因是该存储桶允许公共访问(可能是一些 POC)。