自動化登入 AWS SSO Login

自動化登入 AWS SSO Login

AWS SSO 的使用者最怕的就是 Session 一過期就得重新開瀏覽器登入。如果你一天要切換多個 AWS 帳號或環境,頻繁的手動驗證真的會讓人崩潰。於是我動手寫了一個簡單的排程腳本,只要 Session 過期就自動觸發 aws sso login,讓工作流程回到自動化的懷抱。

Step 1. 確認 AWS SSO Profile 設定

AWS CLI 會把 SSO 設定寫在 ~/.aws/config。先檢查你要自動刷新的 Profile 名稱,確保後續腳本能對應正確。

cat ~/.aws/config

常見的設定範例如下,sso_sessionsso_account_id 等欄位都應該是你已經設定好的值:

[profile default]
sso_session = my-sso-session
sso_account_id = 123456789012
sso_role_name = AdministratorAccess
region = ap-northeast-1
output = json

把想要自動登入的 profile 名稱記起來,下一步會把它寫入腳本中。

Step 2. 建立自動刷新腳本

接著建立 aws-sso-refresh.sh,原理是先執行一個需要憑證的 AWS 指令(這裡用 aws s3 ls),若回傳錯誤就呼叫 aws sso login 重新登入。

#!/bin/bash
# 設定要使用的 SSO profile 名稱
PROFILE="default"

# 嘗試呼叫一個 S3 指令確認 session 是否有效
aws s3 ls --profile "$PROFILE" >/dev/null 2>&1
STATUS=$?

if [ $STATUS -ne 0 ]; then
  echo "$(date '+%Y-%m-%d %H:%M:%S') - Session expired or not found. Re-login..."
  aws sso login --profile "$PROFILE"
else
  echo "$(date '+%Y-%m-%d %H:%M:%S') - Session still valid."
fi

上面使用 $(date '+%Y-%m-%d %H:%M:%S') 讓日誌格式更清楚,也記得把 PROFILE 改成你自己的名稱。

Step 3. 開啟執行權限

chmod +x aws-sso-refresh.sh

Step 4. 加入 crontab 排程

設定每 6 小時執行一次腳本,並把輸出寫入 log 方便追蹤。

crontab -e

在編輯器中加入以下排程:

0 */6 * * * /home/youruser/aws-sso-refresh.sh >> /home/youruser/aws-sso-refresh.log 2>&1

換成你自己的路徑即可。若你常常忘記維護 log,可以改成 journalctl 或設定 logrotate,避免檔案無限長大。

注意事項與延伸

  • 第一次仍需手動登入:AWS CLI 會打開瀏覽器讓你授權,之後腳本才有辦法自動刷新。
  • SSO 最長 7 天會過期:就算排程跑得再勤勞,只要超過 7 天沒有手動登入,AWS 還是會要求重新授權。
  • 多 Profile 情境:若你需要刷新的 profile 不只一個,可以將上述腳本包成函式,或是以陣列迭代多個 profile 名稱。
  • 錯誤監控:建議搭配簡單的通知機制,例如當 aws sso login 返回非 0 狀態時,寄送 Email 或串接 Slack Webhook,避免在服務中斷時才發現。

搞定以上四個步驟之後,就能把「每六小時確認一次 Session」這種無聊的事情交給機器。希望這份筆記也能幫你省下不少時間,把心力放在真正重要的事情上!

Title

Related Posts

國中同學敘舊的感悟

國中同學敘舊的感悟

一次國中同學的聚會,讓人感慨生活的不同選擇與共同的價值觀,讓友誼得以延續。

Read More
利用 GPT 和 Github Actions 自動化發佈技術文章

利用 GPT 和 Github Actions 自動化發佈技術文章

透過 GPT 和 Github Actions,將零碎的技術筆記快速整理為正式文章並自動發佈,提升內容管理效率。

Read More
解決 CameraX 外接鏡頭支援問題

解決 CameraX 外接鏡頭支援問題

探討在 CameraX 開發中遇到外接鏡頭支援問題的挑戰,並提供使用 Camera2 API 的解決方案。

Read More