スイッチロール構築ハンズオン

はじめに

既に運用されているプロジェクトでスイッチロールについての構築をしたので、構築内容を後学のために記載する。
同環境でスイッチロールの判例は多いので、異なる環境にまたがったスイッチロールの構成を検証する。
ユーザにアタッチするのも実運用ではあまり無いかと思うので、グループにスイッチロールポリシーをアタッチする。

構成図

1.AWS環境にユーザがログインする。
2.IAMユーザ毎に所属しているグループにアタッチされているスイッチロールポリシーに基づき、各環境のIAMロールにスイッチロールできる。

※本検証環境では本番環境にIAMユーザを構築し、スイッチロールで本番環境に移行する形式を取る。
  実際にはユーザは管理環境に構築し、管理環境より各環境にスイッチロールを行う。

構築

0.前提条件

IAMユーザが作成されていること

1.【本番環境】スイッチロールのポリシー作成

1.1.CloudShell開始

AWSドキュメントAWS CloudShell の開始方法に従い、CloudShellを開始

1.2.スイッチロールポリシーの作成

1.2.1.JSONファイルを作成

CloudShell上で、ポリシー内容をJSONで作成して保存する

$ vi switchrole-policy.json

JSONの保存内容

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AssumeWorkRole",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::{【本番】AWSアカウント12桁番号}:role/{Role名:Work}"
    },
    {
      "Sid": "AssumeAdminRole",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::{【STG】AWSアカウント12桁番号}:role/{Role名:Admin}"
    }
  ]
}

1.2.2.CLIの実行

CloudShellで、作成したJSONファイルを指定してIAMポリシーを作成するコマンド実行

$ aws iam create-policy --policy-name {スイッチロールポリシー名} --policy-document file://switchrole-policy.json

2.【本番環境】IAMグループ作成

2.1.CloudShellよりIAMグループを作成

1.の作業に従いこちらも、CloudShellを利用して作業を実施
AWSドキュメントIAM ユーザーとグループを作成するに従い、下記コマンドよりIAMグループを作成

$ aws iam create-group --group-name {作成するグループ名}

2.2.IAMユーザをグループに追加

2.1.で作成したグループに既に作成されているIAMユーザを追加する
$ aws iam add-user-to-group --user-name {グループに追加するユーザ名} --group-name {作成するグループ名}

2.3.IAMグループにスイッチロールのポリシーをアタッチ

手順1で作成したスイッチロールのポリシーを手順2で作成したIAMグループにアタッチする
$ aws iam attach-group-policy --group-name {作成するグループ名} --policy-arn {"arn:aws:iam::{【本番】AWSアカウント12桁番号}:policy/{スイッチロールポリシー名}"}

3.【本番環境】閲覧権限しか持たない Work ロールを作成

スイッチロールする先となるIAMロール(Workロール)を【本番環境】に作成する。
Workロールに紐づくポリシーは、管理ポリシーの「ReadOnlyAccess」を利用する。

3.1.Workロールの作成

3.1.1.信頼ポリシーの作成

CloudShell上で、ポリシー内容をJSONで作成して保存する

$ vi trust-policy.json

JSONの保存内容

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{【本番】AWSアカウント12桁番号}:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3.1.2.Workロールの作成

下記コマンドより Workロールを作成
$ aws iam create-role --role-name Work --assume-role-policy-document file://trust-policy.json

3.2.Workロールにポリシーのアタッチ

下記コマンドより WorkロールにReadOnlyAccessポリシー(管理ポリシー)をアタッチ

$ aws iam attach-role-policy --role-name Work --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess

4.【STG環境】Administrator権限を持つロールを作成

スイッチロールする先となるIAMロール(Adminロール)を【STG環境】に作成する。
Adminロールに紐づくポリシーは、管理ポリシーの「AdministratorAccess」を利用する。

4.1.Adminロールの作成

4.1.1.信頼ポリシーの作成

CloudShell上で、ポリシー内容をJSONで作成して保存する
※【本番環境】からのスイッチロールに対しての信頼ポリシーのため、許可するアカウントは 【本番】AWSアカウント12桁番号

$ vi trust-policy.json

JSONの保存内容

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{【本番】AWSアカウント12桁番号}:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

4.1.2.Adminロールの作成

下記コマンドより Workロールを作成
$ aws iam create-role --role-name Admin --assume-role-policy-document file://trust-policy.json

4.2.Adminロールにポリシーのアタッチ

下記コマンドより WorkロールにAdministratorAccessポリシー(管理ポリシー)をアタッチ

$ aws iam attach-role-policy --role-name Admin --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

挙動の確認

1.スイッチロール画面へ遷移

赤枠部分を選択して、スイッチロールの画面へ遷移する

2.1.【本番環境】で Workロール にスイッチロールの場合

赤枠部分に【本番環境】のアカウント番号 と ロール名:Work を入力して スイッチロールする

2.2.【本番環境】でスイッチロールが確認できる

赤枠部分より スイッチロールができていることを確認できる

3.1.【STG環境】で Adminロール にスイッチロールの場合

赤枠部分に【STG環境】のアカウント番号 と ロール名:Admi を入力して スイッチロールする

3.2.【STG環境】でスイッチロールが確認できる

赤枠部分より スイッチロールができていることを確認できる

さいごに

グループにアタッチしているスイッチロールを制御するポリシーと、スイッチロール先のIAMロール(+IAMポリシー)の理解が整理されていないと、人に説明する際に理解されにくい部分のため、こちらのブログを通して整理できてよかったです。

Last modified: 2023-09-03

Author