エンジニア

2016.03.03

stsAssumeRoleについて ー後編ー

どうも、吉田です!

最近デスクで観葉植物を育て始めました、育つと木になるようなのでどーしよう!?
とか思いながら水やりしてます。

IMG_1262

さて、権限委譲の2回目です。
前回のブログ で書いたSTSの続きを書いていきます。

やりたいこと[アカウントAのIAMを使ってアカウントBの情報を取りたい]

では実際にやっていきます。

アカウントが2つ登場するので混乱するかもしれませんが頑張って書きます!

アカウントA:HANDS

アカウントB:LAB

とします。

HANDSアカウント側の作業(IAMユーザーの作成)

HANDSのアカウントを使ってTEBAの情報を取得するのでまず、HANDSアカウントでCLIが使えるようにします。

[手順]
1.IAMユーザー[0303_test]を作成します
2.IAMユーザーのクレデンシャルを控えておきます
3.作成したユーザーに「ReadOnlyAccess」の権限を付与します

ユーザーの作成

001

002

アクセス権の付与

003

LABアカウント側の作業(IAM ロールの作成)

HANDSアカウントに家の鍵を渡す家主を作成します。

[手順]
1.IAMロール[TEBA]を作成します
2.クロスアカウントアクセスの設定をします。AWS間のアクセスになるため、HANDSアカウントのIDを入力してください。
3.ロールのポリシーとして「SecurityAudit」を当てます。
4.信頼関係の編集からエンティティを「:root」から「:user/0303_test」に変更します

ロールの作成

005

006

007

008

009

ポリシーの調整

010

011

HANDSアカウント側の作業(TEBAのロールを使えるようにする)

作成した家主の鍵を使えるようにします。

[手順]
1.作成したIAMユーザー「0303_test」でカスタムポリシーを作成する
2.公式ドキュメント のポリシーを参考にカスタムポリシーを作成する

012

013

014

お疲れ様です!これで使用するための設定が完了しました。
あとは実際に使えるように手元のクライアントに情報を登録しましょう。

公式ドキュメント の一番上のサンプルをそのまま使用します。
今回やりたかったこととしては

1.大量のアカウントの情報を引っ張れるようにしたい
2.だけど全部クレデンシャルに書くと怖いしもれたとき大変

なので、HANDSで作成したCLIのクレデンシャルのみ登録し、対象はARNと、どのユーザー情報が信頼を結んでいるかだけを記載する方法を取ります。
これなら手間がかからず、何かあってもHANDSユーザーの鍵をどうにかするだけで済みます。

1.手元のMacの ~/.aws/credentials を修正する
2.profileを指定してCLIコマンドを叩く!

015

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}

みたいにぶん回しておけば一括取得も可能です。

一覧に戻る