基于属性的访问控制(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
中添加用户:
在添加用户页面中, 提供用户名,例如financeUser
, 其他字段如下:
在下面的Job-related information中,设置Department为Finance:
单击下一步并跳过将用户添加到组,最后点击创建用户
将出现一个弹出窗口,其中包含一次性密码。使用复制按钮复制信息
重复上面步骤,创建 marketingUser
(注意也将它的Department设置为Marketing
)。
创建组:
提供组名称,例如BusinessUsers
, 选择FinanceUser和marketingUser, 点击创建:
创建新的Permission Set:
在选择权限集类型页面中,选择custom permission set
:
展开内联策略, 将以下权限策略复制并粘贴到文本区域中:
{
"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}"
}
}
}
]
}
点击下一步, 提供权限集名称的名称,例如DepartmentalAccess
, 将其余字段保留为默认值:
最后点击创建。
在Settings
中,找到Attributes for access control框,单击启用:
配置访问控制的属性。点击Add attribute
:
Key = Department
Value= ${path:enterprise.department}
这会将来自身份源的属性映射到 IAM Identity Center
作为会话标签传递的属性。
这个Value是IDP形式的写法, 参考: https://docs.aws.amazon.com/singlesignon/latest/userguide/attributemappingsconcept.html
添加完成后显示:
在AWS Accounts
中,选择希望用户有权访问的帐户:
选择BusinessUsers
组,点击下一步:
在选择权限集页面中,选择 “DepartmentalAccess” , 点击下一步:
点击提交
创建两台EC2, 它们的标签分别如下:
建议在隐私浏览模式或不同的浏览器中执行以下步骤进行验证
使用之前创建用户时保存的 URL登录AWS Portal页面,先登录financeUser用户.成功登录后,在 Identity Center 门户页面中,选择DepartmentalAccess角色的管理控制台链接:
进入到EC2页面,选择Finance机器,然后stop:
成功停止机器:
但当尝试停止marketing
的机器时,会看到如下所示:
也可以使用marketingUser登录进行相关测试