IAMのスイッチロールとは? AWSアカウント間の切り替えを楽にする設定方法

AWSでは AWS Organizations等を利用して組織、環境毎にAWSアカウントを分けて管理するマルチアカウント構成が推奨されています。これによりセキュリティやガバナンス、請求を分離することができるため、管理の観点から様々なメリットを享受可能です。
一方、AWSアカウントが複数発行されることにより、マネジメントコンソールのログインやアカウントの切り替えが煩雑になり、IAMユーザの管理やCredentialsの管理も複雑になりがちです。これを解決するソリューションとしてIDaaS(Identity as a Service)であるAuth0やOneLogin等の外部サービス利用も検討されますが、AWSにはスイッチロールという仕組みが存在しますので、その簡単な概念と導入手順についてご紹介します。

スイッチロールとは

スイッチロールを利用することで、以下のことが実現できます。

  • マネジメントコンソールへログインした状態を維持したまま複数のAWSアカウントへスイッチすることが可能
  • スイッチ後の権限は、スイッチ先のIAMロールへあらかじめ設定したポリシーが適応される
  • 各AWSアカウント上のCloudTrailにはスイッチ元のアカウント情報が監査ログとして記録される

簡単な概念図を以下へ掲載します。

スイッチロールで実現できること

スイッチ先のIAMロールを予め役割毎(開発者、管理者など)に作成しておき、スイッチ元で適切なIAMロールをアサインします。IAMユーザをスイッチ元で一元管理することで社員の入社/退職対応なども楽になります。

スイッチロールの設定手順

前提

利用するAWSサービス

  • IAM (Identity Access Management)

注意

  • 本手順ではAWS管理者向けの権限設定を行なっています。開発者向けなどにスイッチロール権限をアサインする際には、適切なポリシーを作成しスイッチ元のIAMユーザへアサインする必要があります
  • 本手順ではマネジメントコンソールでのスイッチロールを行うことを目的としているため「外部ID」を利用していません

その他

普段Chromeブラウザを利用している場合には、拡張機能へ [AWS Extend Swith Roles] を入れておくと便利です

ロールの作成(スイッチ先での作業)

最初に、スイッチ先のAWSアカウント上でスイッチ後に許可する(アサインする)権限を設定していきます。

1. **スイッチ元** のAWSアカウントIDをメモしておく(数字12桁)

2. IAMロール作成権限を持ったアカウントで **スイッチ先** のマネジメントコンソールへログイン

3. IAMサービスのロールを開き、「ロールを作成」ボタンを押下

4. 「信頼されたエンティティの種類を選択」で「別のAWSアカウント」を選択し、手順(1)でメモしたアカウントIDを入力して次のステップへ

5. 本手順では管理者向けの設定を想定しているので「AdministratorAccess」をアタッチ
※スイッチ後の権限を厳密に制御したい場合はここでアタッチするポリシーに適切なものを選択します。

6. タグ情報を入力して次のステップへ

7. ロール名と説明を入力しロール作成完了

8. 手順(7)で作成したロールの「ARN」の値をメモしておく

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

次に、スイッチ元のAWSアカウント上で「特定アカウント間でのスイッチ」を許可します。

9. **スイッチ元** のマネジメントコンソールへログイン

10. IAMサービスのポリシーを開き「ポリシーの作成」ボタンを押下

11. JSON タブを選択
Resource 部へ手順(8)でメモした ARN を記載した以下のようなポリシーを入力し、次のステップへ

{
       "Version": "2012-10-17",
       "Statement": {
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Resource": "arn:aws:iam::{AWSアカウントID 12桁数字}:role/{Role名}"
       }
 }

12. タグ情報を入力して次のステップへ

13. ポリシー名と説明を入力しポリシー作成完了

14. スイッチさせたい IAM ユーザへ作成したポリシーをアタッチ

以上で AWS上での作業は全て終了です。

AWS Extend Switch Roles の設定

AWSマネジメントコンソールの「ロールの切り替え」からスイッチロールすることも可能ですが、5アカウント以上登録すると最初に登録したものから設定が消えていってしまうため、AWS Extend Switch Roles を設定しておきます。

1.  AWS Extend Switch Roles の configuration へ以下を設定

    [プロファイル名]
    role_arn = 手順(8)でメモしたARN
    region = デフォルトのリージョン
    color = お好きな色を

    入力例

    [myaccount-dev]
    role_arn = arn:aws:iam::{AWSアカウントID 12桁数字}:role/{Role名}
    region = ap-northeast-1
    color = 95ea9f

2.  スイッチ元のマネジメントコンソールへログインした状態から、AWS Extend Switch Roles でアカウントをスイッチ出来たら成功

番外編(AWS CLI への設定)

Switch Role 環境下にて各AWSアカウント上のAWS APIを叩くためには、Assume Roleを利用して一時的なCredential(STS)を取得する必要があります。AWS CLIを利用している場合、以下のような設定を入れておく必要があります。

$ cd ~/.aws
$ vim config

-------------------
[default]
region = ap-northeast-1
output = json

[profile myaccount-dev]
role_arn = arn:aws:iam::{AWSアカウントID 12桁数字}:role/{Role名}
source_profile = default
region = ap-northeast-1
output = json

--snip

-------------------

上記設定は、defaultへ設定されているスイッチ元のCredentialを参照してAssume Roleにより一時的な権限を取得することを意味しています。AWS APIを叩く際は以下のように「–profile」でプロファイル名を指定します。

$ aws --profile myaccount-dev s3 ls

まとめ

本記事ではAWS IAMのスイッチロールという仕組みを利用し、複数のAWSアカウント間の切り替えを簡単に行う方法について解説しました。スイッチロールを活用することで、ユーザのログイン処理の手間を削減できるだけでなく、IAMユーザをスイッチ元となるAWSアカウントで一元管理できるなど、管理面のメリットも得られます。

ベアサポートは、20年以上にわたるサーバー運用実績で培ってきたナレッジを武器に、プラットフォームを問わず運用監視サービスを提供しています。監視運用の代行だけではなく、インフラの初期構築や監視設計・導入、セキュリティソリューションの導入・運用なども可能なため、インフラ運用に関することは何でも相談可能です。 もしAWSの設計・構築・運用に課題をお持ちであれば、ベアサポートまでお気軽にご相談ください。
ベアサポート導入事例はこちら