
こちらの記事は、以下の記事の続きとなり、Active Directory は既に構築済みの状況となります。
Active Directory の構築などは以下をご覧ください。
背景
私が AWS でリモートワーク環境構築を進める中、社員からプロジェクトで AWS を使いたいという要望が出てきました。
プロジェクトごとに AWS アカウントを作成することも考えましたが、これを許すと AWS アカウントが乱立する心配がありました。
料金を1つの AWS アカウントに集約したい気持ちもあり、AWS アカウントは1つにしつつ、ユーザーを払い出す形で対処することになりました。
課題
最初に思い付いたのは IAM ユーザーを払い出す方法です。
ただ、この方法には管理の面でいくつかの課題があることがわかりました。
- プロジェクトのメンバーは多く、全員分 IAM ユーザーを払い出すのは大変
- 1つの IAM ユーザーを、複数の IAM グループに所属させることはできない
(複数のプロジェクトに所属しているメンバーの IAM ユーザーも想定) - 払い出したことを忘れてしまいそう
(退社した社員の IAM ユーザーが残り続けてしまい、何の用途で残っているのか判断できなくなりそう)
そのため、何か一元的に管理できる方法がないか方法を模索しました。
また、せっかく、リモートワークの環境構築にて Active Directory で社員のユーザー ID を管理するようになったので、
Active Directory ユーザーを使用して管理できたらうれしいなと思いました。
方法
IAM Identity Center を使うことで、ユーザーの管理と権限の付与を一元管理できそうであることがわかりました。
また、管理対象のユーザーのソースとして、Active Directory を指定することが可能であることもわかりました。
なので、IAM Identity Center と既存の Active Directory を連携させて、ユーザーにアクセス権を付与しようと考えました。
ざっくり以下のような構成です。

管理者側の手順
Active Directory グループ(親グループ)の作成
連携設定をしても、Active Directory のすべてのユーザーが、自動で IAM Identity Center に登録されるわけではありません。
連携後、どのグループ・ユーザーを IAM Identity Center に同期させるか、指定する必要があります。
そのため、同期対象を包括する、親となるグループを先に作成しておきます。†
- 以下の URL から、グループを作成します。
適宜<Directory ID>
の箇所を、ご自身のディレクトリ ID に置き換えてください。
https://ap-northeast-1.console.aws.amazon.com/directoryservicev2/home?region=ap-northeast-1&tab=groups#!/directories/<Directory ID>
/createGroup - [Step 1] グループの詳細を指定する
- グループ名:IAMIdentityCenterAllUsersAndGroups
- グループタイプ:⦿ セキュリティ
- グループの範囲:⦿ ドメインローカル
画像

- [Step 2 - optional] ユーザーをグループに追加する
- 何もせずそのまま [Next]
画像

- [Step 3 - optional] 子グループを追加する
- 何もせずそのまま [Next]
画像

- [Step 4 - optional] 親グループを追加する
- 何もせずそのまま [Next]
画像

- [Step 5] グループを確認して作成
画像

IAM Identity Center の有効化
- 以下の URL から、IAM Identity Center を有効化します。
https://ap-northeast-1.console.aws.amazon.com/singlesignon/home
画像

- 今後ほかの AWS アカウントと連携させる可能性もあるので、推奨されている AWS Organizations も有効にします。
画像

Active Directory と IAM Identity Center の連携
- IAM Identity Center の設定画面からアイデンティティソースを変更します。
画像

- [ステップ 1] アイデンティティソースを選択:⦿ Active Directory
画像

- [ステップ 2] Active Directory を接続
- Active Directory を選択:構築したディレクトリ
画像

- [ステップ 3] 変更を確定
画像

- 正常に接続後、表示されるバナーの ガイド付き設定を開始 を選択します。
画像

- [ステップ 1 - optional] 属性マッピングを設定
- 何もせずそのまま [Next]
画像

- [ステップ 2 - optional] 同期の範囲を設定
- グループ「IAMIdentityCenterAllUsersAndGroups」を入力して Add
画像

- [ステップ 3] 設定を確認して保存
画像

- IAM Identity Center グループに同期されているか確認します。
画像

Active Directory グループ(子グループ)の作成
プロジェクトごとにグループを作成していき、所属する社員のユーザーを追加します。
プロジェクトのグループは、グループ「IAMIdentityCenterAllUsersAndGroups」に所属させます。
なお、IAM Identity Center では属性は一意である必要があるので、全ユーザーでメールアドレスの重複がないようにしてください。
重複しているユーザーは IAM Identity Center にどちらかしか登録されません。
- 以下の URL から、グループを作成します。
適宜<Directory ID>
の箇所を、ご自身のディレクトリ ID に置き換えてください。
https://ap-northeast-1.console.aws.amazon.com/directoryservicev2/home?region=ap-northeast-1&tab=groups#!/directories/<Directory ID>
/createGroup - [Step 1] グループの詳細を指定する
- グループ名:ProjectB
- グループタイプ:⦿ セキュリティ
- グループの範囲:⦿ ドメインローカル
画像

- [Step 2 - optional] ユーザーをグループに追加する
- ProjectB に所属している社員のユーザー (User 2, User 3) を追加
画像

- [Step 3 - optional] 子グループを追加する
- 何もせずそのまま [Next]
画像

- [Step 4 - optional] 親グループを追加する
- IAMIdentityCenterAllUsersAndGroups を追加
画像

- [Step 5] グループを確認して作成
画像

- IAM Identity Center ユーザーやグループに自動で同期されているか確認します。
※ 同期されるまでに 30 分から 2 時間かかる場合があります†
画像

許可セットの作成
ProjectB に所属するユーザーに付与するアクセス権を設定していきます。
事前に AWS で定義されている、PowerUserAccess を付与します。
説明: AWS サービスとリソースへのフルアクセスを提供しますが、ユーザーとグループの管理は許可しません。
https://docs.aws.amazon.com/ja_jp/aws-managed-policy/latest/reference/PowerUserAccess.html
- 以下のページより、許可セットを作成していきます。
画像

- [ステップ 1] 許可セットタイプを選択
- 許可セットのタイプ: ⦿ 事前定義された許可セット
- 事前定義された許可セットのポリシー: ⦿ PowerUserAccess
画像

- [ステップ 2] 許可セットの詳細を指定
- 許可セット名: PowerUserAccess
- セッション時間: 1 時間
画像

- [ステップ 3] 確認して作成
画像

AWS アカウントアクセスを付与
- 以下のページより、該当の AWS アカウントに ProjectB のメンバーを割り当てます。
画像

- [ステップ 1] ユーザーとグループの選択
- グループ: ☑️ ProjectB@corp.awsexample.com
画像

- [ステップ 2] 許可セットを選択
- 許可セット: ☑️ PowerUserAccess
画像

- [ステップ 3] 確認して送信
画像

上記手順を経て、ProjectB に所属しているユーザーは、マネジメントコンソールにログインできるようになりました。
なお、ユーザーのログインに、デフォルトでは MFA(多要素認証)が有効になっています。
セキュリティの観点からも、私たちの環境でも有効のままにしました。
IAM Identity Center の Settings にて、[認証] タブから、MFA を無効にすることもできます。
ユーザー側の手順
ProjectB に所属してる社員には以下の手順でログインをお願いしました。
- 自前のスマートフォンに Google Authenticator(MFA 認証アプリ)をインストールしてもらいます。[Google Play / App Store]
- 以下の URL からポータルにアクセスし、ユーザー名とパスワードを入力します。
適宜<Directory ID>
の箇所を、運用しているディレクトリ ID に置き換えてください。
https://<Directory ID>
.awsapps.com/start - MFA デバイスの登録 で認証アプリを選択し以下を進めます。
- QR コードを表示
- スマートフォンで Google Authenticator を起動
- アプリ右下の + から QR コードをスキャン
- アプリに追加された AWS SSO 欄の6桁の認証コードを入力
- ポータルの [アカウント] タブから PowerUserAccess をクリックしログインします。
最初は MFA 認証は特に考えていなかったのですが、デフォルトで有効となっていることがわかり、セキュリティ強化のためにも有効のままで良いね、となりました。
ほかのプロジェクトでも要望がありそうで、そうなれば、許可セットでしっかりと権限を設ける必要があります。
長くなりそうなので、それは次の記事で紹介します。