在IAM角色策略中定位联盟SAML用户

时间:2018-07-13 13:55:20

标签: saml access amazon-iam role gsuite

我们当前正在将G Suite用作我们的AWS SAML访问的IDP,该ID在少数账户中扮演了角色,以使G Suite用户可以访问某些AWS资源。每个帐户都具有类似的命名角色,G Suite用户可以假定这些角色授予他们访问该帐户中某些资源的权限,这些资源都按预期工作。

我正在研究是否可以配置该假定的角色,以便为某些用户提供对某些资源的更细粒度的访问,而不必在G Suite本身中为不同的用户分配完全不同的角色。

例如,如果在帐户中承担的角色称为“ assumed_gsuite_ro”并且不提供对IAM的访问,则您会在IAM控制台中看到如下错误:

User: arn:aws:sts::0012345678900:assumed-role/assumed_gsuite_ro/matt@domain.com is not authorized to perform: iam:GetAccountSummary on resource: *

因此,我想在假定的角色_gsuite_ro角色策略中添加一些内容,以使联盟用户仅能访问IAM中的内容:

...
{
    "Sid": "IAMTest",
    "Effect": "Allow",
    "Action": [
        "iam:GetAccountSummary",
        "iam:ListAccountAliases"
    ],
    "Resource": "*",
    "Condition": {
        "ArnEquals": {
            "aws:SourceArn": "arn:aws:sts::0012345678900:assumed-role/assumed_gsuite_ro/matt@domain.com"
        }
    }
}
...

但是,这显然不起作用,因为SourceArn显然不匹配。我可以使用的条件值是否可以使我针对AWS似乎了解的特定联盟用户?我当时在想aws:userid或aws:username之类的方法可能有用,但是我不确定在这种情况下它们的值是什么。

1 个答案:

答案 0 :(得分:2)

在AWS文档中进行了更深入的研究,发现this page描述了如何在SAML /联合上下文中构成aws:userid的值,我确定了以下工作:

"Condition": {
    "StringLike": {
        "aws:userid": "AROAROLEID:matt@domain.com"
    }
}

AROAROLEID是您要担任的角色名称(在我的示例中为assumed_gsuite_ro)的“角色ID”的值,根据this page,您只能从get- AWS CLI的角色调用(这是RoleId的值)。