Aws AssumeRole 筆記 – 練習使用 aws sts assume-role 取得某特定 Role 的 temporary security credentials
前置
需要準備以下材料:
- 有一個 Aws user 叫做 Abcde,他至少要有增刪修改 IAM Policy, Role 的權限
- 有一個 Aws Role 叫做 Ghijk (有個 Permission Policy 允許這個 Role 上傳檔案到 S3)
- 有一台電腦,有安裝 aws cli 以及 boto3 (為確保排除權限干擾,這台電腦的 aws configure 內不要設定有效 id, secret、也不要預設在環境變數內帶入任何 Aws 相關的環境變數)
這邊練習先以 Abcde 的 id, secret 驅動 aws cli 去取得 Ghijk 的一個暫時性 credentials (含 id, secret, session token),取得後,就可以用這組 credentials 做 Ghijk 可以做的事。
步驟
1. 首先是前置, Ghijk 需設定 Permission Policy 以及 Trust Policy,先以 Abcde 登入 Aws Console
2. 在 Aws Console 新增以下 Permission Policy,然後把他指派給 Ghijk
{ "Version": "2012-10-17", "Statement": [ { "Sid": "YourSid1", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::11111111111:role/Ghijk" } ] }
3. 編輯 Ghijk 的 Trust relationships,裏面至少要有以下的資訊
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::11111111111:user/Abcde", }, "Action": "sts:AssumeRole" } ] }
如果,本來的 Trust relationships 內已經有東西,且 Statement 裡面已經有 “Action” 是 “sts:AssumeRole” 的相關 item,且其 “Effect” 為 “Allow”。則請自行合併所有的 Principal,關於 Principal 或者 IAM Policy 格式,請參考:
至此權限部分準備完成。
4. 開一個 Terminal,先把它稱作 Terminal One
5. Terminal One 內 export 這幾個環境變數: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION (REGION 看你自己的需求是否要自己指定,這裡以簡便展示為主)
6. 輸入以下指令
aws sts assume-role --role-arn arn:aws:iam::11111111111:role/Ghijk --role-session-name a-uniquely-identify
預設一小時效期,最長可以指定 12 小時,請加參數 –duration-seconds 43200
參考文件:
7. 得到 Response 形式如下
{ "Credentials": { "AccessKeyId": "AZ***P5", "SecretAccessKey": "b9***98", "SessionToken": "7y***Tt", "Expiration": "2023-05-26T08:11:02+00:00" }, "AssumedRoleUser": { "AssumedRoleId": "An***E:a-uniquely-identify", "Arn": "arn:aws:sts::11111111111:assumed-role/Ghijk/a-uniquely-identify" } }
8. 開啟另一個 Terminal,稱作 Terminal Two
在這 export 以下四個環境變數: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION, AWS_SESSION_TOKEN, 相關內容請參考上述 Credentials
9. 此時 Terminal Two 的 aws cli 或 boto3 ,應該就可以開始做 Ghijk 被允許的事了,例如上傳 S3 檔案。
Leave a Reply