BeeX Tech blog

BeeXではクラウドネイティブアプリ開発、企業の基幹クラウド基盤構築、システム移行、運用保守を行っています。

【初心者向け】手を動かして理解するIAMスイッチロール


BeeXの榊原です。今回社内で急遽スイッチロールの説明をすることになったのですが、せっかくなので記事化して今後も使いまわせる形でアウトプットすることにしました。初学者向けに一部砕けた表現をしておりますので、あらかじめご了承ください。

登場リソース

デモ用のスイッチロール元・先のアカウントの構成図を用意したので早速ご覧ください。

今回の構成において、スイッチロールに必要な要素は以下4つです。

➀スイッチロールするAWSリソース:今回はIAMユーザーです

➁AWSリソースにアタッチするIAMポリシー:今回はスイッチロール先のIAMロールのARNを記載して、このIAMロールへのスイッチロールを許可します。

➂スイッチロールを引き受けるIAMロール(クロスアカウントロール):そのままの意味です。IAMロールの信頼ポリシーにはスイッチロールするリソースの情報を記載します。今回であればIAMユーザーのARNを記述します。

➃IAMロールにアタッチするIAMポリシー:スイッチロールしてどのような操作ができるようになるか記載されています。場合によっては複数のIAMポリシーがアタッチされます。

※今回は実際に使われるケースを想定してアカウントを跨がせていますが、➀~➃のリソースを1つのアカウント内に全て作れば、同じアカウント内でスイッチロールすることも可能です。

実際に手を動かそう

ではここからは自身の環境で再現してみましょう。

今回の構成

どこで何をしているかわからなくなったらこの構成図に戻って確認しましょう。


スイッチ元アカウントの操作(IAMユーザー作成)

まずスイッチ元のIAMユーザー(➀)を作成します。スイッチ元のIAMコンソールからIAMユーザーを作成します。

ユーザー名は自由ですが今回はSwitchRoleUserとしています。「AWSマネジメントコンソールへのユーザーアクセスを提供する」にはチェックを入れてください。

アタッチするポリシーは後ほどIAMポリシー(➁)をアタッチするのでIAMFullAccessをアタッチします。今回は後ほど手軽に動かすためにアタッチしていますが、実運用ではもちろん最小権限にすべきです。

Nameタグにも同じくSwitchRoleUserを付けます。

これでIAMユーザーの作成が完了です。後ほど作成したユーザーでAWSコンソールにログインするため、表示される認証情報は手元にメモしておきましょう。

作成したIAMユーザーのARNをメモします。


スイッチ先アカウントの操作(IAMロール作成)

次はスイッチ用のIAMロール(➂)を用意します。IAMロールにつけるIAMポリシー(➃)は今回AmazonEC2ReadOnlyAccessを用いるので新規作成は不要です。

IAMロールの作成画面に移り、信頼されたエンティティタイプはカスタム信頼ポリシーを選択し、下記のJSONファイルを入力してください。"AWS": の後ろは上でメモしたIAMユーザーのARNに書き換えてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
              "AWS": "IAMユーザーのARN"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

次の画面ではAmazonEC2ReadOnlyAccessを選択します。

ロール名とNameタグにSwitchRole(任意の値で可)と入力します。


これでスイッチロール用のIAMロール(➂)が完成です。ARNをメモしましょう。

加えてスイッチ先アカウントのIDも控えましょう。(上でメモしたARNに含まれる12桁のIDです)





スイッチ元アカウントの操作(IAMポリシー作成&スイッチ)

最後にIAMユーザーに与えるIAMポリシー(➁)を作成します。スイッチ元のアカウントのAWSコンソールには、最初に作成したSwitchRoleUserでサインインしてください

IAMポリシー作成画面に行き、下記のJSONを入力してください。"Resource": の後ろは直前でメモしたIAMロールのARNに書き換えてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "IAMロールのARN"
        }
    ]
}

任意の値をポリシー名とNameタグに入力します。

最初に作ったIAMユーザーの画面へ行き、今作成したIAMポリシーをアタッチします。


これですべての準備が完了しましたので実際にスイッチロールしてみましょう。右上の現在ログインしている情報をクリックし、「ロールの切り替え」を選択します。


スイッチロール先のアカウントIDとスイッチロール用IAMロール名を入力します。


するとスイッチ先のアカウントに切り替わります。右上をクリックしてユーザー情報を確認しましょう。

スイッチロール用IAMロールに付与しているのは今回AmazonEC2ReadOnlyAccessなので、EC2の情報を見ることはできますが、リソースの操作はできなくなっています。実際に機能しているか確認しましょう。EC2のコンソールを開きます。情報は問題なく見れています。

ためしに1つ停止中のインスタンスを起動してみますが、もちろん権限が足りないので拒否されます。想定通りの動きができています。

手を動かすパートは以上です。

最後に

今回は初心に帰って、IAMスイッチロールの記事を執筆しました。一度全体像を把握して、手を動かせばかなり理解が深まるのではないでしょうか。この記事がどなたか(特に初学者の方)のお役に立てば幸いです。ここまでお読みいただきありがとうございました。