サーバーワークス サポート窓口 伊藤です。
コミュニティーでは九龍と呼ばれています。
- 開発環境と本番環境
- 社内システムと外部公開サイト
- SaaSサービスをテナント毎に分割
そのような環境で、対象アカウント毎に、ログイン・ログアウトを行ってアカウントを切り換えるという運用を行っている方が多いと思いますが
IAMロールを使うことで、ログアウトせずに、別のアカウントにスイッチするという方法が可能です。
AWS公式のチュートリアルもあるのですがよりわかりやすく(スクリーンショット多めで)、ステップバイステップでまとめて見ました。
環境
今回の例では
アカウントID:9876-5432-9876のIAMアカウントから
アカウントID:1234-5678-1234のIAMロールにスイッチするケースを想定しています。
※途中の画像に表示されるアカウントIDは実際にはこの数字ではありませんので、一部マスクしています。
手順
接続先アカウント(1234-5678-1234)側での作業
接続先アカウント(1234-5678-1234)側でIAMロールを作成します。
-
IAM管理画面にアクセスし、IAMロールメニューからIAMロールの作成をクリックします。
-
IAMロールの名称を入力します
この例ではわかりやすく[cross-account]としています。
-
IAMロールのタイプを選択します。
クロスアカウントアクセスが目的ですので、[クロスアカウントアクセスのロール]-[所有しているAWSアカウント間のアクセスを提供します]を選択します。
-
接続を許可する(操作側)アカウントのIDを入力します
今回の想定事例の場合では[9876-5432-9876]を入力することになります。
-
IAMロールに許可する権限を管理ポリシーを利用して設定します。
この設定は通常のIAM同様、後から変更したりインラインポリシーを追加したりすることが可能です。
-
設定を確認します。
このときに表示される[コンソールでロールを切り換える事ができるユーザにこのリンクを知らせます。]のURLを控えておくと、この後の作業が簡単になります。
このURLは後ほどIAMロールの確認画面からもチェックできますので、コピーせずに設定を完了してしまっても問題はありません。
-
以上でIAMロールが作成されました。
IAMロールの[信頼関係]タブを確認すると[信頼されたエンティティ]として、手順4で登録したアカウントIDが確認出来ます。
操作アカウント(9876-5432-9876)側での作業
-
操作アカウントにログインします。
※rootアカウントはIAMロールのクロスアカウントアクセスをすることが出来ません。
IAMユーザでログインしてください。IAMロールの操作権限を持ったIAMユーザである必要があります。 -
接続先アカウント(1234-5678-1234)側の操作手順6で控えたURLをブラウザに入力します。
URLを入力すると、スイッチしたいアカウントIDとIAMロールがプリセットされた設定が表示されます。
-
URLを控えていない場合は画面右上のアカウントをクリックし、[ロールの切り替え]をクリックすることで同様の画面に遷移することができます。
-
[ロールの切り替え]から遷移した場合は、手動でアカウントID、ロール名を入力してください。
-
プリセットもしくは、手動入力で必要事項を入力したら[ロールの切り替え]をクリックします。
-
これで、クロスアカウントへのロール切り替えは完了です。
[現在アクティブです]と表示されているユーザとして、各種操作が可能です。
-
スイッチしたIAMロールから元のIAMユーザに戻りたい場合は[アカウント]メニューで[ユーザ名に戻る]をクリックすることで戻ることができます。
まとめ
クロスアカウントでのIAMロールスイッチを使うと、ログイン・ログアウトを行わずに、異なるAWSアカウントの操作が可能になります。
この機能を使いこなせば、複数のブラウザを使い分けたり、作業途中で別のアカウントにログインして、セッションが切れて作業がやり直しになるといった不幸を避けることが出来ます(サポートケースを書いている途中で、別アカウントの確認とかするとセッションが切れて泣けます)
アカウントの[ロール履歴]はブラウザのクッキーにより5つまで保持されますので、一度クロスアカウントでアクセスしたIAMロールは[ロール履歴]から簡単にアクセスすることができます。
5つ以内のIAMロールを使っている方は、簡単に切り替えができます。
5つ以上のIAMロールを使いたい場合、接続先アカウント(1234-5678-1234)側の手順6でチェックしたURLをブックマークしておくことで、簡単に切り替えが可能です。
クロスアカウントでのIAMロールアクセス権はアカウントIDに対しての許可されます。
操作側アカウントで、特定のIAMユーザにのみIAMロールへのスイッチを許可したい場合は
操作側アカウントのIAMポリシーで "Action": "sts:AssumeRole" の実行権限を制限するようにしてください。