+86 135 410 16684Mon. - Fri. 10:00-22:00

AWS学习笔记-AWS IAM Policy

AWS学习笔记-AWS IAM Policy

AWS学习笔记-AWS IAM Policy

AWS Identity and Access Management (IAM) Policy 的整理. 主要是 Policy JSON 的用法整理.

IAM Policy Structure

IAM Policy 用 JSON 描述,基本的格式如下圖:

IAM_Policy_Structure

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 or Deny
    • 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
2
3
arn:partition:service:region:account-id:resource
arn:partition:service:region:account-id:resourcetype/resource
arn:partition:service:region:account-id:resourcetype:resource

ARN 例子:

1
2
3
4
5
6
7
8
9
10
11
<!– Elastic Beanstalk application version –>
arn:aws:elasticbeanstalk:us-east-1:123456789012:environment/My App/MyEnvironment
<!– IAM user name –>
arn:aws:iam::123456789012:user/David
<!– Amazon RDS instance used for tagging –>
arn:aws:rds:eu-west-1:123456789012:db:mysql-db
<!– Object in an Amazon S3 bucket –>
arn:aws:s3:::my_corporate_bucket/exampleobject.png

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 如下:

如果真的是實踐 IAM Best Practice 裡提到的 Grant least privilege,那麼上述的資訊,就會需要查詢。

因為沒有 IDE support content assistant / auto-complete. orz…

Resource / NotResource

Condition

Condition_Block

Condition 邏輯我參考 Redmine 的 Filter 的設計來理解,如下圖查詢:

Condition_Redmine

  • 欄位是 Status Priority 兩個都要有
  • Status 的值是 “In Progress” “Resolved” 兩個
  • Priority 的值是 “Normal”, High, Urgent

Reference

常用的 Reference