stsAssumeRoleについて ー後編ー
どうも、吉田です!
最近デスクで観葉植物を育て始めました、育つと木になるようなのでどーしよう!?
とか思いながら水やりしてます。
さて、権限委譲の2回目です。
前回のブログ で書いたSTSの続きを書いていきます。
やりたいこと[アカウントAのIAMを使ってアカウントBの情報を取りたい]
では実際にやっていきます。
アカウントが2つ登場するので混乱するかもしれませんが頑張って書きます!
アカウントA:HANDS
アカウントB:LAB
とします。
HANDSアカウント側の作業(IAMユーザーの作成)
HANDSのアカウントを使ってTEBAの情報を取得するのでまず、HANDSアカウントでCLIが使えるようにします。
[手順]
1.IAMユーザー[0303_test]を作成します
2.IAMユーザーのクレデンシャルを控えておきます
3.作成したユーザーに「ReadOnlyAccess」の権限を付与します
ユーザーの作成
アクセス権の付与
LABアカウント側の作業(IAM ロールの作成)
HANDSアカウントに家の鍵を渡す家主を作成します。
[手順]
1.IAMロール[TEBA]を作成します
2.クロスアカウントアクセスの設定をします。AWS間のアクセスになるため、HANDSアカウントのIDを入力してください。
3.ロールのポリシーとして「SecurityAudit」を当てます。
4.信頼関係の編集からエンティティを「:root」から「:user/0303_test」に変更します
ロールの作成
ポリシーの調整
HANDSアカウント側の作業(TEBAのロールを使えるようにする)
作成した家主の鍵を使えるようにします。
[手順]
1.作成したIAMユーザー「0303_test」でカスタムポリシーを作成する
2.公式ドキュメント のポリシーを参考にカスタムポリシーを作成する
お疲れ様です!これで使用するための設定が完了しました。
あとは実際に使えるように手元のクライアントに情報を登録しましょう。
公式ドキュメント の一番上のサンプルをそのまま使用します。
今回やりたかったこととしては
1.大量のアカウントの情報を引っ張れるようにしたい
2.だけど全部クレデンシャルに書くと怖いしもれたとき大変
なので、HANDSで作成したCLIのクレデンシャルのみ登録し、対象はARNと、どのユーザー情報が信頼を結んでいるかだけを記載する方法を取ります。
これなら手間がかからず、何かあってもHANDSユーザーの鍵をどうにかするだけで済みます。
1.手元のMacの ~/.aws/credentials を修正する
2.profileを指定してCLIコマンドを叩く!
credentialsのプロファイル[]に書くのはイタリックの赤字だけです。 profile は書いちゃダメ
こんな形で取得することができたので、あとは必要なアカウント数だけ
1.ロールを作成する
2.ロールを使えるようカスタムポリシーを修正する
3.クレデンシャルに登録する
上記作業を繰り返せば大丈夫です。
プロファイルを付け替えるだけなのでfor文でぶん回せばいくらでも一覧取得ができます。
プロファイル名をターゲットリストみたいに作っておけば・・・
TARGET_LIST='作ったリストのパス'
while read line; do
aws --profile ${line} ec2 describe-instances \
--region ap-northeast-1 | \
jq '.Reservations[].Instances[]| \
{"InstanceID":.InstanceId,"parameters":[{"InstanceType":.InstanceType,"AZ":.Placement.AvailabilityZone}]}'
done < ${TARGET_LIST}
みたいにぶん回しておけば一括取得も可能です。