Blogical

AWS/Salesforceを中心に様々な情報を配信していきます(/・ω・)/

IAMでクロスアカウントスイッチロールを設定してみた

はじめまして、3月に入社しましたロジカルアーツの福島と申します。

IT業界は未経験ですが、AWSチームとして日々勉強に励んでいます。横文字が大の苦手な私にとってIT用語を覚えるのは一苦労・・・。
そこで、アウトプットも兼ねてブログを投稿させていただくことになりました!

今回はAWSアカウントにおける、「クロスアカウントスイッチロール」について紹介させて頂きたいと思います。 それでは早速本題に入ります!

きっかけ

入社当時、AWSの勉強用としてAWSアカウントを2つ作成しました。
勉強をするうえで、一つのアカウントを操作中にもう一方のアカウントを開きたい場合が何度かあり、その際、現在のアカウントからサインアウトをし、使いたいアカウントにサインインし直すという手間が煩わしく感じました。さらに元のアカウントに戻る際は、使用中のアカウントからサインアウトし、また元のアカウントにサインインします。・・・めんどくさい。
そこで調べてみたところ、このアカウント切り替えを楽にできる「クロスアカウントスイッチロール」という機能があることを知ったので、実際に設定してみました。

IAMとは

  • Identity and Access Managementの略称
  • AWSにおける各種サービスへのアクセスを管理するための認証の仕組み
  • IAMを正しく設定することで、AWSの利用者や、AWSのサービス自体がアクセスできる範囲を制御することができる
  • IAMポリシー、IAMユーザー、IAMグループ、IAMロールという機能が用意されている

IAMポリシー、IAMユーザー、IAMグループ、IAMロールについて簡単にまとめます。

IAMポリシー

「どのAWSリソースの、どのリソースに対して、どのような操作を許可するか」という「権限」 を定めます。主な設定項目は以下の通りです。

項目 内容
サービス 「どのAWSサービスに対して」を指定
リソース 「どのAWSリソースに対して」を指定
アクション 「どのような操作」を許可するかを指定
リクエスト条件 MFA必須や特定IPアドレスからの操作のみを許可するか設定

この IAMポリシーをIAMユーザー、IAMグループ、IAMロールに割り当てアクセス権限を付与します。

IAMユーザー、IAMグループ、IAMロール

アクセス権限付与の対象にIAMユーザー、IAMグループ、IAMロールがあります。

機能 説明
IAMユーザー ・人に対して与えるIAM
使用例) Aさんに「EC2構築業務」に必要な権限を与えたい時。
IAMグループ ・IAMユーザーをグループとしてまとめたもの
使用例) 同じ「開発者権限」を付与したいIAMユーザーをまとめて管理したい時。
IAMロール ・EC2などのAWSサービスや他のアカウントに対して与えるIAM
使用例) EC2からS3へのファイルアップロードや削除などの操作を行いたい時。

クロスアカウントスイッチロールは、IAMロールを使用して設定することができます。
では、クロスアカウントスイッチロールとは具体的にどのような機能なのでしょうか?

クロスアカウントスイッチロール

通常の複数アカウントの切り替え

f:id:logicalarts:20200406174243p:plain Swith Roleで複数のAWSアカウント間を切替える - Qiitaより引用

  • 手間がかかる
    各アカウントに切り替える際、その都度サインアウトしサインインし直さなければならず、手間がかかります。

クロスアカウントスイッチロールを設定すると

f:id:logicalarts:20200406174957p:plain Swith Roleで複数のAWSアカウント間を切替える - Qiitaより引用

  • 複数のアカウント間を簡単に切り替える
    クロスアカウントスイッチロールを設定することで、認証画面を介すことなく複数のアカウント間を行き来できるようになります。

  • スイッチ先の操作に制限をかける
    スイッチ先で特定のサービスやリソースの操作を制限できるようにIAMロールを設定することで、スイッチ元からのアクセスに制限をかけることも可能です。

とても便利な機能ですね。では実際に設定していきたいと思います!

実際に設定してみる

アカウントの準備

ここでは、所有する2つのアカウントをそれぞれアカウントA、アカウントBとします。  

  • アカウントA(スイッチ元)  

  • アカウントB(スイッチ先)

スイッチロールを設定するアカウントはIAMユーザーアカウントです。
設定次第ではルートアカウントでスイッチロールを設定することも可能みたいですが、推奨されていないようです。

やりたいこと

  • スイッチ元であるアカウントAから、スイッチ先であるアカウントBにスイッチ(切り替え)できるように設定したい

  • スイッチ元であるアカウントAにも簡単に戻れるようにしたい

設定手順

スイッチ先(スイッチB)の操作

事前準備

スイッチ先でIAMロールを作成する際に、スイッチ元のアカウントIDを入力しなければなりません。 スイッチ元のアカウントAにログインしてアカウントIDを確認し控えておきます。

1.マイアカウントを開く
AWS画面の上部にある、ログイン名が表示されたドロップダウンメニューから[マイアカウント]を選択します。
f:id:logicalarts:20200402112010p:plain

 2.アカウントIDを確認する f:id:logicalarts:20200402112111p:plain

スイッチ元のアカウントIDを控えることができたので、スイッチ先の操作に進みたいと思います。

スイッチ先でIAMロール作成する

まずはスイッチ先であるアカウントB側で、スイッチ元に権限を移譲するためのIAMロールを作成します。

1.アカウントBによりIAMを開き[ロールの作成]をクリックする f:id:logicalarts:20200403112219p:plain

2.信頼対象を選択する
信頼対象を[別のAWSアカウント]と選択し、スイッチ元のAWSアカウントIDを入力して[次のステップ:アクセス権限]をクリックします。 f:id:logicalarts:20200402105308p:plain オプションでMFAを設定することで、スイッチする際にMFA認証を求めることもできるようです。今回は指定せずに進めたいと思います。

3.アクセス権限ポリシーを設定する f:id:logicalarts:20200402130242p:plain ここでは管理者権限である[AdministratorAccess]をアタッチしました。

4.ロールのタグを追加する f:id:logicalarts:20200402130655p:plain 今回はタグを追加しましたが、追加しなくても問題ありません。

5.ロールの名前を入力する f:id:logicalarts:20200402131013p:plain 分かりやすいように「cross-account」という名前にします。 名前を入力し、[ロールの作成]をクリックするとロールが作成されます。

6.作成された「cross-account」ロールをクリックして開く f:id:logicalarts:20200402131502p:plain

7.内容を確認する f:id:logicalarts:20200402132605p:plain 赤枠で囲ったリンクをコピーしておくと、後にスイッチ設定をする作業が楽になります。コピーしなくてもスイッチ設定はできます。
また、[信頼関係]タブを開くと、[信頼されたエンティティ]にアカウントAのアカウントIDが設定できていることが確認できます。

スイッチ元の操作(スイッチA)

ロールの切り替えの設定をする

アカウントBで作成した「cross-account」ロールの権限をアカウントAに移譲することができたので、いよいよロールの切り替えの設定に移りたいと思います。

1.アカウントAにログインする

2.コピーしておいたリンクをブラウザに入力する
スイッチ先(アカウントB)の操作手順7でコピーしておいたリンクをブラウザに入力する。
 f:id:logicalarts:20200402153732p:plain ロールの切り替え設定ができる画面が表示されました。
このようにコピーをしておいたリンクにアクセスした場合、スイッチ先のアカウントIDと、設定したIAMロールが準備された状態で表示されます。
この場合、[ロールの切り替え]をクリックするだけで設定が完了します。

3.リンクをコピーしなかった場合
アカウントAの操作画面の上部にある、ログイン名が表示されたドロップダウンメニューから[スイッチロール]を選択します。 f:id:logicalarts:20200402155330p:plain

ロールの切り替え画面が表示されます。
f:id:logicalarts:20200402161749p:plain このようにリンクをコピーしなかった場合、スイッチ先のアカウントIDと、設定したIAMロール名は自分で入力する必要があります。
[ロールの切り替え]をクリックすると設定が完了します。

確認

スイッチ先のアカウントBに簡単にログインすることができました。
操作画面の上部にある、ログイン名が表示されたドロップダウンメニューをクリックするとアクティブ情報が表示されます。
f:id:logicalarts:20200402162924p:plain 赤枠内に、スイッチ元のアカウント名とアカウントIDが表示されていることが確認できます。

スイッチ元(アカウントA)に戻る場合

ドロップダウンメニューから[〇〇〇〇(アカウント名)に戻る]をクリックします。
f:id:logicalarts:20200402163521p:plain

簡単にスイッチ元(アカウントA)に戻ることができました。
f:id:logicalarts:20200402164012p:plain

まとめ

実際にクロスアカウントスイッチロールを設定してみて、異なるアカウント間の行き来が見違えるほど楽になり、本当に感動しました。
一度切り替えをしてアクセスしたアカウントは[ロール履歴]に表示されるようになり、対象の履歴をクリックするだけで簡単にアクセスできます。

「クロスアカウント」や「スイッチロール」など、名前だけ聞くと難しそうに感じていましたが、実際に操作してみると簡単に設定することができました。
もし複数アカウントを所持しており、スイッチロールの設定をされていない方がいらっしゃいましたらぜひ試してみていただきたいです!

この記事がどなたかのお役に立てればうれしいです。

参考サイト

IAMでクロスアカウントスイッチロール設定メモ - Qiita

Swith Roleで複数のAWSアカウント間を切替える - Qiita

IAMロールによるクロスアカウントアクセス – サーバーワークスエンジニアブログ

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_use_switch-role-console.html

【図解/AWS】IAM入門~ロールとグループとポリシーの違い,設計・設定手順について~│SEの道標