如何编写可由其他帐户承担的AWS策略,但根据哪个帐户承担该角色而提供不同的权限?

时间:2018-01-10 18:04:37

标签: amazon-web-services amazon-s3 amazon-iam amazon-policy

我有两个ID为111111和222222的AWS账户,我正在尝试以下

  • 两个帐户都应该通过承担相同的角色来访问AWS
  • 假设的角色为每个帐户111111
  • 读取/写入s3桶提供访问权限
  • 帐号111111可以在/production/*
  • 之外的任何地方书写
  • 帐户222222只能写入/production/*

我在帐户111111上创建了名为myBucket的s3存储桶,并在其中设置了以下存储桶策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": "arn:aws:iam::222222:root"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetObjectVersion",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::myBucket/production/*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111:root",
                    "arn:aws:iam::222222:root"
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::myBucket"
        }
    ]
}

然后我使用以下IAM策略

在帐户111111上创建用户
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "s3:RestoreObject",
                "s3:PutObjectAcl",
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::myBucket/*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::myBucket"
        }
    ]
}

以上内容应足以让帐户111111承担此角色,并且能够写入除/myBucket/*以外的/myBucket/production/*并且此操作正常。

当帐户222222承担该角色时,问题就出现了。它可以执行与帐户111111(写入/myBucket/*/myBucket/production/*之外)相同的操作,这不是意图。

我怀疑这里的问题是,一旦帐户222222承担了该角色,它似乎来自同一帐户,但我不确定。

在这种情况下如何识别源帐户,以便我可以在帐户222222上设置策略,即使它已在帐户111111上担任角色?

1 个答案:

答案 0 :(得分:0)

是的,一旦承担了角色,谁或什么假定角色无关紧要。所有进一步的Auth都基于角色,角色在帐户1111111中。

我在这里感觉到一个XY问题。你的要求似乎很奇怪。你为什么要两个帐户担任这个角色。这就像是说你希望2个人有2个人共享密钥,但锁定的行为会有所不同,具体取决于谁持有密钥。更合乎逻辑的解决方案是为每个人提供自己的密钥。