個人AWS環境をマルチアカウント化して、IAMロールスイッチを試してみた

個人AWS環境をマルチアカウント化して、IAMロールスイッチを試してみた

2026.01.29

やりたいこと

個人用のAWS環境に、IAMロールスイッチを使ったマルチアカウント構成を導入してみます。

現在、1つのアカウントに複数のIAMユーザー(admin, devなど)を作成して管理していますが、この方法だとアクセスキーやMFAの管理が煩雑になり、セキュリティ面でも管理するのが大変です。そこで、そこで、AWS Organizations を使ってアカウントを分割し、IAMロールスイッチで管理する方法に移行してみようという試みです。

AWS Organizations とは

シンプルにいうと複数アカウントの管理をまとめて行えるオペレーション室のようなものです。
今回は使用していませんが、他にも組織単位(OU)を使って、「開発部門」 「経理部門」 といった単位でアカウントをグループ化し、整理したりもできます。

https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_introduction.html

IAM ロールスイッチ とは

新規にユーザーを作成することなく、ロール(役割/権限)を切り替えられる機能です。
一度自身のユーザーでサインインした後は、追加のサインインは必要なく、異なる役割を持ったロールに切り替えることができます。
例えば、冒険者が一度フィールドに入場したら、その後は帽子を被り替える(ロールスイッチ)だけで、魔法使い、双剣使い、バーサーカーなど役割をガラリと変えられるイメージです。

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

移行前の状態

1つのAWSアカウントに、admin_user、dev_user など3つのIAMユーザーを作成し、アクセスキーとMFAデバイスを個別に管理していました。

iam-user-list

やってみる

今回作成する構成は以下の通りです。

AWS Organizations
├── 管理アカウント (Management Account)
│   └── IAMユーザー
├── サンドボックスアカウント (Sandbox Account)
│   └── サンドボックス用IAMロール
├── 開発アカウント (Development Account)
│   └── 開発用IAMロール
└── 本番アカウント (Production Account)
    └── 本番用IAMロール

ステップ1: AWS Organizations のセットアップ

既存のアカウントを管理アカウントとして、AWSコンソールから AWS Organizations を有効化します。

ステップ2: 環境別アカウントの作成

AWS Organizations コンソールからメンバーアカウントを作成します。

  1. AWS OrganizationsAWSアカウントAWSアカウントを追加

step1

  1. AWSアカウントを作成 を選択
  2. 以下を入力:
    • アカウント名: Sandbox / Dev / Prod など用途が分かる名前
    • メールアドレス: yourname+sandbox@gmail.com / yourname+dev@gmail.com / yourname+prod@gmail.com
    • IAMロール名: デフォルトのまま(OrganizationAccountAccessRole

step2

メールアドレスは+エイリアスを使うことで、同じメールボックスで複数アカウントを管理できます。

ロールについては、アカウント作成時に OrganizationAccountAccessRole が自動的に作成され、管理アカウントからのアクセスが許可されます。

入力が完了したら、「AWSアカウントを作成」 を押します

result

無事作成できました!
次は、実際にスイッチロールができるか確認していきます。

コンソール画面でのスイッチロール

右上のメニューから、「ロールの切り替え」を選択
※ ロールの履歴に表示されている場合は、そこから選択も可能です。
console-switch-role-1

下記のように画面が切り替わったら、切り替えたいアカウントの 「12桁ID」 と 「ロール名」 を入力します。
今回はデフォルトの OrganizationAccountAccessRole を設定しているので、そのまま入力します。
console-switch-role-2

切り替わると、右上のアカウント名が変わります。
これで切り替え完了です!
console-switch-role-3

💡 Tips: 表示名と色を設定
ロール切り替えの際に、表示名と表示色を指定するとみやすくなります!

role-switch-display-option

指定ができると、右上のアカウントメニューの表示が見やすくなっていると思います。

display-01
display-02

AWS CLI の設定

続いて、AWS CLI でも切り替えられるようにしていきます。
まずは、~/.aws/credentials に管理アカウントのアクセスキーを設定します。

[management]
aws_access_key_id = ${AWS_ACCESS_KEY_ID}
aws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}

続いて、~/.aws/config に各環境のプロファイルを設定します。

[profile management]
region = ap-northeast-1
output = json

[profile sandbox]
role_arn = arn:aws:iam::SANDBOX_ACCOUNT_ID:role/OrganizationAccountAccessRole
source_profile = management
region = ap-northeast-1

[profile dev]
role_arn = arn:aws:iam::DEV_ACCOUNT_ID:role/OrganizationAccountAccessRole
source_profile = management
region = ap-northeast-1

[profile prod]
role_arn = arn:aws:iam::PROD_ACCOUNT_ID:role/OrganizationAccountAccessRole
source_profile = management
region = ap-northeast-1

source_profile = management により、credentials ファイルの [management] の認証情報を使ってロールを引き受けます。

使用する際は、コマンド実行時に --profile オプションで環境を指定します。

# サンドボックス環境として作業(ハンズオン・実験)
aws s3 ls --profile sandbox

# 開発環境として作業
aws s3 ls --profile dev

# 本番環境として作業
aws s3 ls --profile prod

まとめ

初期設定に少し手間はかかりますが、複数の認証情報を管理する必要がなくなり、運用がとても楽になりました。

個人的には、環境を分離したことで同じ名前のリソースを各環境に配置できるようになったのも嬉しいポイントです。
Lambda やDynamoDB などのリソースに-dev-prod といった 環境識別子(サフィックス) をつける必要がなくなり、リソース名がシンプルになります。

個人でAWSを使っている方で、複数のIAMユーザーを管理している場合は、ぜひ試してみてください!

参考資料

この記事をシェアする

FacebookHatena blogX

関連記事