【发布时间】:2021-08-13 06:28:56
【问题描述】:
我有一个 S3 存储桶,我正在尝试通过 CloudFormation 应用存储桶策略。我想允许两个 IAM 角色访问存储桶,通过在 CloudFormation 模板中的存储桶策略中指定角色的 ARN 来实现。 以下是 CloudFormation 模板:
LandingBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref LandingBucket
PolicyDocument:
Version: "2012-10-17"
Statement:
# yamllint disable-line rule:line-length
- Sid: "Allow s3 permission"
Action:
- s3:PutObject
- s3:GetObject
- s3:ListBucket
Effect: "Allow"
Resource:
- !GetAtt LandingBucket.Arn
- !Sub "${LandingBucket.Arn}/*"
Principal:
AWS:
- !Ref IamRoleArn1
- !Ref IamRoleArn2
参数为:IamRoleArn1: arn:aws:iam::1234:role/xyz, IamRoleArn2: arn:aws:iam::1234:role/abc
控制台的最终策略如下所示
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "file drop permission",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::1234:role/xyz",
"AROxxIECxx"
]
},
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
]
}
]
}
第一个 Principal 是一个 IAM 角色,然而,第二个看起来像一个 API 密钥,尽管我在 CloudFormation 模板中提到了第二个 IAM 角色 ARN,就像第一个 IAM 角色一样。
为什么第二个角色 ARN 没有出现在存储桶策略中?
【问题讨论】:
-
你的cloudformation模板可以吗?
-
@Marcin 我已将 cloudformation 模板添加到问题中
-
从您发布的内容来看,一切似乎都是正确的。我会仔细检查您的问题是否完全代表您使用的真实代码。
-
你显示的参数都叫
IamRoleArn1——不应该是IamRoleArn2吗? -
AROxxIECxx(唯一 ID)通常会在您引用在引用后被删除的资源时显示。看起来IamRoleArn2指的是一个已删除/已删除的角色。
标签: amazon-web-services amazon-s3 amazon-cloudformation amazon-iam