我编写了一个 Lambda 函数来创建数据集导入作业(链接到 API)。该请求的Datasource
属性需要一个S3 Config 项,该项又包含一个IAM 角色,“Amazon Forecast 可以假定该角色访问 Amazon S3 存储桶或文件”。
在尝试遵循最少访问的原则时,我想给予该角色(下面的 Cloud Formation 定义)尽可能少的权限。我可以将其操作限制为仅列出和获取;但是,除非我授予它访问权限,否则它不起作用Resource: *
。我更愿意让它访问Resource: arn:aws:s3:::my-bucket/*
(或更好Resource: arn:aws:s3:::my-bucket/path/to/my_file.csv
。我得到的错误消息(不使用时Resource: *
)是
调用 HeadObject 操作时发生错误 (404):未找到
或者
调用 HeadObject 操作时发生错误 (403): Forbidden
取决于我是在本地运行(通过 SAM CLI)还是在 LAMBDA 控制台中运行。
¿ 有没有人遇到过一个原因,为什么 Forecast 在创建数据集导入作业时会出错而没有对所有s3 的只写访问权限,而不是只有一个存储桶,或者更好的是一个文件?
CreateDatasetImportJobS3Role:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- forecast.amazonaws.com
Action: sts:AssumeRole
Policies:
-
PolicyName: ReadFromBucketPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action:
- s3:ListBucket
- s3:GetObject
# I'd like to be able to do this without a STAR resource;
# however, it doesn't seem to work without
Resource: "*"