Study Notes - Identity and Access Management (IAM)
AWS Identity and Access Management (IAM) Policy 的整理.
IAM Policy
IAM Policy Structure
IAM Policy 用 JSON 描述,基本的格式如下圖:
JSON 是資料結構語言 (Data-structured Language)。IAM Policy 算是一種 DSL (Domain-Specific Languages) 的形式。用資料結構語言當作特定領域語言,個人覺得不是很適合。
IAM Policy Elements
- Version: IAM 的版本,預設是 “2008-10-17”, 但是官方建議使用 “2012-10-17”
- Id: 使用在不同 Services 的識別,建議使用 UUID. Optional.
- Statement: IAM 最主要的 Element, 包含以下 Elements:
- Sid: Statement ID, 用來描述 Statement 的識別. Optional.
- Principal / NotPrincipal: 指定什麼樣的 user (IAM user, federated user, or assumed-role user), AWS account, AWS service. Optional.
- Effect: 必要的欄位, 值有
Allow
orDeny
- Action / NotAction: 指定哪一些動作, 一定要有.
- Resource / NotResource: 描述 AWS 資源的集合. AWS 資源名稱: Amazon Resource Names (ARNs) and AWS Service Namespaces
- Condition: 條件比對, Optional.
- Supported Data Types: IAM Policy 本身用 JSON 資料格式做
Statement
基本結構:
- Principal / NotPrincipal: 誰, 可以是 IAM User, AWS User, 或者是 AWS Service. 用 ARN (AWS Resource Namespace) 描述。
- Effect: 允許或拒絕 (Allow or Deny)
- Action / NotAction: 做怎樣的動作,可以針對 AWS 各個 Service 動作個別指定。每個 AWS Service 的 Action 可以查: AWS Service Actions and Condition Context Keys for Use in IAM Policies,
- 針對什麼資源: Resource / NotResource
一個 Policy 可以有多個 Statement,描述不同的目的,像是把 AWS Service 分開描述權限。
Principal / NotPrincipal
可以是 IAM User, AWS User, 或者是 AWS Service. 用 ARN (AWS Resource Names) 或者 AWS Service Namespaces 描述。
ARN 的資料結構:
1 | arn:partition:service:region:account-id:resource |
ARN 例子:
1 | <!-- Elastic Beanstalk application version --> |
IAM Policy 可以跨不同的 AWS account, 用在不同的環境 (Development, Test, Production), 需要存取資料的時候,就可以利用 IAM Role 設定。
Action / NotAction
Action 命名規則:動詞 + 受詞
- 動詞: Associate, Describe, Delete, Disable, Modify, Revoke, Run, Reset … etc.
- 受詞: Instance, Image, Endpoint, KeyPair,
整理常用的 AWS Service 如下:
- Actions for AWS Identity and Access Management
- Actions for Amazon EC2, 包含:
- EC2
- VPC
- EBS/AMI
- Security Group
- Actions for ELB
- [Actions for Auto Scaling](http://docs.aws.amazon.com/IAM/latest/UserGuide/list_Auto Scaling.html)
- Actions for S3
- Actions for SES
- Actions for SQS
- Actions for SNS
- Actions for Route53
- Actions for CloudFront
- Actions for CloudWatch
如果真的是實踐 IAM Best Practice 裡提到的 Grant least privilege
,那麼上述的資訊,就會需要查詢。
因為沒有 IDE support content assistant / auto-complete. orz…
Resource / NotResource
— 待整理 —
Condition
Condition 邏輯我參考 Redmine 的 Filter 的設計來理解,如下圖查詢:
- 欄位是 Status
和
Priority 兩個都要有 - Status 的值是 “In Progress”
或
“Resolved” 兩個 - Priority 的值是 “Normal”,
或
High,或
Urgent
延伸閱讀
站內延伸
- Temporary Credential Using Cross Account Roles
- Ops as Code with AWS CLI
- IAM - EC2 Supported Resource-Level Permissions
- SES SMTP Credentials
- AWS Study Roadmap