【AWS】Switch Roleを使用してアカウントを切り替えてみた

お久しぶりです。江島です。
本日は、AWSのSwitch Roleを使用して、複数のアカウントを1つのアカウントから行き来する方法をハンズオンをして自分の記録として残したいと思います。

Switch Roleの構成図

Switch Roleを使用するメリット

  • 複数のアカウントの切り替えが楽になる
  • アカウントを複数使用する場合にログイン認証が1度で済む(MFA等)
  • スイッチ元以外の各アカウントでは複数ユーザーを作る必要がない

実装ハンズオン

事前準備

  1. AWSアカウントを2つ用意する
  2. アカウントのIDをメモ等で控える

今回は、アカウントAとアカウントBを用意して、アカウントAをスイッチ元、アカウントBをスイッチ先として用意した。

スイッチ先でIAM Roleを作成

マネジメントコンソールでアカウントBにログインする
コンソール画面からIAMのページへ移動
サイドメニューからロールを選択

「ロールの作成」をクリック

下図に従って項目の入力が完了したら「次へ」をクリック

項目
信頼されたエンティティタイプ AWSアカウント
AWSアカウント 別のAWSアカウント
アカウントID アカウントAのID
オプション MFAが必要

許可ポリシーを追加し、「次へ」をクリック。
今回はAdministratorAccessを選択

任意のロール名を入力し、確認が取れたら「ロールを作成」をクリック

ここで作成したロール名を、先ほどのIDと一緒に控えておいてください

スイッチ元でポリシーの作成

マネジメントコンソールでアカウントAにログインをします。
IAMの画面のサイドメニューからポリシーを選択

「ポリシーを作成」をクリック

ポリシーの作成画面でJSONを選択
入力例:

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::[スイッチ先のアカウントID]:role/[ロール名]"
    }
}

ポリシーがあっていることを確認し、「次へ」をクリック

任意のポリシー名を入力して「ポリシーの作成」をクリック

作成したポリシーを任意のIAMユーザーにアタッチ

マネジメントコンソールのIAMの画面でサイドメニューからユーザーを選択

任意のユーザーネームを選択し、「許可の追加」をクリック

許可を追加画面で、「ポリシーを直接アタッチする」を選択し、許可ポリシーに先ほど作成したポリシーを選択
「次へ」をクリック

内容を確認して、「許可を追加」をクリック

以上でアカウントの切り替え準備が整いました。
早速確認をしてみます。
マネジメントコンソールの右上のアカウント名をクリックします。
「ロールの切り替え」をクリック

下記の通りに項目を入力

項目
アカウント スイッチ先のアカウントID
ロール 作成したロール名
表示名 任意のアカウント名
任意の色

画面が切り替わり、指定した色で指定した表示名が表示されて入れば、アカウントの切り替えの成功です。

「スイッチバック」をクリックすることで、スイッチ元のアカウントへ戻ることができます。

登録できるアカウント数の拡張機能について

実は、登録できるアカウントの数にはデフォルトだと制限があり、5つのアカウントしか登録ができません。

これを解決できるのが、

AWS Extend Switch Roles

となります。

AWS Extend Switch Rolesの各ブラウザでのインストール方法

無料で利用できる拡張機能で、簡単な設定をすれば、(おそらく)無限に切り替えできるアカウントを増やすことができます。

各ブラウザでインストールができると、ブラウザの右上の方に鍵のような形のマークのアイコンをクリックして確認することができます。

ここでAWS Extend Switch Rolesをクリックするとオプションの選択画面が表示されるので、Configurationをクリックしてください。

そうすると、下画像の画面に入りますので、右側の例にのっとって、左側にスイッチ先アカウントの追加をしていきます。

入力が完了しましたら、下の「SAVE」を押していただくと設定の完了です。

もう一度ブラウザ右上の鍵マークをクリックしていただくと、設定したアカウントが表示されていますので、スイッチ元アカウントでクリックして、アカウントの切り替えができましたら成功です

Cloud Formationを利用した各アカウントでのRole作成方法

最後にIAMロールの作成がより楽になる方法のご紹介です
アカウントが増えるたびに各アカウントでマネジメントコンソールからIAMロールを作成するのは手間になります
そういった手間を少しでも削減してくれるのがAWS CloudFormation(以下CFn)です

CFnは、テンプレートのコードファイル(YAML or JSON)を用意しておくことで、ファイルをアップロードするだけで、AWSが自動的にリソースを作成してくれるというサービスです

以下、ロールの作成コード(YAML)です

AWSTemplateFormatVersion: "2010-09-09"
Description: "Template for Creating IAM Role to Switch"

Parameters: 
  TrustedAWSAccountId: 
    AllowedPattern: "^[0-9]*$"
    Type: "String"
    Default: ""
    Description: "Trusted AWS Account ID"

  IAMUserName: 
    AllowedPattern: "^[a-zA-Z0-9._-]*$"
    Type: "String"
    Default: "xxx.xxx"
    Description: "IAM Role Name"

Resources: 
  IAMRole: 
    Type: "AWS::IAM::Role"
    Properties: 
      RoleName: !Sub SwitchRole-${IAMUserName}
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement: 
        - Effect: "Allow"
          Principal:
            AWS:
            - !Sub "arn:aws:iam::${TrustedAWSAccountId}:user/${IAMUserName}"
          Action:
          - "sts:AssumeRole"
          Condition: 
            Bool: 
              aws:MultiFactorAuthPresent: "true"
      ManagedPolicyArns: 
      - "arn:aws:iam::aws:policy/AdministratorAccess"
      Path: "/"
Outputs: 
  IAMRoleArn: 
    Value: 
      Fn::GetAtt: 
      - "IAMRole"
      - "Arn"
  LinkForSwitchRole:
    Value: !Sub "https://signin.aws.amazon.com/switchrole?roleName=SwitchRole-${IAMUserName}&account=${TrustedAWSAccountId}"

実装手順

今回も、アカウントAとアカウントBを例に作成していきます

アカウントBのマネジメントコンソールから、CFnのページへ

スタックを作成をクリック

上の画像に沿って項目を選択し、「ファイルを選択で」先ほどのコードを保存したファイルをアップロードします

スタックの名前に任意の名前を入力して、
パラメータを下図に従って入力

項目
IAMUserName アカウントAのユーザー名
TrustedAWSAccountID アカウントAのID

少し補足です
パラメータとは、コード内の

Parameters: 
  TrustedAWSAccountId: 
    AllowedPattern: "^[0-9]*$"
    Type: "String"
    Default: ""
    Description: "Trusted AWS Account ID"

  IAMUserName: 
    AllowedPattern: "^[a-zA-Z0-9._-]*$"
    Type: "String"
    Default: "xxx.xxx"
    Description: "IAM Role Name"

この部分になります

これは、リソースを作成する際に、毎回変更が必要になる部分を、任意の内容に設定するためのものになります

今回であれば

  1. 作成するロール名 (IAMUserName)
  2. プリンシパルの対象アカウントID(TrustedAWSAccountID)

になります

AWS:
- !Sub "arn:aws:iam::${TrustedAWSAccountId}:user/${IAMUserName}"

以上のようにパラメータを用意することで、任意の値を引数(${}のカッコ内に設定した内容を代入できる)としてコード内に組み込むことができるため、

同じコードを使用して、別の名前や認証でリソースを作成することができます

パラメータまで入力できたら、あとはデフォルトで大丈夫ですので、スタックを作成しましょう

確認として、マネジメントコンソールからIAMのページで作成したロールを検索し、

無事作成できていればOKです

※注意点

CFnは、スタックを削除すると、作成したリソースも全て削除しますのでご注意ください

メリットとしては、たくさんのリソースを作成した際に、削除手順書や、リソースの確認をしなくても、跡形もなく消去してくれるところです

本来は、今回のようにIAMRoleだけではなく、様々なリソースを作成することができますので、ご興味がある方はぜひCloudformationを学習してみてください

おわりに

今回はSwitch Roleについて学びましたが、AWSにおいてタスクが複雑になるにつれてアカウントの移動が増えたり、MFA認証が増えて探すのが困難になったりということが増えてくるかと思います。そういった際に、この記事が少しでもお役に立てると幸いです
それではまたどこかで

Last modified: 2023-06-13

Author