すべての経済活動を、デジタル化するために、すべての業務活動を、デジタル化したいコーポレートエンジニアリング室の @yuya-takeyama です。
週末は Festival Fruezinho という音楽フェスに参加し、アルゼンチンの音響派フォークシンガー・Juana Molina を観てきました。デジタルなサウンドを活用しつつも、ライブ感のあるバンドサウンドで、非常にスリリングなライブでした!
今回の話はアナログ寄りのデジタルな気がします。
Microsoft Entra ID の PIM とは
PIM (Privileged Identity Management) については、少し前に Fintech 事業部の piroshi さんが書いてくれた記事があるので、概要はそちらをご覧ください。
かいつまんで説明すると、「この権限を使いたい」という時に数時間だけその権限に昇格できる機能で、さらに SCIM による自動プロビジョニングとの組み合わせで、Microsoft 外のサービスでも同様のことができるというもので、上記の記事では AWS での設定手順にも触れられています。
私はクラウド周りの設定はできる限り Terraform に寄せたいと考えていますが、100% そうすべきというわけでもありません。Terraform 化が追いついていない箇所をちょっと変えたい時や、初めて触れるサービスで試行錯誤を繰り返したい時、またはそもそも API での操作ができない機能などにおいて、短時間だけ権限昇格できることによって、フレキシブルかつセキュアな運用や業務フローの構築が可能になります。
- Microsoft Entra ID の PIM とは
- Microsoft 外のサービスで PIM が利用できる条件
- PIM の設定を Terraform でやってみる
- Google Workspace で PIM を利用する具体的な設定手順
- 制限事項
- まとめ
Microsoft 外のサービスで PIM が利用できる条件
以下のような条件が揃っていれば、PIM による Just-in-Time Access が利用できるでしょう。
- Microsoft Entra ID から SCIM プロトコルによる自動プロビジョニングができる
- サービス上の権限をグループに対して割り当てあることができる
これを Google Workspace に当てはめて見ていきます。
LayerX においては、1 は元々設定できていました。まだ設定できていないぞ、という方は以下のドキュメントを参考にするのが良いでしょう。 (ドキュメント上 G Suite という Google Workspace の旧名称が使われていることに注意)
問題は 2 です。
Google Workspace において、権限は管理者ロールという単位にまとめられていて、それをユーザーに割り当てることで、ユーザーはその権限を利用できます。
管理者ロールは、既定のものとしてあらかじめ用意されたものの他に、自分でカスタムロールを作成することもできます。
元々、管理者ロールをグループに対して割り当てることはできなかったのですが、2023 年の 4 月にできるようになっていました。
というわけで、Google Workspace は PIM が利用できる条件をクリアしていることがわかります。
PIM の設定を Terraform でやってみる
ここでは、Microsoft Entra ID 側の設定をやってみます。
PIM for Groups は比較的新しい機能なので、Terraform Provider for Azure Active Directory も新しめのリリースを使う必要があります。以下は2024年7月現在における最新版の v2.53.1 使います。 (Azure Active Directory は Microsoft Entra ID の旧名称)
data "azuread_group" "group_that_can_be_groups_admin" { object_id = "PIM での権限昇格を可能にする対象のグループの Object ID" } resource "azuread_group" "pim_google_workspace_groups_admin" { display_name = "pim-google-workspace-groups-admin" security_enabled = true mail_enabled = true mail_nickname = "pim-google-workspace-groups-admin" types = ["Unified"] } resource "azuread_group_role_management_policy" "pim_google_workspace_groups_admin" { group_id = azuread_group.pim_google_workspace_groups_admin.id role_id = "member" active_assignment_rules { expiration_required = true expire_after = "P15D" require_justification = true } eligible_assignment_rules { expiration_required = false } } resource "azuread_privileged_access_group_eligibility_schedule" "pim_google_workspace_groups_admin" { group_id = azuread_group.pim_google_workspace_groups_admin.object_id principal_id = data.azuread_group.group_that_can_be_groups_admin.object_id assignment_type = "member" permanent_assignment = true depends_on = [ azuread_group_role_management_policy.pim_google_workspace_groups_admin, ] } data "azuread_service_principal" "google_workspace" { client_id = "Google Workspace の App registration の Application ID" } resource "azuread_app_role_assignment" "pim_google_workspace_groups_admin" { app_role_id = "Default Organization の App Role ID" principal_object_id = azuread_group.pim_google_workspace_groups_admin.id resource_object_id = data.azuread_service_principal.google_workspace.object_id }
特に、PIM for Groups の設定に関わるのは以下のリソースです。
- azuread_group_role_management_policy
- PIM グループへの割り当て、Eligibility (昇格できる資格) に関するポリシーの設定、通知の設定など
eligible_assignment_rules
でexpiration_required = false
にしておかないと、Eligibility にも時間制限がかかってしまうactivation_rules
のapproval_stage
を設定することによって、承認者による承認を必要にすることもできる
- azuread_privileged_access_group_eligibility_schedule
- PIM グループへの Eligibility の割り当てを実際に行う
- 永久に割り当て可能な状態にするには
permanent_assignment = true
とする - 逆に期間限定にしたければ
expiration_date
を指定する
この設定を適用し、PIM for Groups でグループへの割り当てを activate することで、Google Workspace 上も同名のグループのメンバーとなることができます。
が、まだ肝心の管理者ロールを割り当てていないので、権限は何もついていない状態です。
Google Workspace で PIM を利用する具体的な設定手順
ここからの設定は、特権管理者として行う必要があります。
また、これらの設定については Terraform Provider Google Workspace での設定には対応していないようなので、管理コンソールの Web UI から行います。 (最後のリリースから 2 年以上が経過していますね…)
自動プロビジョニングで作成されたグループに管理者ロールを割り当てるには、対象のグループを「セキュリティグループ」にする必要があります。
Google Workspace の Admin で、対象のグループのラベルの設定から、「セキュリティ」にチェックを入れて保存します。
次に管理者ロールをこのグループに割り当てます。ここでは「グループ管理者」のロールを割り当てます。
「メンバーを割り当てる」から、対象のグループを選択することができます。
これで、必要な時だけ「グループ管理者」に昇格できるようになりました。
制限事項
「特権管理者」と「販売パートナー管理者」はグループに割り当てることができないため、結果的に PIM でも使えないことになります。
それ相当の強い権限でも PIM を利用したい場合は、カスタムロールを自分で作ることで対応ができると思いますが、基本的には全部入りのロールではなく、ある程度小分けになったロールを利用した方がよりセキュアと言えるでしょう。
その他の制限事項については、以下のドキュメントの「グループにロールを割り当てる」→「グループのロール割り当てに関する制限事項」を確認してください。
まとめ
Google Workspace で Microsoft Entra ID の PIM による Just-in-Time Access を有効にする方法について説明しました。
それぞれのサービスのアップデートや、Terraform Provider 側での追従により、色々と便利に設定できるようになっていますね。
PIM は非常に汎用性の高い仕組みなので、AWS や Google Workspace に限らず積極的に利用していきたいところです。
そして Terraform を使って設定手順をある程度定型化することで、効率的に様々なサービスへの適用を広げることが可能になるでしょう。 (ちなみに、社内では Terraform モジュールにしており、さらに便利になっています)
コーポレートエンジニアリング室では、このように日々運用を進化させていくメンバーを大募集しています。
まずは話だけでも、という方は是非カジュアル面談や、LayerX Casual Nightといったイベントにお応募してみてください。