如何根据标签定义配置访问 Amazon 资源的权限
Attribute-based access control (ABAC)的授权方式
最后更新于
Attribute-based access control (ABAC)的授权方式
最后更新于
本教程介绍如何创建和测试允许具有tag的IAM role访问具有tag的资源。当principal向Amazon发起请求时,会根据tag是否匹配来授予权限。
如何系统打标签可以参见如何打标签Tag的操作指引。
假设你在一个大企业领导一个开发团队,你作为IAM的管理员你很熟悉创建IAM users,roles和policies。你要确保开发团队和测试团队都能够访问到他们所需要的资源。你也希望策略可以随着企业规模的增长而自动增长不需要时刻维护。
先从分配Amazon Secrets Manager的权限开始。目前有两个正在开发的项目:Pegasus 和 Unicorn。你指定了要使用以下标签:
access-project = peg
,代表Pegasus项目;
access-project = uni
,代表Unicorn项目;
access-team = eng
,代表开发团队
access-team=qas
,代表测试团队
此外,你为了方便结算成本,还要求使用cost-center
这个标签。
开始配置权限之前,你要具备以下条件:
有一个Amazon的账号,并且是管理员权限可以登录进去。
你的12位账号ID要提前准备好,要使用亚马逊云科技管理控制台查找您的 Amazon 账户 ID 号,请选择右上角导航栏上的支持,然后选择支持中心。帐号 (ID) 将显示在左侧的导航窗格中。
具有创建IAM user,role和policy的经验。如果不会也可以查看分步指导。
ABAC 策略:只有Principal和Resource Tags匹配才能访问Secrets Manager资源。
策略名称可以为“SecretsManagerSameProjectSameTeam”,策略JSON内容如下:
sid=AllActionsSecretsManagerSameProjectSameTeam的这段policy,允许对所有相关资源执行操作,前提条件是Principal的标签和resource的标签列出来的3个是一样的。 "Action": "secretsmanager:*",代表可以执行secrets manager中的任何操作。如果secrets manager新上线新的API操作,那么不需要将新的操作添加到policy里就可以使用。condition条件的含义参见此处。
AllResourcesSecretsManagerNoTags这段允许任何不带标签的资源可以执行GetRandomPassword以及ListSecrets操作。
ReadSecretsManagerSameTeam这段则是允许只读操作,只要principal请求者access-team的标签与resouce的匹配就行。
DenyUntagSecretsManagerReservedTags这段是如果请求中传递的TagKeys是"access-"开头的,则拒绝删除tags。
DenyPermissionsManagement则是拒绝create,edit 或者delete Secrets Manager resource-based policies。
创建多个ABAC roles(类别选择Amazon Web Services account),这些role加刚才创建的policy。
Pegasus 项目开发
access-project = peg access-team = eng cost-center = 987654
允许开发管理Pegasus项目的secrets manager,可以执行相关资源的所有操作。
Pegasus 项目测试
access-project = peg access-team = qas cost-center = 987654
可以执行GetRandomPassword以及ListSecrets操作。
Unicorn 项目开发
access-project = uni access-team = eng cost-center = 123456
允许开发管理Unicorn项目的secrets manager,可以执行相关资源的所有操作。
Unicorn 项目测试
access-project = uni access-team = qas cost-center = 123456
可以执行GetRandomPassword以及ListSecrets操作。
用管理员权限创建多个secrets,为secrets添加tag。
test-access-peg-eng
access-project = peg access-team = eng cost-center = 987654
Pegasus 项目开发 -Allowed; Pegasus 项目测试 - Deny; Unicorn 项目开发 - Deny; Unicorn 项目测试 - Deny
test-access-uni-eng
access-project = uni access-team = eng cost-center = 987654
Pegasus 项目开发 -Deny; Pegasus 项目测试 - Deny; Unicorn 项目开发 - Allowed; Unicorn 项目测试 - Deny
test-access-peg-qas
access-project = peg access-team = qas cost-center = 987654
Pegasus 项目开发 -Deny; Pegasus 项目测试 - Allowed; Unicorn 项目开发 - Deny; Unicorn 项目测试 - Deny
test-access-uni-qas
access-project = uni access-team = qas cost-center = 123456
Pegasus 项目开发 -Deny; Pegasus 项目测试 - Deny; Unicorn 项目开发 - Deny; Unicorn 项目测试 - Allowed
附加到每个角色的策略允许员工查看使用其团队名称标记的任何secrets,而不考虑其项目。通过切换角色,确认您的权限是否按预期工作。