授予 STS 访问权限后失去对 S3 的访问权限
Lost access to S3 after granting access to STS
我有两个不同的 AWS 账户,DEV
和 PROD
,我想在 DEV
中创建一个用户来管理这两个账户中的 S3 存储桶。我创建了用户 Bob,它附加了以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::some-dev-bucket/*",
"arn:aws:s3:::another-dev-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "*"
}
]
}
这确实有效,Bob 可以列出所有存储桶并访问其中的一些存储桶。为了允许 Bob 访问 PROD
帐户中的 S3 存储桶,我在那里创建了 PROD-S3-Access
角色,具有适当的权限和允许 DEV
用户承担它的信任关系。回到 DEV
,我创建了一个允许 Bob 担任角色的新策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::prod-account-id:role/PROD-S3-Access"
}
]
}
这也很好用,Bob 现在可以访问 PROD
s S3。但是,当在 DEV
帐户中执行 aws s3 ls
时,Bob 收到此消息 An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
。令人困惑的是,如果我分离让 Bob 假设 PROD-S3-Access
的策略,他可以再次读取 DEV
的 S3 存储桶。有什么线索吗?
编辑:
这个问题实际上是由我没有注意到的情况引起的,它要求用户启用 MFA。
仅仅向用户添加 ALLOW
策略不应删除访问权限。这确实很奇怪。
替代担任角色 的方法是授予 DEV
中的 Bob 直接访问 PROD
存储桶的权限。这需要两件事:
- DEV Bob 的 IAM 权限 以访问 PROD 存储桶
- 每个 PROD 存储桶上的 存储桶策略 允许从 DEV Bob 访问
这样,单个用户就可以访问 DEV 和 PROD 存储桶,从而可以在它们之间复制数据。
我有两个不同的 AWS 账户,DEV
和 PROD
,我想在 DEV
中创建一个用户来管理这两个账户中的 S3 存储桶。我创建了用户 Bob,它附加了以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::some-dev-bucket/*",
"arn:aws:s3:::another-dev-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "*"
}
]
}
这确实有效,Bob 可以列出所有存储桶并访问其中的一些存储桶。为了允许 Bob 访问 PROD
帐户中的 S3 存储桶,我在那里创建了 PROD-S3-Access
角色,具有适当的权限和允许 DEV
用户承担它的信任关系。回到 DEV
,我创建了一个允许 Bob 担任角色的新策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::prod-account-id:role/PROD-S3-Access"
}
]
}
这也很好用,Bob 现在可以访问 PROD
s S3。但是,当在 DEV
帐户中执行 aws s3 ls
时,Bob 收到此消息 An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
。令人困惑的是,如果我分离让 Bob 假设 PROD-S3-Access
的策略,他可以再次读取 DEV
的 S3 存储桶。有什么线索吗?
编辑:
这个问题实际上是由我没有注意到的情况引起的,它要求用户启用 MFA。
仅仅向用户添加 ALLOW
策略不应删除访问权限。这确实很奇怪。
替代担任角色 的方法是授予 DEV
中的 Bob 直接访问 PROD
存储桶的权限。这需要两件事:
- DEV Bob 的 IAM 权限 以访问 PROD 存储桶
- 每个 PROD 存储桶上的 存储桶策略 允许从 DEV Bob 访问
这样,单个用户就可以访问 DEV 和 PROD 存储桶,从而可以在它们之间复制数据。