amazon-web-services - 授予 S3 存储桶访问权限的跨账户角色 - 权限被拒绝
问题描述
我有两个帐户,帐户 ACCOUNTAAAA 和 ACCOUNTBBBB。账户 ACCOUNTAAAA 中存在存储桶 (BUCKETAAAA),并且在 ACCOUNTBBBB 中具有角色 (ROLEBBBB) 的实例需要能够从中读取。
我已向存储桶添加以下权限:
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNTBBBB:role/ROLEBBBB"
},
"Action": [
"s3:*"
],
"Resource": "arn:aws:s3:::BUCKETAAAA/*"
}
我对以下角色具有以下权限ACOUNTBBBB
:
"Sid": "",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::BUCKETAAAA/",
"arn:aws:s3:::BUCKETAAAA/*"
]
}
我的假设是我应该能够aws s3 ls s3://BUCKETAAAA
在附加了 IAM 角色的 EC2 实例上运行,并查看 BUCKETAAAA 的内容。当我尝试这个时,我得到An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
.
我在这里想念什么?
解决方案
为了重现您的情况,我执行了以下操作:
- 在 Account-B 中创建Role-B ,其中 EC2 作为受信任实体(“允许 EC2 实例代表您调用 AWS 服务”)和授予对 Bucket-A 访问权限的策略
- 在 Account-A 中创建Bucket- A
- 向 Bucket-A添加了Bucket Policy,授予对 Role-B 的访问权限
- 将角色 B分配给 Amazon EC2 实例
Bucket-A 上的Bucket Policy是:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account>:role/role-b"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*"
]
}
]
}
Role-B 的权限为:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketA",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*"
]
}
]
}
我能够成功使用aws s3 ls s3://bucket-a
并能够将文件复制到 Bucket-A。
我在您的尝试中看到的主要区别是您的存储桶策略仅授予以下权限:
"Resource": "arn:aws:s3:::BUCKETAAAA/*"
This means "anything within Bucket-A" but does not include Bucket-A itself. The command aws s3 ls s3://BUCKETAAAA
operates on the bucket, for which the role has no permissions.
Thus, you should also add permissions for the bucket itself:
"Resource": [
"arn:aws:s3:::BUCKETAAAA",
"arn:aws:s3:::BUCKETAAAA/*"
推荐阅读
- file - SED 用文件 II 中的变量行替换每个占位符
- tensorflow - Tensorflow 有时无法在 GPU 上运行
- apache-spark - 将数据从 spark 插入 cassandra:如何验证一切正常
- powershell - 从 Powershell 读取 Machine.config 中的加密连接字符串
- python - 在python中根据某些条件做一些事情
- c++ - 如何将 int 推入向量中
> - python - 如何在连接的 keras 模型中设置可训练参数
- asp.net - 通过 Windows Power Shell 发布 ASP .NET Core 应用程序
- javascript - 了解到达路由器的基础知识
- typo3 - TYPO3,Extbase:mysqli 错误消息,命令不同步