亚马逊AWS官方博客

联合身份新增功能 – 在 AWS 中使用员工属性实施访问控制

当您在 AWS 或许多其他系统上管理资源的访问权限时,最可能会使用的工具将是基于角色的访问控制 (RBAC)。当您使用 RBAC 时,您会定义资源的访问权限,将这些权限分为不同的策略,将策略分配给若干角色,然后将角色分配给不同的实体(例如个人、一组人、服务器、应用程序等)。许多 AWS 客户告诉我们,他们使用这种方法是为了简化向相关实体(例如组织中具有类似相同业务职能的人)授予访问权限的程序。

例如,您可以创建一个财务数据库管理员角色,然后赋予该角色对财务所需表和计算资源的访问权限。当数据管理员 Alice 进入该部门时,您将为她分配财务数据库管理员角色。

在 AWS 上,您可以使用 AWS Identity and Access Management (IAM) 权限策略IAM 角色来实施 RBAC策略。

资源的倍增导致它难以扩展。将新资源添加到系统中时,系统管理员必须向所有相关策略添加对该新资源的权限。如果有数以千计的资源和数以千计的策略,又该如何进行扩展? 如何验证对一个策略的更改不会向某个用户或应用程序授予不必要的权限?

基于属性的访问控制
面对资源数量不断增长的环境,为了简化权限的管理,一种全新的管理方法应运而生:基于属性的访问控制 (ABAC)。使用 ABAC 时,您会根据匹配的属性来定义权限。您可以在策略中使用任何类型的属性:用户属性、资源属性、环境属性等等。权限属于 IF … THEN 规则,例如:IF 用户属性 role == manager THEN 她可以访问具有属性 sensitivity == confidential 的资源。

使用 ABAC 权限控制可以扩展您的权限系统,因为您不再需要在添加新资源时更新策略。相反,您只需要确保资源附加了正确的属性。ABAC 减少了需要管理的策略数量,因为您不需要为每个作业角色创建策略。

在 AWS 上,属性被称为标签。您可以将标签附加到 Amazon Elastic Compute Cloud (EC2) 实例、Amazon Elastic Block Store (EBS) 卷、AWS Identity and Access Management (IAM) 用户以及其他多种资源。借助标记资源功能,加上在标签上定义权限条件的功能,实际上您已经对您的 AWS 资源执行了 ABAC 访问控制。

要了解更多有关如何在 AWS 上使用 ABAC 权限的信息,请参阅新文档中的 ABAC 部分或学习教程或观看 re:Inforce 上的 Brigid 讲座

它的效果非常好,但仅在您的用户属性存储在 AWS 上时才有效。许多 AWS 客户通过其他渠道管理身份(及其属性),并使用联合身份来管理用户的 AWS 访问权限。

传递联合身份用户的属性
我们很高兴地宣布,现在当用户通过基于标准的 SAML,使用联合身份登录 AWS 时,您可以将用户属性传递到 AWS 会话中。现在,您可以在 AWS 中的基于属性的访问控制决策中使用在外部身份系统中定义的属性。外部身份系统的管理员负责管理用户属性并定义要在使用联合身份期间传递的属性。传递的属性被称为“会话标签”。会话标签是一种临时的标签,仅在联合身份会话期间有效。

使用 ABAC 赋予对云资源的访问权限具有多方面的优势。其中一个优势是减少了要管理的角色数量。例如,假设 Bob 和 Alice 的工作职能相同,但他们来自不同的成本中心,您希望仅允许他们访问属于各自成本中心的资源。使用 ABAC 时只需一个角色即可达到此目的,而使用 RBAC 时则需要两个角色。Alice 和 Bob 代入相同的角色。策略将在他们的成本中心标签值与资源的成本中心标签值匹配时授予对资源的访问权限。现在想象您有 20 个成本中心,超过 1000 名员工。ABAC 可以将成本中心角色数量从 20 个减少至 1 个。

再举一个例子。假设您的系统工程师对您的外部身份系统进行了配置,从而在开发人员使用联合身份以 IAM 角色登录 AWS 时,将 CostCenter 作为一个会话标签。所有使用联合身份的开发人员都代入相同的角色,但仅将获得属于各自成本中心的 AWS 资源的访问权限,因为权限的执行基于联合身份会话和资源上包含的 CostCenter 标签。

此例的示意图如下:


在上图中,blue、yellow 和 green 代表我的员工用户附加的三个成本中心。为了设置 ABAC,我首先使用相应的 CostCenter 标签来标记所有项目资源,然后将我的外部身份系统配置为在开发人员会话中包含 CostCenter 标签。此场景中的 IAM 角色根据 CostCenter 标签授予对项目资源的访问权限。IAM 权限可能与以下类似:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [ "ec2:DescribeInstances"],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": ["ec2:StartInstances","ec2:StopInstances"],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/CostCenter": "${aws:PrincipalTag/CostCenter}"
                }
            }
        }
    ]
}

仅在条件匹配时才会授予(允许)访问权限:当资源的 CostCenter 标签值与委托人的 CostCenter 标签值匹配。现在,每当我的员工用户使用此角色以联合身份登录 AWS 时,他们将根据联合身份会话中包含的 CostCenter 标签获得属于其成本中心的资源的访问权限。

如果某个用户的成本中心从 green 切换到 blue 时,您的系统管理员将会使用 CostCenter = blue 更新外部身份系统,AWS 中的权限会自动应用以授予对 blue 成本中心的 AWS 资源的访问权限,无需在 AWS 中更新访问权限。同样,当您的系统管理员在外部身份系统中添加一个新的员工用户时,此用户会立即获得属于其成本中心的 AWS 资源的访问权限。

我们已经与 Auth0ForgeRockIBMOktaOneLoginPing IdentityRSA 合作,以确保在其系统中定义的属性会正确填充到 AWS 会话中。有关更多详细信息,请参阅他们发布的有关配置适用于 AWS 的会话标签的指南。如果您使用其他身份提供商,如果他们支持 SAML 2.0OpenID Connect (OIDC) 等行业标准,您仍可配置会话标签。我们将会与更多身份提供商合作,以使会话标签通过他们的身份解决方案的认证。

会话标签功能现已在所有 AWS 区域开放,不会产生任何额外的费用。您可以阅读我们新的会话标签文档页面,按照详细的分步说明来配置基于 ABAC 的权限系统。

— seb