【发布时间】:2020-05-22 17:57:16
【问题描述】:
我需要创建一个可供开发人员使用的角色。我们只有一个用于开发和生产的帐户(不推荐,我知道)。创建的资源用 dev 或 prod 标记以识别环境。要求是开发人员可以在两种环境中都拥有 ReadOnlyAccess,但只能对标有 'dev'
的资源拥有完全访问权限所以如果一个开发者想要创建一个资源,他应该用 dev 来标记它。此外,他可以修改其他用户创建的其他资源,这些资源也带有 dev 标记。在 AWS 文档中,我使用下面的 sn-p 创建了一个 CloudFormation 模板,但我注意到只允许 ReadOnlyAccess。开发者无法创建带有“dev”标签的资源,也无法修改已经带有“dev”标签的资源。任何指针都会有所帮助。
我想使用 PowerUseAccess 这是一个托管策略,但不知道如何在托管策略之上提供条件。
RoleDeveloper:
Type: AWS::IAM::Role
Properties:
RoleName: DeveloperRole
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
AWS: !Sub arn:aws:iam::${UserAccountId}:root
Action:
- 'sts:AssumeRole'
Path: /
Policies:
- PolicyName: FullDeveloperAccessWithDevTag
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: "*"
Resource: "*"
Condition:
StringEquals:
aws:ResourceTag/env:
- dev
ManagedPolicyArns:
- arn:aws:iam::aws:policy/ReadOnlyAccess
【问题讨论】:
-
条件很可能只适用于某些动作,因为并非所有动作都支持条件。你能告诉我们一个他们试图做什么但被拒绝的例子吗?另外,请告诉我们他们是如何尝试执行操作(控制台、AWS CLI 命令、API 调用)的,以便我们可以尝试重现这种情况。
-
@JohnRotenstein 你的意思是
Action的通配符不适用于条件吗?例如,我可以说 DynamoDB。开发人员应该毫无困难地创建一个带有标签 env: dev 的表或修改带有该标签的现有表。但事实并非如此。访问是使用控制台。同样,我对Action使用了通配符,因为我应该根据开发人员的标签限制对所有资源的访问。
标签: amazon-web-services amazon-cloudformation amazon-iam