TOP>コラム一覧>スイッチロールを用いた運用を考える

スイッチロールを用いた運用を考える

はじめに

こんにちは。CTCの朴木です。
みなさまIAMユーザの管理についてどのように整理していますでしょうか。
管理するAWSアカウントが増えるにつれ、それぞれのアカウントにアクセスするユーザは多岐にわたり、IAMユーザの管理も複雑になりつつあります。
複数のAWSアカウントがある場合はAWS Organizationsの導入をお勧めしますが、今回はOrganizations環境が導入されていない場合にも使えるIAM管理テクニックをご紹介します。

スイッチロールについて

今回紹介するのは踏み台アカウントを用いたスイッチロールでのIAM管理運用となります。
踏み台アカウントにて、IAMユーザを作成し、アクセス先のアカウントにて踏み台アカウントのユーザからのアクセスを引き受けることのできるロールを作成します。
本記事ではIAMユーザを別のアカウントへスイッチするための手順をご紹介しますが、実際の運用を考える際はIAMグループを用いてIAMユーザをグルーピングし、紐づける権限を整理して付与するとより良い構成になります。
適切なロールへのスイッチを行うことで必要な権限でのアクセスを可能にし、ユーザの作成削除については各アカウントではなく、踏み台アカウントのユーザのみで対応することが可能になります。

MFA設定を必須にしよう

各アカウントは踏み台アカウントからのユーザアクセスを受け入れますが、もし第三者の手にユーザ情報がわたってしまった場合、設定されたロールを用いてそれぞれのアカウントに対してアクセスが可能になってしまいます。
セキュリティ上、踏み台アカウントのIAMにはMFAを設定し、MFAが設定されていない場合はサービスへのアクセスをできないよう設定しましょう。本記事ではMFAを設定しない場合は操作拒否するポリシーについても設定紹介します。

手順

まずはスイッチ先のアカウントから設定を始めます。
今回はReadOnly権限を付与したロールを作成します。
信頼されたエンティティでは「AWSアカウント」を選択し、踏み台アカウント(スイッチ元)のAWSアカウントのIDを入力し、「次へ」を選択します。

次に紐づけるポリシーを選択し、ロール名を入力してIAMロールを作成します。

続いて踏み台アカウント(スイッチ元)での設定に移りましょう。
踏み台アカウントのIAMユーザに付与するポリシーを作成します。
まずはスイッチロールを許可するため、下記のポリシーを作成します。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::[アカウントID]:role/[ロール名]"
    }
}

また、MFA設定を必須とするため下記のポリシーを作成します。
このポリシーを付与することで、MFAを設定していない場合はほとんどの操作を拒否することができます(MFAの設定やパスワード変更は可能)。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iam::*:mfa/${aws:username}",
                "arn:aws:iam::*:user/${aws:username}"
            ],
            "Action": [
                "iam:ListVirtualMFADevices",
                "iam:DeleteVirtualMFADevice",
                "iam:ListMFADevices",
                "iam:EnableMFADevice",
                "iam:DeactivateMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListUsers",
                "iam:GetUser",
                "iam:GetAccountPasswordPolicy",
                "iam:GetAccountSummary",
                "iam:ChangePassword"
            ]
        },
        {
            "Sid": "AllowUserToCreateVirtualMFADevice",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": "arn:aws:iam::*:mfa/*"
        },
        {
            "Sid": "DenyManageOwnUserWithoutMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:ListVirtualMFADevices",
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:ListMFADevices",
                "iam:EnableMFADevice",
                "iam:DeactivateMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListUsers",
                "iam:GetUser",
                "iam:GetAccountPasswordPolicy",
                "iam:GetAccountSummary",
                "iam:ChangePassword"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

上記2つのポリシーを付与したIAMユーザを作成したら、このユーザで踏み台アカウントにログインしてみましょう。
初回ログイン時はMFAが設定されていないためすべてのサービスの情報が見えない状態になりますので、まずはMFAを設定ください。今回MFAの設定手順は省略させていただきます。

MFAの設定後は再度ログインを行ってください。再ログインを実施しないとIAMのMFA設定情報が更新されず上記のポリシーによってサービスへのアクセスが拒否されたままになります。
再ログインしたら「ロールの切り替え」よりスイッチロールを行います。

スイッチ先のアカウントIDとロール名を入力し、スイッチロールを行います。

これでスイッチロールの手順は完了です!

おわりに

利用しているアカウントが少数の場合、アカウントやユーザの管理は比較的量が多くないため管理者が一人でもすべてのユーザやポリシーを管理しきれるかと思います。
しかし昨今ではAWSの利用増加に伴い、利用部門ごとにアカウントをもったり、検証や本番環境ごとにアカウントを分けたりすることが増えつつあるため、一つの企業でも何十、何百というアカウントを保有することも少なくありません。
アカウント数が増えるとその分アカウント個別の要件やユーザ数が増えるためより管理は複雑さを増します。管理方針を定めずにアカウントが増えていくと、いざアカウントやユーザを管理統合するときに工数や労力が多くかかってしまいます。
今回は踏み台にユーザを作成し、そこからスイッチロールを行う方法をご紹介しましたが、先の運用を考えるとIAMグループにIAMユーザを紐づけそれぞれの適切なアカウントの適切なロールにスイッチできるよう設計したほうがより汎用性の高い構成にすることができます。
スイッチロールを用いた運用はAWS Organizations環境がなくとも複数のAWSアカウントのIAMユーザを1か所に集約することが可能です。またOrganizations環境をお持ちの場合はCloudFormation StackSetsにてテンプレートを使いロールを作成することでAWSアカウントが増えた場合でも簡単にスイッチ先のロール作成を行うことができ、より労力を削減することが可能となります。
踏み台アカウントにてユーザを管理することで、ユーザの追加や削除の際の手間を軽減することができるためぜひご検討いただければ幸いです。

CTCは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。

お問い合わせ

【著者プロフィール】

朴木 瞳(ほうのき ひとみ)

伊藤忠テクノソリューションズ株式会社 クラウドエンジニア

AWSのアカウント管理や技術QAを経験し、現在はインフラの設計・構築における業務を担当。従量削減のためのRIのコストシミュレーションにおいてもお客様を支援。

TOP>コラム一覧>スイッチロールを用いた運用を考える

pagetop