S3 存储桶策略 IAM 角色显示为 API 键
S3 bucket policy IAM role showing up as API key
我有一个 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 没有出现在存储桶策略中?
那是该特定资源的 unique identifier。在这种情况下,它称为 RoleId 并且 ARN 只是其可读格式。两种表示都指向 AWS 中的相同资源。
尝试 运行
aws iam get-role --role-name "<you role here>"
此命令的输出将包含一个名为 RoleId 的字段,应该可以为您解决问题。
以AROA开头的唯一标识符代表它是一个角色相关的资源。
我有一个 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 没有出现在存储桶策略中?
那是该特定资源的 unique identifier。在这种情况下,它称为 RoleId 并且 ARN 只是其可读格式。两种表示都指向 AWS 中的相同资源。 尝试 运行
aws iam get-role --role-name "<you role here>"
此命令的输出将包含一个名为 RoleId 的字段,应该可以为您解决问题。
以AROA开头的唯一标识符代表它是一个角色相关的资源。