[大話 AWS 雲端架構筆記] IAM
簡介 IAM 和使用方法和運作機制
因為 root 權限太大,必須切割成多個用戶和群組來設定權限
運作機制
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
可以是Allow
或Deny
根據預設,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
選擇性參數,指定被 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 追蹤專案的權限變化