介紹
簡單來說,IAM
角色是一組權限的集合,IAM
用戶或者AWS
服務可以臨時性代入這個角色,獲得角色所擁有的權限;AWS
官方定義如下:
IAM
角色類似於用戶,因爲它是一個AWS
實體,該實體具有確定其在AWS
中可執行和不可執行的操作的權限策略。但是,角色旨在讓需要它的任何人代入,而不是唯一地與某個人員關聯。此外,角色沒有關聯的標準長期憑證(密碼或訪問密鑰)。相反,如果用戶擔任某個角色,則會動態創建臨時安全憑證併爲用戶提供該憑證。
實戰
在AWS實戰 - 利用IAM對S3做訪問控制中,我們的實戰案例裏有一個存儲桶derek-public2
,除了Harp-Admin
,其餘IAM
用戶都只有只讀權限,現在我們來建立一個擁有寫入該存儲桶權限的角色,以便在某些特殊情況下,普通IAM
用戶可以臨時代入這個角色來修改存儲桶。
- 使用
Harp-Admin
登錄IAM
控制檯,點擊角色,創建角色; - 在選擇受信任實體的類型裏,選擇其他
AWS
賬戶,在賬戶ID
中輸入本AWS
賬號的ID
;
- 需要外部
ID
一般在授權其他AWS
賬戶代入此角色的時候使用,需要MFA
驗證看情況選擇;
- 點擊下一步,到了權限策略頁面,直接選擇創建策略即可,權限策略如下,命名爲
edit_public2
:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::derek-public2"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::derek-public2/*"
]
}
]
}
- 策略創建完成,回到創建角色頁面,勾選
edit_public2
,需要注意的是,一個IAM
用戶切換角色後,它只會擁有角色賦予的權限,不會擁有IAM
用戶原先自帶的權限,因此爲了正常訪問S3
,我們再勾選s3_common_policy
; - 下一步創建
tag
,再下一步,角色名稱填寫爲Public2_Manager
,點擊創建,角色創建完成; - 爲了讓賬戶下的普通
IAM
用戶可以正常訪問IAM
控制面板,我們直接給之前創建的s3_common_group
組添加一條AWS
託管策略IAMReadOnlyAccess
; - 爲了給
IAM
用戶賦予切換角色的權限,我們需要再創建一條策略,附加給s3_common_group
,策略json
如下:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::712538533226:role/Public2_Manager"
}
}
- 使用
user1
登錄,進入S3
,在derek-public2
中創建文件夾,提示失敗; - 點擊右上角用戶處,點擊切換角色,跳轉到切換角色頁面,賬戶文本框中輸入賬戶
ID
,角色輸入Public2_Manager
,然後點擊切換角色;
- 此時在
derek-public2
存儲桶下,已經可以正常建立文件夾了;
- 通過控制檯的角色切換在一個小時後自動失效,需要重新切換,也可以手動退出角色;
- 也可以使用
cli
的方式切換角色,詳見切換到IAM角色(AWS CLI);