AWSアカウントを複数所持している場合、IAMのスイッチロールを使えばログインしなおさなくても別アカウントのAWSリソースを操作可能です。これを実現するには事前に信頼関係の設定が必要なのでその手順を記します。
- スイッチ元環境:スイッチロールを許可するポリシー作成&ユーザにアタッチ
- スイッチ先環境:IAMロール作成&信頼関係設定
当ブログにはPRを含みます。
アカウントの構成
1つの踏み台環境から本番環境や開発環境へスイッチロールするケースを想定します。ここではスイッチ元が踏み台環境、スイッチされる側を開発環境・本番環境とイメージしてください。
設定手順
ここからはAWSマネジメントコンソールでの設定手順を記載します。
踏み台環境でスイッチロールを許可するIAMポリシーを作成する
マネジメントコンソールでIAM→ポリシーを選択してポリシーを作成を選択します。ポリシー作成画面でJSONを選択して以下のJSONを貼り付けてください。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "*"
}
}
上記のポリシーはすべてのリソース(ロール)へのAssumeRole(スイッチロール)を許可するという内容です。
あとはタグとポリシー名を自由に設定してポリシーを作成します。
踏み台環境でのIAMユーザ作成
マネジメントコンソールでIAM→ユーザを選択してユーザを作成します。ユーザ名を入力してコンソールアクセスを有効化にチェックを入れます。
許可を設定の画面で踏み台環境への必要な権限と踏み台環境でスイッチロールを許可するIAMポリシーを作成するで作成したポリシーをアタッチします。今回筆者はallow_switch_roleで作成しており、合わせてAWSマネージドポリシーであるViewOnlyAccess(閲覧専用ポリシー)をアタッチしておきます。
マネージドポリシーとはAWSが管理してくれるポリシーです。公式ドキュメントにユースケースと権限についての説明が記載されています。
今回は簡略化のためにポリシーを直接アタッチするを選択しています。今後同じ権限のIAMユーザを複数作ることを想定される場合はユーザをグループに追加を選択すると便利です。
その際はまずIAMグループを作成してIAMグループに対してポリシーをアタッチします。そのあとでユーザをIAMグループに追加します。
あとは次へを選択してユーザーを作成します。ログインするために発行されたパスワードはCSVをダウンロードして忘れないようにします。
スイッチ先環境にIAMロールを作成する
スイッチ先環境にログインします。この環境ではIAMロールを作成します。
IAM→ロール でロールを作成を選択します。
スイッチ先環境のIAMロールに信頼関係の設定をする
踏み台環境からスイッチできるよう信頼関係を設定します。以下を入力します。
- 信頼されたエンティティタイプ:AWSアカウント
- AWSアカウント:別のAWSアカウント
- アカウントID:踏み台環境のAWSアカウントIDを入力
選択出来たら次へを押下します。
スイッチ先環境のIAMロールに必要権限を割り当てる
踏み台環境からスイッチしてきたユーザに対して与えたい権限を選択します。自前でポリシーを作成してもよいですし、AWSマネージドポリシーを使用するのも可です。筆者はここではAdministratorAccessを選択しています。
必要な権限を選択したら次へを選択します。あとはロール名を入力して作成します。ロール名はスイッチロールの際に使用するので記録しておきます。(筆者はAdminという名前でロールを作成しました。)
スイッチロールの実施方法
前章の設定を行った後、実際にスイッチロールしてみます。マネジメントコンソールとCLIの両方で手順を確認します。
AWSマネジメントコンソール編
踏み台環境でのIAMユーザ作成で作成したユーザで踏み台環境へログインします。画面右上のユーザ名の▼を押下してロールの切り替えを選択します。
ロールの切り替えを選択すると以下のような画面になります。必要事項を入力してロールの切り替えを選択します。
- アカウント:スイッチ先環境環境のアカウント番号
- ロール:スイッチ先環境にIAMロールを作成するで作成したロール名
これでスイッチロールできました。
CLI編
踏み台環境のユーザでアクセスキーを発行してAWSCLIでアクセスします。
AWSCLIのログインではaws configureコマンドを実行してアクセスキーとシークレットアクセスキーを設定します。
現在自分がどのユーザでアクセスしているかは以下のコマンドでわかります。
aws sts get-caller-identity
実行すると以下のようにどこの環境に何のユーザでアクセスしているか確認できます。
{
"UserId": "AIDAXXXXXXXXXXXXXXXXX",
"Account": "000000000012",
"Arn": "arn:aws:iam::0000000012:user/user01"
}
続いて~/.aws/configファイルを編集します。
編集にあたってはLinuxであればviエディタ、Windowsであればメモ帳やSAKURAエディタを使用します。~/.aws/configの格納場所は各個人の設定方法により異なりますが、Windows環境の筆者の場合C:\Users\ユーザー名の直下にありました。隠しファイルになっているので隠しファイルの表示をONにするかエクスプローラの絶対パスで指定してみてください。
以下のように修正します。おそらく[default]のセクションは既にあるので[profile Admin]のセクションを追加します。(Adminは分かりやすいよう自由に変更してください。)
role_arnはスイッチ先のロールのARNです。(開発環境・本番環境)
[default]
region = ap-northeast-1
output = json
[profile Admin]
role_arn = arn:aws:iam::123456789012:role/Admin
source_profile = default
下準備はこれで完了です。いつものCLIコマンドに–profile Adminを追加して実行すればスイッチ先でCLIコマンドを実行することができます。
aws sts get-caller-identity --profile Admin
実行結果は以下。アカウント番号がスイッチ先になっており、スイッチロールできていることが確認できます。
{
"UserId": "AROA4FNA76HKYWPAPKFTJ:botocore-session-1675698350",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/Admin/botocore-session-1675698350"
}
まとめ(感想)
本番環境・開発環境・ステージング環境など、AWSアカウントを沢山管理する必要がある場面があります。スイッチロールの設定をしていない場合は環境を切り替える際にログアウト→ログインを繰り返す必要があるのですが、スイッチロールの設定をしておくとその手間がなくなるので非常に便利です!
AWS初学者の方は以下の動画でAWSの基礎を学ぶのがおすすめです。資格取得の前の前提知識として重宝する内容が凝縮されています。インフラやAWSが全くの未経験でもAWSの基礎が学べる講座となっています!
AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得- 価格: 定価 ¥11,800、セール時参考価格 \2,000
- レビュースコア: 4.4/5 (13,734件)
- 対象者: AWS初心者、インフラに詳しくない方、ネットワーク・サーバーを構築したいエンジニア
-
特徴:
- AWSの基本サービスを実践的に学習
- 手を動かしながらサーバー・ネットワークを構築
- インフラの基礎概念を丁寧に解説
-
良いレビュー:
- 講師の説明が丁寧で初心者でも非常に分かりやすく、AWSをゼロから学べる。
- ハンズオン形式で、実際に手を動かしながら学べる点が素晴らしい。
- AWSのインフラ構築が理解でき、全体像が把握できるようになった。講師の質問への回答も早かった。
-
悪いレビュー:
- 講座の進行が少し遅いと感じた。
- 一部AWSのコンソールが変更になっているところがあり、自分で調べながら進める必要があった。
- 一部情報が古いことがあり、過去のQAを確認するのに手間取った。
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当