Cfnを使ってスイッチロール構成を作成する!【AWS】

IAM

WSマルチアカウント運用に欠かせない「スイッチロール(スイッチアカウント)構成」を、CloudFormation(Cfn)を使って自動化する手順を紹介します。

スイッチロールとは?
→ 管理アカウント(AWS1)から別アカウント(AWS4)へIAMロールを切り替えて操作できる仕組みです。
→ マルチアカウント環境で一括管理・セキュリティ強化に便利です。

構成概要

  • AWS1(スイッチ元):普段操作するアカウント(例:管理アカウント)
  • AWS4(スイッチ先):実際に操作を行いたいアカウント(例:検証環境、請求用など)

AWS4にスイッチ用のロールを作成し、AWS1のIAMユーザーがそのロールにスイッチできるように設定します。

ステップ1:スイッチ先(AWS4)にIAMロールを作成(Cfnで)

1. CloudFormationテンプレート作成

switch-role-no-MFA.yml という名前で以下の内容を保存します。
※  の部分はAWS1のアカウントIDに置き換えてください。

AWSTemplateFormatVersion: '2010-09-09'
Description: IAM Role with AdministratorAccess for cross-account switching

Resources:
  AdminRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: switch-no-MFA-rle
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              AWS: arn:aws:iam::<your_AWS1_account>:root
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AdministratorAccess

Outputs:
  RoleArn:
    Description: ARN of the created IAM Role
    Value: !GetAtt AdminRole.Arn

2. CloudFormationからロールをデプロイ

AWSマネジメントコンソールにログインし、Cfnダッシュボードに移動
スタックの作成>新しいリソースを使用(標準) をクリック

デプロイ画面

スタックの作成 より下記のようにテンプレートファイルのアップロードで既存の先ほど保存したCfnをアップロードし「次へ」をクリック

スタック名は一意であれば大丈夫です。今回はswitch1とします。

値はすべてデフォルトのままでOKですが、今回は失敗したらリソースはすべて削除するようにしています。
「AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します。」にチェックを入れ「次へ」を選択

次の画面の「確認して作成」で必要であればタグを入力してください。
必要なければすべてデフォルトのまま「送信」をクリック

CREATE_COMPLETEと表示されるまで待機します。

3. 作成されたIAMロールのARNをコピー

IAMダッシュボードのロールから作成されていることを確認しswitch-no-MFA-rleをクリック

作成したIAMロールのARNをコピー
arn:aws:iam::AWS_account_ID:role/switch-no-MFA-rle

ステップ2:スイッチ元(AWS1)にポリシー作成

作成画面step2

次にスイッチ元アカウントでポリシーの付与を行います

AWS1のマネコンにログインしIAMのダッシュボードに移動
左側メニューのポリシーを選択し「ポリシーの作成」をクリック

ポリシーエディタでJSONを選択し下記の内容で貼り付けます。
にはさきほどコピーしたswitch-no-MFA-rleのARNを貼り付け「次へ」をクリック

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "<YOUR_ARN>"
        }
    ]
}

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

ポリシー作成画面

ステップ3:IAMユーザーにポリシーをアタッチ

作成概要step3

次に作成したポリシーをユーザーなりグループなりにアタッチします
今回はswitchを行いたいIAMユーザーに直接ポリシーをアタッチします。

IAMダッシュボードへ移動し、左側メニューのユーザーを選択
今回のスイッチを行いたいユーザー名のリンクをクリック

許可を追加 をクリック

「ポリシーを直接アタッチする」よりswitch-AWS2-polにチェックを入れ「次へ」をクリック

確認で問題なければ「許可を追加」をクリック

「1 個のポリシーが追加されました」と表示されればOKです。

確認画面

ステップ4:実際にロールをスイッチしてみる

先ほどアタッチしたユーザーでスイッチしてみます。

先ほど作成したユーザーでログインし右上のアカウントをクリック>ロールの切り替えを選択します。

ロールの切り替え画面でスイッチ先のアカウントIDとIAMロール名:switch-no-MFA-rleを入力し「ロールの切り替え」をクリック

無事ログインできました!

ログイン完了

お疲れ様でした!これで CloudFormation を使ったスイッチロールの構成が完了です。手動でポチポチ作るよりも再利用しやすく、複数環境への展開にも便利です