search-all-iam-policiesでIAMを検索する
多くのプロジェクトに関わったエンジニアが退職の意向を示した時、管理者の脳裏に浮かぶのは「どうにかして引き留めよう」ではなく、「個人のIAMで動いてる部分ないだろうか?」ですよね。
「個人のIAMでバッチ処理が実行されていて、いつの間にか止まってた」
なんて事態は避けたいところです。
Google Cloud Consoleで組織の全プロジェクトのIAMを調べるのも良いですが、新たな退職者が増えるだけです。
gcloudコマンドで組織内の全プロジェクトに追加されている特定のアカウントのIAMを調べる
gcloud asset search-all-iam-policiesを使います。
scopeはIAMを検索する検索範囲で、組織・フォルダ・プロジェクトを指定する。最大の範囲は組織です。
--scope organizations/ORGANIZATION_NUMBER --scope floders/FOLDER_NUMBER --scope projects/PROJECT_ID or PROJECT_NUMBER
search-all-iam-policiesで取得できるプロジェクト情報はPROJECT_NUMBERでピンとこないので、projects listで取得したプロジェクト情報と結合して、把握しやすいPROJECT_IDに変換します。
下記は指定の組織内で指定のユーザーアカウントにIAMを追加しているPROJECT_IDを取得するシェルスクリプトです。
#!/bin/zsh
target_user=xxx@gcp.biz
organization_id=012345
pjs=$(gcloud projects list --format json | jq -r '.[] | [ .projectId, .projectNumber ] | @csv')
declare -A pj_arr
for pj in $pjs; do
pj=$(echo $pj | sed -e 's/\"//g')
pid=$(echo $pj | cut -d , -f 1)
pno=$(echo $pj | cut -d , -f 2)
pj_arr[$pno]=$pid
done
pjs=$(gcloud asset search-all-iam-policies --scope organizations/$organization_id --flatten "policy.bindings[].members" --filter "policy.bindings.members:$target_user" --format json | jq -r .[].project | sort | uniq)
for pj in ${pjs}; do
pj=$(echo $pj | sed -e 's/projects\///')
echo ${pj_arr[$pj]}
done
実行前の準備
このシェルでIAMを取得するには、実行するユーザーアカウントに組織で下記のIAMを含むロールが割り当てられている必要があります。
resourcemanager.projects.get cloudasset.assets.searchAllIamPolicies
また、jqが必要なのでインストールしておく。
実行
./search-all-iam.sh
コメント
コメントを投稿