【IAM】スイッチロールの運用について考えてみた

2020.09.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSアカウント設計で環境毎(開発、検証、本番)に分けて権限分離を行うパターンをよく採用します。環境毎にIAMユーザーを環境毎に作成すると、ユーザーの追加、パスワードや権限の変更、ユーザーの無効削除が負担となる為、スイッチロールを利用しています。スイッチロールは便利なので設定方法の記事を多く見るので利用されている方も多数いらっしゃると思っています。ただ、スイッチロールを導入した後の運用をどうするか?この悩みがなかなか解決できなかったのでスイッチロールの運用について考えてみました。

AWSアカウント設計の構成例

AWSアカウントを環境毎に分割した設計例は、以下の通りです。

登場人物と役割は、以下の通りです。

  • Adminメンバー:すべての環境にすべての操作が可能
  • 開発メンバー:開発、検証環境にアクセス可、操作制限あり
  • 運用メンバー:本番環境にアクセス可、操作制限あり

登場人物毎にIAMユーザーを作成し、ログインします。IAMユーザーは、権限を最小限に設定し、パスワード変更、MFA設定、読み取りだけ許可するポリシーを作成します。

3つのポリシーを「IAMグループ1」に割り当てます。IAMユーザは、自分自身のパスワード変更、MFA設定、読み取り以外の操作はできない状態です。

スイッチロールの作成

Adminメンバー、開発メンバー、運用メンバーが作業する為のスイッチロールをそれぞれ作成します。

各環境のロールに割り当てるポリシーをアタッチします。

  • Admin用ロール:AdministratorAccess(AWS管理ポリシー)
  • 作業用ロール:PowerUsersAccess(AWS管理ポリシー)

信頼されたエンティティを設定は、AWSアカウントで許可します。開発環境(アカウント番号:12345678910X)のスイッチロールするポリシードキュメント(例)です。Principalで指定したAWSアカウントのMFA認証されたIAMユーザーがスイッチできます。


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::12345678910X:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": "true"
        }
      }
    }
  ]
}

この設定だと各メンバーがスイッチできてしまうので、スイッチ用のグループとスイッチできるリソースを指定したポリシーを作成し、IAMグループにIAMユーザーを追加します。グループで指定したリソースのみにスイッチできるようになります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::12345678910X:role/dev-admin-switch-role",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "true"
        }
      }
    }
  ]
}

IAMグループの構成は、以下の通りです。

  • Adminメンバー:すべての環境のAdmin用ロールにスイッチ可
  • 開発メンバー:開発、検証環境の作業用ロールにスイッチ可
  • 運用メンバー:本番環境の作業用ロールにスイッチ可

上記の設計で実施すれば、メンバーの追加、異動、退職による権限操作をIAMユーザーとIAMグループで制御できるようになります。(ただし、IAMユーザーが所属できるIAMグループは最大10グループなので注意)

IAM および STS クォータ

最後に

スイッチロールの機能は、ググって見つけた方法でPrincipalにIAMユーザーを指定していた(ユーザガイドを読まなかったせいでこの方法以外を見つけていませんでした。。)のですが、運用を考えるとユーザー単位で設定するって運用する時にすごく管理しづらいと思っていました。IAMグループ設定できないし、ロールからロールにスイッチするにもCLIのみという制限があるし、何度もスイッチする手間もあります。AWSアカウントだとすべてのIAMユーザーが許可されますが、スイッチ元で制限すればスイッチロールの運用がとても楽になります。大人数で開発および運用する場合などの参考になれば幸いです。