基于属性的访问控制(ABAC)

基于属性的访问控制(Attribute-based access control - ABAC) 是一种基于属性定义权限的授权策略。在 AWS 中,这些属性称为标签。在 AWS 中使用标签可帮助简化在 AWS 中创建细粒度权限的过程,并确保员工只能访问具有匹配标签的 AWS 资源。

场景

在AWS组织中,有一组来自不同团队(finance和marketing)的业务用户。在 AWS Identity Center 中,可以使用相同的权限集,然后选择部门名称属性,以对每种类型的用户(financeUser 或 marketingUser)进行细粒度访问控制。当 FinanceUser 和 marketingUser 登录其 AWS 账户时,IAM Identity Center 会在 AWS 会话中发送其团队名称属性,因此只有当 FinanceUser 和 marketingUser 的部门名称属性与项目资源上的部门名称标签匹配时,financeUser 和 marketingUser 才能访问 AWS 项目资源。如果 FinanceUser 将来转移到 marketingUser 的团队,只需在公司目录中更新其团队名称属性即可修改他们的访问权限,无需在 AWS 中更新任何权限。

创建用户和组

IAM Identity Center中添加用户:

为abac创建用户

添加用户页面中, 提供用户名,例如financeUser, 其他字段如下:

image-20231208221219318

在下面的Job-related information中,设置Department为Finance:

image-20231208231106471

单击下一步并跳过将用户添加到组,最后点击创建用户

将出现一个弹出窗口,其中包含一次性密码使用复制按钮复制信息

image-20231208221303753

重复上面步骤,创建 marketingUser(注意也将它的Department设置为Marketing)。

创建Group

创建组:

image-20231208221502878

提供组名称,例如BusinessUsers, 选择FinanceUsermarketingUser, 点击创建:

image-20231208221605058

创建Permission Set

创建新的Permission Set:

image-20231208221652366

选择权限集类型页面中,选择custom permission set:

image-20231208221730987

展开内联策略, 将以下权限策略复制并粘贴到文本区域中:


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

image-20231208221829952点击下一步, 提供权限集名称的名称,例如DepartmentalAccess, 将其余字段保留为默认值:

image-20231208222146368

最后点击创建。

启用并配置ABAC

Settings中,找到Attributes for access control框,单击启用

image-20231208222407130

配置访问控制的属性。点击Add attribute

image-20231208222600676

Key = Department

Value= ${path:enterprise.department}

这会将来自身份源的属性映射到 IAM Identity Center作为会话标签传递的属性。

这个Value是IDP形式的写法, 参考: https://docs.aws.amazon.com/singlesignon/latest/userguide/attributemappingsconcept.html

image-20231208222832375

添加完成后显示:

image-20231208231948364

将组和权限集分配给 AWS 账户

AWS Accounts中,选择希望用户有权访问的帐户:

image-20231208222959819

选择BusinessUsers组,点击下一步

image-20231208223047638

在选择权限集页面中,选择 “DepartmentalAccess” , 点击下一步

image-20231208223121919

点击提交

创建EC2

创建两台EC2, 它们的标签分别如下:

  • Department: Finance
  • Department: Marketing

image-20231208225440647

image-20231208223910744

验证 ABAC 访问

建议在隐私浏览模式或不同的浏览器中执行以下步骤进行验证

使用之前创建用户时保存的 URL登录AWS Portal页面,先登录financeUser用户.成功登录后,在 Identity Center 门户页面中,选择DepartmentalAccess角色的管理控制台链接:

image-20231208223504749

进入到EC2页面,选择Finance机器,然后stop:

image-20231208225014786

成功停止机器:

image-20231208232305499

但当尝试停止marketing的机器时,会看到如下所示:

image-20231208232350972

也可以使用marketingUser登录进行相关测试