組織内でIAM(Identity and Access Management)ユーザーからSSO(Single Sign-On)ユーザーへの移行を計画している場合、スムーズでセキュアな過渡期を確保することは非常に重要です。この記事では、IAMユーザーを無効化し、SSOユーザーへ移行するためのプロセスを紹介します。特に、数百人のユーザーを対象とした場合の自動化スクリプトの作成と利用に焦点を当てます。
(忙しい方は直接に最後スクリプトへ)
IAM無効化の必要性
IAMユーザーをSSOユーザーへ切り替える過程で、IAMの無効化はセキュリティ上のリスクを最小限に抑えるための重要なステップです。一斉に削除することのリスクを避け、過渡期間を設けることで、組織内のすべてのユーザーがスムーズに移行できるようにします。
スクリプトの準備
IAMユーザーを効率的に無効化するために、AWS Native原則ですぐ使えるCloudshell利用でbashスクリプトを作りました。このスクリプトは、指定されたIAMユーザー以外のログインパスワードを一時的に削除しました。スクリプトの使用には、適切なAWSアクセス権限が必要です。
スクリプトの概要
目的: IAMユーザーのログイン権限を無効化し、SSO移行を促進する。
機能: 指定ユーザーのログインを無効化し、必要に応じてパスワードを設定して再有効化する。
利用シナリオ: 緊急対策、一斉無効化、個別無効化など。
使用方法
環境準備: AWS Cloudshell
スクリプト設定: スクリプトに除外用IAMユーザーのリストを事前作成する。
実行: スクリプトを実行し、IAMユーザーのプロファイル削除を行う。
確認: AWSコンソールまたはCLIを使用して、変更を確認します。
まとめ
IAMからSSOへの切り替えは、組織のセキュリティを強化する重要なステップです。このプロセスを安全かつ効率的に進めるために、IAM無効化スクリプトの作成など自動化することが役立ちます。この記事で紹介したスクリプトが、皆さんのIAMからSSOへの移行作業を支援することを願っています。
また、このスクリプトは、IAMユーザーを速やかに無効化することで、セキュリティインシデント発生時の緊急対策としても有効ですので、不正アクセスが疑われる場合に迅速に対応できるように、事前に準備しておくことをお勧めします。
スクリプト
#!/bin/bash
# user.csvから対象外のユーザ名を配列として読み込む
declare -A csvUsers
while IFS=, read -r userName targetFlag
do
if [ "$targetFlag" == "yes" ]; then
csvUsers["$userName"]=1
fi
done < "user.csv"
# AWS CLIを使用して全IAMユーザーのリストを取得
allUsers=$(aws iam list-users --query 'Users[*].UserName' --output text)
# 処理カウンタの初期化
totalUsers=0
successCount=0
skipCount=0
failedCount=0
# 全IAMユーザーに対して処理を行う
for userName in $allUsers; do
((totalUsers++))
if [ "${csvUsers["$userName"]}" != "1" ]; then
# ユーザーがcsvに存在しない、またはTargetFlagが"No"の場合
echo "ログインプロファイルを削除中: $userName"
if aws iam delete-login-profile --user-name "$userName"; then
((successCount++))
echo "成功: ログインプロファイルが削除されました - $userName"
else
((failedCount++))
echo "エラー: ログインプロファイルの削除に失敗しました - $userName"
fi
else
((skipCount++))
echo "ログインプロファイルの削除をスキップした: $userName"
fi
done
# 処理結果の出力
echo "処理結果:合計ユーザ数 $totalUsers、成功数 $successCount、スキップ数 $skipCount、失敗数 $failedCount"