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 檔案。

其他參考文件

  1. Using temporary security credentials with the AWS CLI
  2. How do I assume an IAM role using the AWS CLI?
  3. I created or updated an IAM policy and received the error “Has prohibited field Principal”. How can I resolve this?
  4. Policy has Prohibited field Principal AWS Error [Solved]

You Might Also Like

Leave a Reply

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料