LoginSignup
4
3

More than 1 year has passed since last update.

AWS 複数AWSアカウントへのログインを簡単にするスイッチロールのススメ

Last updated at Posted at 2021-03-27

クマ松です。

10個以上のAWSアカウントを持っていて、それぞれにログインするIAMユーザがいる。
AWS起因の障害発生時にEC2の確認をするのにいちいちログインとログアウトを繰り返す。

これでは仕事が嫌になってしまいます。

今回はそんなイライラを解消するべく、管理用アカウントから子アカウントへ簡単にログインできるスイッチロールの設定を行います。

概要

スイッチロールが出来るようになるためには2つのことが必要です。

  • IAMユーザがスイッチロールを使う権限を持っている
  • スイッチロール側がIAMユーザを信頼している

これを実現する為に、2か所設定変更をします。

作業場所 作業対象 作業内容
1 管理用アカウント IAMユーザ Actionsts:AssumeRoleを加える
2 子アカウント IAMロール スイッチ用IAMロール作成

今回はスイッチ先のAWSアカウントにAdmin権限のロールとReadOnly権限のロールを作ります。

障害対応等でログやメトリクスの状態を確認したい際はReadOnly権限ロールを使い、実作業を行う際はAdmin権限ロールを使う等、用途毎にIAMロールを分けることでオペミスを減らすことが出来ると思います。

IAM構成図.png

作業手順

作業アカウント 作業手順
1 管理用アカウント IAMユーザ側にカスタムポリシーをアタッチ
2 子アカウント IAMロール構築用CFnスタックの作成・実行

実作業

管理用アカウントの作業

※ご利用しているIAMユーザに既にAdministratorAccess等の強い権限をアタッチしている場合は、この作業は不要です。

スイッチロールをしたいIAMユーザにsts:AssumeRole権限を付与します。
Resourceには、後工程で作成する予定のIAMロールの名前を設定します。


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iam::{子アカウントID}:role/kumayuki-prod-Administrator-role",
                "arn:aws:iam::{子アカウントID}:role/kumayuki-prod-ReadOnly-role"
            ]
        }
    ]
}

子アカウントの作業

まずは子アカウントにログインしてIAMロールを作成します。
今回はCloudFormationを使って構築します。

CloudFormation:Parametereセクションの解説

パラメータ名 用途
ProjectName 作成するIAMロールの名前にProjectNameを入れるために設定
CentralAWSAccount 管理用アカウントID

AWSTemplateFormatVersion: "2010-09-09"
Description:
  IAM Role which will be used by CentralAWSAccount IAM Users
Parameters:
  ProjectName:
    Description: project name
    Type: String
  CentralAWSACcount:
    Description: Central Management and STG AWS Account ID
    Type: String
    MaxLength: 12
    MinLength: 12
    Type: String

CloudFormation:Resourcesセクションの解説

作成するIAMロールは2つですが、それぞれのIAMロールの違いは2か所だけです。

1つ目はManagedPolicyArnsです。
Admin権限を持つIAMロールにはAWS管理ポリシーAdministratorAccessを使います。
ReadOnly権限を持つ方にはReadOnlyAccessを設定します。

2つ目はRoleNameです。
Admin権限かReadOnly権限なのか判別がしやすいような名前にしましょう。


Resources:
# ------------------------------------------------------------#
#  IAM Role
# ------------------------------------------------------------#
  AdministratorRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub ${ProjectName}-Administrator-role
      Path: /
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
        - Effect: Allow
          Action: sts:AssumeRole
          Principal:
            AWS:
             - !Sub arn:aws:iam::${CentralAWSACcount}:user/#スイッチロールを許可したいIAMユーザ
             - !Sub arn:aws:iam::${CentralAWSACcount}:user/#スイッチロールを許可したいIAMユーザ
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/AdministratorAccess
  ReadOnlyAccessIAMRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub ${ProjectName}-ReadOnly-role
      Path: /
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
        - Effect: Allow
          Action: sts:AssumeRole
          Principal:
            AWS:
             - !Sub arn:aws:iam::${CentralAWSACcount}:user/#スイッチロールを許可したいIAMユーザ
             - !Sub arn:aws:iam::${CentralAWSACcount}:user/#スイッチロールを許可したいIAMユーザ
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/ReadOnlyAccess

作成されたIAMロールの「信頼されたエンティティ」を見てみます。
スイッチロールを許可したい管理用アカウントのIAMユーザが表示されていることがわかります。

信頼関係.png

動作確認

ではスイッチしてみます。
AWSのコンソール画面の右上のヘッダー部分にある「IAMユーザ@AWSアカウントID▼」をクリックし、「ロールの切り替え」を選択します。
スイッチロール.png

スイッチ先のAWSアカウントIDとロール名を入力します。
表示名の入力は任意ですので、空白でも構いません。

ロールの切り替え.png

スイッチロールができました。
vewTQnEc.png

ReadOnly権限にスイッチしましたので、AWSリソースの削除はできません。
-wdW9e2M.png

ぜひご活用下さい。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3