亚马逊AWS官方博客

如何更简单地使用 IAM 主体的 Amazon Organizations 来控制对亚马逊云科技资源的访问

Original URL:https://aws.amazon.com/blogs/security/control-access-to-aws-resources-by-using-the-aws-organization-of-iam-principals/

 

Amazon Identity and Access Management(IAM)现在使您可以使用 IAM 主体(用户和角色)的 Amazon Organizations 更轻松地控制对亚马逊云科技资源的访问。对于某些服务,您使用基于资源的策略授予权限,以指定可以访问资源的账户和主体,以及他们可以对其执行的操作。现在,您可以在这些策略中使用新的条件键 aws:PrincipalOrgID,用以要求所有访问资源的主体都属于组织中的账户(包括主账户)。例如,假设您有一项 Amazon S3 存储桶策略,并且您希望仅有来自您组织内部的亚马逊云科技账户的主体对其有访问权限。为此,您可以定义 aws:PrincipalOrgID 条件并将值设置为存储桶策略中的组织 ID。您的组织 ID 用于设置 S3 存储桶的访问控制。此外,当您使用此条件时,在您向此组织添加新账户时会应用策略权限,而无需更新策略。

在这篇文章中,我将详细介绍新条件,并向您展示如何使用 S3 将访问权限限制为仅来自您组织中的主体。

条件概念

在介绍新条件之前,让我们回顾一下 IAM policy 的条件元素。条件是一个可选的 IAM policy 元素,可用于指定策略授予或拒绝权限等特殊情况。条件包括条件键条件运算符和条件值。有两种类型的条件:服务特定的条件全局条件。服务特定的条件是特定用于亚马逊云科技中的某些操作的。例如,条件键 ec2:InstanceType 支持特定的 EC2 操作。 全局条件支持跨所有亚马逊云科技服务的所有操作。

现在,在回顾了 IAM policy 中的条件元素后,我来介绍一下新条件。

AWS:PrincipalOrgID 条件键

您可以使用此条件键将过滤条件应用于基于资源的策略的主体元素。您可以将任何字符串运算符(例如 StringLike)与此条件一起使用,并将 Amazon Organizations ID 指定为其值。

条件键 说明 运算符
aws:PrincipalOrgID 验证访问资源的主体是否属于您组织中的账户。 所有字符串运算符 任何Amazon Organizations ID

示例:仅限来自我的组织的主体的访问

让我们来举一个例子,我想授予我的组织中特定 IAM 主体直接访问包含敏感财务信息的 S3 存储桶 2018-Financial-Data 的权限。在我的Amazon Organizations中,有两个具有多个账户 ID 的账户,这些账户中只有部分 IAM 用户需要访问此财务报告。

为了授予此访问权限,我为我的 S3 存储桶编写了一个基于资源的策略,如下所示。在此策略中,我列出了我想要授予访问权限的个人。在这个例子中,假设在这样做的时候,我不小心指定了一个错误的账户 ID。这意味着名为 Steve 的用户现在可以访问我的财务报告,但他的账户不在我的组织中。为了要求主体账户在我的组织中,我使用全局条件键 aws:PrincipalOrgID 向我的策略添加了一个条件。此条件要求只有我组织中账户的主体才能访问 S3 存储桶。这意味着尽管 Steve 是该策略中的主体之一,但他无法访问财务报告,因为他所属的账户不属于我的组织。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowGetObject",
            "Effect": "Allow",
            "Principal": {
                "AWS":[
                        "arn:aws:iam::094697565664:user/Casey",
                        "arn:aws:iam::094697565664:user/David",
                        "arn:aws:iam::094697565664:user/Tom",
                        "arn:aws:iam::094697565664:user/Michael",
                        "arn:aws:iam::094697565664:user/Brenda",
                        "arn:aws:iam::094697565664:user/Lisa",
                        "arn:aws:iam::094697565664:user/Norman",
                        "arn:aws:iam::094697565646:user/Steve",
                        "arn:aws:iam::087695765465:user/Douglas",
                        "arn:aws:iam::087695765465:user/Michelle"
]
},
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::2018-Financial-Data/*",
            "Condition": {"StringEquals": 
                             {"aws:PrincipalOrgID": [ "o-yyyyyyyyyy" ]}
                         }
        }
    ]
}

在上面的策略中,我使用语句的主体元素指定了我授予访问权限的主体。接下来,我将 s3:GetObject 添加为 Action,并将 2018-Financial-Data/* 添加为 Resource,以授予对我的 S3 存储桶的读取访问权限。最后,我添加新的条件键 aws:PrincipalOrgID 并在语句的条件元素中指定我的组织 ID,以确保只有我组织中账户的主体才能访问此存储桶。

摘要

您现在可以在基于资源的策略中使用 aws:PrincipalOrgID 条件键,以更轻松地将访问限制为来自您Amazon Organizations中账户的 IAM 主体。有关使用 aws:PrincipalOrgID 的此全局条件键和策略示例的更多信息,请阅读 IAM 文档