Byte Ebi's Logo

Byte Ebi 🍤

每天一小口,蝦米變鯨魚

[大話 AWS 雲端架構筆記] IAM

簡介 IAM 和使用方法和運作機制

Ray

因為 root 權限太大,必須切割成多個用戶和群組來設定權限

AWS IAM
什麼是 IAM?

運作機制

IAM 的架構如下

graph LR;

Policy1-->Permission;
Policy2-->Permission;
Policy3-->Permission;
Permission-->Role;
Permission-->Group;
Group-->User;
User-->Password;
User-->Credentail;
Role-->外部使用者;
Role-->AWS內部服務;

Policy

官方文件

將 Policy 連接到 User 或 Group 時,Policy 會允許或拒絕使用者在特定資源上執行特定任務的許可

使用 JSON 格式定義,有圖形化工具 Visual Editor 可以使用
寫好的 Policy 可以透過IAM Policy Simulator 進行測試

組成

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*"
    }
  ]
}

Effect

可以是AllowDeny
根據預設,IAM 使用者沒有使用資源和 API 動作的許可,因此所有請求均會遭到拒絕
當 Allow 和 Deny 同時存在時會套用 Deny policy,安全至上
預設都是 Deny,所以通常是要寫 Allow 的 Policy

Action

Policy 許可或拒絕的操作列表

範例:

"Action": [
    "ec2:AuthorizeSecurityGroupIngress",
    "ec2:AuthorizeSecurityGroupEgress",
    "ec2:RevokeSecurityGroupIngress",
    "ec2:RevokeSecurityGroupEgress",
    "dynamodb:*"
],

Resource

受 Policy 影響的資源

範例:

"Resource": "arn:aws:ec2:region:account:security-group/*",

Condition

選擇性參數,用來控制 Policy 何時生效的條件
例如:從特定 IP 連線或是有使用 MFA 登入時才允許存取 S3

範例:

"Condition": {
    "IpAdress": {
        "aws:SourceIP": "10.14.9.0/14"
    }
}

Principal

Principal

選擇性參數,指定被 Policy 限制的單位,如「使用者」或是「應用程式」

範例:

"Principal": { 
  "AWS": [
    "arn:aws:iam::123456789012:root",
    "999999999999"
  ],
  "CanonicalUser": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"
}

Permission

由複數的 Policy 構成,指定給 User、Group 或是 Role


IAM Group

可以將 Permission 放到群組上
並將 user 加到 group 內就能有群組的權限,便於管理或變更權限


IAM User

由 Root 帳號管理
用網頁登入時會有專屬 12 位數字的 ID 搭配帳號密碼
如果是透過程式或是 CLI 操作 AWS 的話必須透過Credential

基於安全性考量,通常會建立一個 admin 的 IAM user 來當管理者
而不是直接使用 root user

  • IAM User 可以同時屬於一個或多個 IAM Group
  • IAM User 無法同時屬於一個或多個 IAM Role,必須透過Assume Role的方式來切換
    • Assume Role 也是一個 policy 的 Action(“Action”: “sts:AssumeRole”)

Role

可以作為外部系統串接用,又或是帳號內部 AWS 服務之間互相溝通用

例如把擁有允許創建S3 Bucket Policy 的 Role 放到 EC2 上
在 EC2 裡就可以下指令或用程式創建 S3 Bucket

沒有長期登入憑證(密碼/存取金鑰),在工作階段會動態產生臨時安全性登入資料

善用 Role 可以避免頻繁調整 User 擁有的 Policy

例如:

平常 User 對 S3 的存取是受限制的
當套用了具有 Admin 權限的 Role 之後就取得 S3 Admin 權限了


補充

可以使用 AWS Access Analyzer 追蹤專案的權限變化

最新文章

Category

Tag