iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
雖然設定權限和驗證的路上一踩一個坑,但是現在放棄還太早了!

雖然 boto3 不能直接使用 AWS Toolkit 取到的暫時性憑證,但是走過的路並沒有白費。
因為已經設定好了 IAM Identity Center,到了這一步才能直接使用 SSO 的方式設定 boto3 的驗證!

當然,要直接使用 IAM 生成的 AWS Access Key 技術上也可行,但安全性就沒有這麼好了。
在實務的應用上,使用金鑰也要另外考慮管理和輪替問題。

那... 到底要怎麼設定?

目標:用 boto3 透過 SSO Profile 連上 AWS

安裝 CLI

  • 要使用 SSO 的方式登入,需要依靠 AWS CLI 指令,因此安裝 AWS CLI
    這裡安裝的是新版(v2)
    https://ithelp.ithome.com.tw/upload/images/20250924/20168437zrcqKhGqyG.png
  • 安裝完成後,使用指令 aws --version 來確認版本
    PS C:\Projects\2025-ironman\s3-reader> aws --version                                              
    aws-cli/2.28.9 Python/3.13.4 Windows/11 exe/AMD64
    
  • 設定 SSO Profile:執行以下指令
    aws configure sso
    
  • 接著依照提示輸入資訊
    https://ithelp.ithome.com.tw/upload/images/20250924/20168437XLhr76tsxx.png
    Region 居然還能用選的,真是好方便。
欄位名稱 說明
SSO session name 自定義名稱,用來識別登入資訊
SSO start URL AWS IAM Identity Center 的專屬登入入口網址
SSO region IAM Identity Center 建立所在的 Region
SSO registration scopes 登入時要求的存取範圍。預設:sso:account:access,一般情境下不需要修改。

SSO start URL

邀請信中提供的 Your AWS access portal URL,
也可以從 Console -> IAM Identity Center -> 設定 中找到。
https://ithelp.ithome.com.tw/upload/images/20250924/20168437u5szdqQTNJ.png

  • 都輸入後會自動開啟瀏覽器,依序完成 SSO 登入
    https://ithelp.ithome.com.tw/upload/images/20250924/20168437agPbaolqiZ.png
  • 登入完成就會出現要求授權的畫面,當然選擇「允許存取」
    https://ithelp.ithome.com.tw/upload/images/20250924/20168437672sZXhJLJ.png
  • 登入完成!
    https://ithelp.ithome.com.tw/upload/images/20250924/20168437iRCneAF1VQ.png
  • 回到 VS Code,選擇要使用的 Permission Set
    https://ithelp.ithome.com.tw/upload/images/20250924/20168437DR9jsTLXbo.png
  • 接續設定 SSO Profile
    https://ithelp.ithome.com.tw/upload/images/20250924/20168437woVSMl8G9C.png
欄位名稱 說明
Default client Region 要操作的 Region
CLI default output format CLI 輸出的格式,常見選項有 jsontabletext,預設為 json
Profile name SSO Profile 名稱,預設帶入 <服務名稱>-<帳號ID>,可以自行改成方便識別的名稱
  • 系統溫馨提示了查看身分的指令
    aws sts get-caller-identity --profile <剛取好的 profile name>
    
    https://ithelp.ithome.com.tw/upload/images/20250924/20168437NbYb9KAG1W.png

讓 boto3 使用剛才建好的憑證

這裡要小小調整一下程式,原先的方式:

s3_client = boto3.client("s3")

要改成取用剛建立好的 profile

# 使用剛才建立的 profile 建立一個 boto3 Session(封裝憑證與設定)
session = boto3.Session(profile_name="ithome-2025-developer")
# 透過這個 Session 建立 S3 Client
s3_client = session.client("s3")
  • 實際執行結果
    https://ithelp.ithome.com.tw/upload/images/20250924/201684379G8IbZMl3h.png

就這樣?

是的,就這樣。
建立好 IAM Identity Center 就是這麼方便!
剛才的 aws configure sso 其實做了兩件事:

  1. 將 SSO 的登入資訊與選擇的 Account / Permission Set 寫進 ~/.aws/config
    (也就是生成 SSO 設定檔)
  2. 把取到的 SSO token 快取到 ~/.aws/sso/cache/,提供 SDK(boto3)自動取用

所以只要指定要使用的 SSO 設定檔,boto3 就知道現在要使用哪一個 SSO token 執行囉!
也因為設定好了 SSO 設定檔,往後要登入的時候只需要一行指令:

aws sso login --profile <SSO profile name>

再完成瀏覽器的登入流程就可以成功取得 SSO token。


那 boto3 取得 SSO token 就可以調用 AWS 上的資源了嗎?

不完全對。

import boto3

session = boto3.Session(profile_name="ithome-2025-developer")
s3 = session.client("s3")

實際上的運行流程是這樣的:

  1. 讀設定檔
    boto3/botocore 先讀 ~/.aws/config 找到指定的 profile,確認它是 SSO 型的設定。
  2. 使用 SSO token
    boto3 會去 ~/.aws/sso/cache 找對應 start URL 且還在有效期內的 SSO access token。
    如果找不到或已過期,就會報錯,提示執行 aws sso login。
  3. 呼叫 IAM Identity Center API 換取短期憑證
    拿到 token 後,SDK 會呼叫 GetRoleCredentials API,用 SSO bearer token 交換一組 STS 短期憑證。
  4. 用短期憑證簽發請求
    這組短期憑證就跟 STS AssumeRole 拿到的一樣,可以簽 sigv4 請求去叫 S3/EC2/… 等 API。
    SDK 會在憑證接近過期時自動再取一次,但如果 SSO token 過期,就需要重新使用 aws sso login 登入。
⚠️ 注意
SSO token 的存續時間 與 Permission Set session 憑證的存續時間 是彼此獨立的兩個時間。

資訊補充

有鑑於這幾天的篇幅實在長,最後就統整一下 AWS 帳號與開發環境設定流程

步驟 目的 注意事項
1. 安全化 Root 帳號 保護帳號最高權限,避免日常使用 僅用於帳單與帳號設定,必須啟用 MFA
2. 建立低權限登入用 User 作為日常登入入口,降低風險 不附加任何權限,僅啟用 Console Access 與 MFA;登入後需切換角色
3. 建立 Admin Role 提供管理資源的最高權限 附加 AdministratorAccess;信任政策限制只能由登入用 User + MFA Assume
4. 安裝 AWS Toolkit for VS Code 提供 IDE 直接操作 AWS 資源 僅在 IDE 中可用,無法將憑證分享給 boto3
5. 啟用 IAM Identity Center 建立使用者,集中管理權限 選定固定的 Region;建立 Permission Set 並指派帳號
6. 安裝 AWS CLI v2 讓 CLI 與 SDK 支援 SSO 登入與臨時憑證 確認版本指令 aws --version
7. 設定 SSO Profile 讓 CLI / SDK 共用登入資訊 使用 aws configure sso 建立設定檔;登入時跑 aws sso login --profile <sso profile name>

上一篇
Day 9. 此憑證非彼憑證
下一篇
Day 11. 有勇無謀是匹夫
系列文
科學的盡頭是玄學?AI占卜小助手與知識庫驗證12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言