【发布时间】:2022-11-23 19:09:37
【问题描述】:
我正在制作一个 cloudformation 模板来创建一个具有其权限的 lambda。 我需要访问一个特定的 s3 存储桶并放置它的特定 arn,但是当我执行 lambda 时它告诉我它没有访问该存储桶 (getObject) 的权限,但是如果我输入 s3 的几乎全名只知道我在末尾放了一个 *,如果它允许我访问该存储桶中的文件。
桶名:bucket-test-impl
LambdaSSMPermissions:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
Policies:
- PolicyName: allowSsmS3
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- ssm:PutParameters
- ssm:PutParameter
- s3:GetObject
Resource:
- arn:aws:s3:::bucket-test-* //THIS WORKS
- arn:aws:s3:::bucket-test-impl //IT DOESN'T WORK AND IT'S THE ONE I NEED,
- !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/abcd/*/*'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
【问题讨论】:
-
对存储桶的访问不同于存储桶内的文件。在资源下尝试以下操作:
arn:aws:s3:::bucket-test-impl/* -
它仍然不起作用,事实上我需要删除 *.我仍然不明白为什么它与 * 一起使用,也就是说,与第一个 arn @TrygviLaksafoss
-
好吧,GetObject 调用是针对存储桶中的一个对象,在这种情况下,您确实需要使用 * 来指示已将访问权限授予存储桶该路径内的对象。您可以通过将文件置于特定前缀下并仅授予访问权限来进一步限制它。 * 用作通配符,表示访问权限授予所有对象,包括 arn 的第一部分,后跟任何内容。
标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudformation