【发布时间】:2018-02-23 03:19:22
【问题描述】:
我有一个关于 s3 和角色如何跨帐户工作的问题。
我有一个 lambda 函数,该函数在账户 A 中具有角色,在账户 B 中具有 lambda 函数需要访问的存储桶。来自账户 A 的角色对账户 B 中的存储桶具有 s3:* 权限。我们在账户 B 中的存储桶上设置委托人以接受来自账户 A 的角色。存储桶策略还允许存储桶上的 s3:*。像下面的东西。
帐户 A 角色:
{
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket/*",
"arn:aws:s3:::bucket"
],
"Effect": "Allow"
}
账户 B 存储桶政策:
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account:role/role"
},
"Action": "s3:*",
"Resource": ["arn:aws:s3:::bucket/*","arn:aws:s3:::bucket"]
}
我们遇到的问题是账户 A 中的角色能够对账户 B 中的存储桶执行所有 LIST 操作,但是当我们尝试任何 GET 操作时,我们会被拒绝访问。这没有意义,因为我们在双方都有 s3:* 权限。
我们在设置存储桶或 IAM 策略时是否遗漏了一些东西,可以让它按预期工作?我们尝试了一个与账户 A 中的角色具有相同策略的假设角色,但在账户 B 中,并且在账户 B 中的存储桶上的 LIST 或 GET 操作没有问题。所以有一个解决方法,但我们想看看是否我们可以让原始设置正常工作。
这是我收到的错误消息。
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
【问题讨论】:
-
看来你在做正确的事。是否有任何策略(在任一帐户中)可能导致访问被拒绝,从而覆盖允许?您能否向我们展示有效的 LIST 代码和无效的 GET 代码?您还可以包括您收到的确切错误消息吗? (您可以编辑您的问题以添加这些详细信息。)
标签: amazon-web-services amazon-s3 amazon-iam