amazon-web-services - S3 存储桶策略 IAM 角色显示为 API 密钥
问题描述
我有一个 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 没有出现在存储桶策略中?
解决方案
这是该特定资源的唯一标识符。在这种情况下,它被称为RoleId,而 ARN 只是相同的可读格式。两种表示都指向 AWS 中的相同资源。尝试运行
aws iam get-role --role-name "<you role here>"
此命令的输出将有一个名为 RoleId 的字段,它应该为您清除所有内容。
以AROA开头的唯一标识符表示它是与角色相关的资源。
推荐阅读
- elasticsearch - 如何列出elasticsearch6中的所有字段
- java - 是否可以使用 lombok 从基类实例构造派生类实例?
- c++ - QDomNode.clear() 不会删除 xml 标记的值
- search - 在 DAX 中搜索关键字
- c++ - 使用两个不同大小的一维数组制作二维数组
- c# - 将空共享字符串写入单元格 openxml
- cron - 多周的一天的 Cron 格式
- select - SQL Server - 加入动态透视表中的选择列
- javascript - D3.js:如何更改单个节点中文本的位置
- vba - vba/Office:如何从“应用程序”对象中获取服务器名称作为字符串?