授予 STS 访问权限后失去对 S3 的访问权限

Lost access to S3 after granting access to STS

我有两个不同的 AWS 账户,DEVPROD,我想在 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 现在可以访问 PRODs 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 存储桶,从而可以在它们之间复制数据。