1. 這篇文章主要是想記錄一下如何通過token本地訪問、測試S3而不是直接使用IAM User的Access keys。簡而言之就是通過StsClient assumeRole獲取臨時的credentials然後生成S3Client。
詳細的IAM, STS相關的官網文檔可以參考這裏。
2. 第一步先在這裏創建一個IAM User。
1) 輸入UserName,並且編程接口,然後下一步直接Next不賦予權限,Tag可以忽略。
2) Review界面如圖:
3. 然後創建IAM Role。
1) 輸入你的AccountID,並且爲了安全,可以輸入external ID,這裏假設輸入的是“Required”,如圖:
2) Attach權限,選擇“AmazonS3FullAccess”,如圖:
3) 輸入IAM Role名稱,假設這裏輸入的是“TestUserRoleForS3”,如圖:
4) 創建Role之後,就能得到Role ARN,如圖:
4. 現在已經給TestUser添加了Role了,那麼接下來就是配置TesUser的policy來assume role了。
1) TestUser的Permissions配置的右下角“Add inline policy”,如圖:
2) 然後,輸入以下的policy並假設命名爲“TestUserRoleSTS”,如圖:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::123456789101:role/TestUserRoleForS3"
}
]
}
5. 以上配置IAM role使得我們可以通過Sts Client來獲取Credentials並且訪問S3,具體的代碼可以參考:
注:
1. 如果遇見User is not authorized to perform: iam:PassRole on resource,可能是生成Credentials的時候缺少了external id配置;
2. 如果需要通過cli方式驗證結果,可以參考:關於 AWS IAM Role 的最佳實踐。