IAM - EC2 Supported Resource-Level Permissions
利用 IAM Policy、以及 EC2 ResourceTag 限制權限,像是只有 DBA 可以針對 DB 機器做動作。不過搞了半天,踩了一個大雷 …. 整理以下 …
需求:用 ResourceTag 限制特定的 Actions
這個例子是 設定讓 DBA 可以 :
- 在 EC2 Console 看到所有 EC2
- DBA 只能針對 ResourceTag
Component=DB
做以下動作:- 開機 Start
- 關機 Stop
- 重開機 Reboot
- 允許更改 EC2 Instance Type
一開始我是這樣設定的, 有兩段 Statement:
- 第一段就是允許在 EC2 Console 看到所有資源
- 第二段就是針對條件
ec2:ResourceTag/Component
是DB
的,可以有四個動作
1 | { |
看起來很美好。但實際上結果是:
以下這些 action 可以:
- ec2:StopInstances
- ec2:StartInstances
- ec2:RebootInstances
以下這些 action 不可以 :
- ec2:ModifyInstanceAttribute
所以 DBA 就不能修改 instance type. 開始限縮範圍找問題。
實驗一:指定 Resource 的 ARN
指定 Resource ANR, EC2 instance 的 ARN 格式是:
1 | arn:aws:ec2:region:account-id:instance/instance-id |
更改 Policy 如下:
1 | { |
結果:
- ec2:StopInstances – ok
- ec2:StartInstances – ok
- ec2:ModifyInstanceAttribute – fail
更改 ARN: arn:aws:ec2:us-west-1:12345678899:instance/*
,這樣應該等於 *
,但結果還是一樣:
實驗二:確認 ModifyInstanceAttribute 是否能正確執行
問題出在 ModifyInstanceAttribute
這個動作,所以重新確認這個是不是跟 Instance Type
有關係。從 ModifyInstanceAttribute 可以找到 InstanceType
。
重新確認動作,先移走 Resource
ARN 的指定,如下:
1 | { |
結果:
- ec2:StopInstances – ok
- ec2:StartInstances – ok
- ec2:ModifyInstanceAttribute – ok
類似的,增加 Condition
結果也是,所以可以確認的是 Resource
、Condition
都會影響 ModifyInstanceAttribute
.
最後找到這個討論:Granting IAM users permission to change instance’s names (AWS Forums),然後找到這篇文件:Granting IAM Users Required Permissions for Amazon EC2 Resources,描述了 Resource 的限制,分成兩種:
- Supported Resource-Level Permissions: 哪一些 Action 支援 ARN 權限控管,不多,而且 ARM 也有限制。
- Unsupported Resource-Level Permissions: 哪一些 Action 不支援 Resource 權限控管,超多!!!
所以 ModifyInstanceAttribute
是不支援的 Resource-Level,所以前述寫法都不行。
Finally
ModifyInstanceAttribute
不支援的 Resource-Level,所以就要拆開 Statement,個別描述,所以最後修改成以下三部分:
- 在 EC2 Console 看到所有 EC2
- DBA 只能針對 ResourceTag
Component=DB
做以下動作:
- 開機 Start
- 關機 Stop
- 重開機 Reboot
- 允許針對
所有 EC2
可以更改 Instance Type
1 | { |
延伸閱讀 (站內)
- Temporary Credential Using Cross Account Roles
- Study Notes - AWS Identity and Access Management (IAM)
- SES SMTP Credentials
- Ops as Code with AWS CLI
- AWS Study Roadmap
Reference
- AWS Service Actions and Condition Context Keys for Use in IAM Policies
- AWS Forums: Granting IAM users permission to change instance’s names
- AWS Security Blog: Demystifying EC2 Resource-Level Permissions
- AWS IAM JavaScript SDK
- Amazon Resource Names (ARNs) and AWS Service Namespaces
- Granting IAM Users Required Permissions for Amazon EC2 Resources