gcloud CLIで組織ポリシーのマネージド制約を設定してみた
Google Cloudでは、組織ポリシーを使い組織全体にセキュリティやコンプライアンスのルールを適用できます。
今回はgcloud CLIを使って組織ポリシーを設定してみました。
組織ポリシーとは
Organization Policy Serviceは、Google Cloud組織全体にガバナンスルールを適用するためのサービスです。
組織ポリシーでは「制約(Constraint)」を使ってルールを定義します。
- サービスアカウントキーの作成を禁止
- 通知先の連絡先ドメインを制限
- デフォルトサービスアカウントへの特権ロール付与を防止
ポリシーは階層構造を持ち、組織 → フォルダ → プロジェクトの順で継承されます。上位で設定したポリシーは、下位のリソースにも適用されます。
前提条件
- gcloud CLIがインストール・認証済みであること
- 組織ポリシーの管理に必要なIAMロールが付与されていること(
roles/orgpolicy.policyAdminなど)
組織IDは以下のコマンドで確認できます。
gcloud organizations list
DISPLAY_NAME: <your-org-name>
ID: <your-org-id>
DIRECTORY_CUSTOMER_ID: <your-org-customer-id>
プロジェクトIDは以下で確認できます。
gcloud projects list
PROJECT_ID: <your-project-id>
NAME: <your-project-name>
PROJECT_NUMBER: <your-project-number>
ENVIRONMENT:
フォルダIDは以下で確認できます。
gcloud resource-manager folders list --organization=$ORGANIZATION_ID
以降のコマンドで使用するため、環境変数にセットしておきます。
export ORGANIZATION_ID=<your-org-id>
export PROJECT_ID=<your-project-id>
export FOLDER_ID=<your-folder-id>
組織ポリシーの確認
まずは現在の組織ポリシーを確認してみます。
制約の一覧を表示
プロジェクトに設定されている制約の一覧を表示します。
gcloud org-policies list --project=$PROJECT_ID
CONSTRAINT: iam.managed.workloadIdentityPoolProviders
LIST_POLICY: -
BOOLEAN_POLICY: SET
ETAG: hoge
デフォルトでは、そのリソースレベルで明示的に設定されたポリシーのみを表示します。
非アクティブなポリシーも確認したい場合は、--show-unsetオプションをつけます。
gcloud org-policies list --project=$PROJECT_ID --show-unset
組織レベルやフォルダレベルで確認する場合は、それぞれ--organizationや--folderを使います。
gcloud org-policies list --organization=$ORGANIZATION_ID
gcloud org-policies list --folder=$FOLDER_ID
ポリシーの詳細を確認
特定の制約の設定内容を確認します。
gcloud org-policies describe iam.managed.disableServiceAccountKeyCreation --project=$PROJECT_ID
describe はそのリソースレベルで直接設定されたポリシーのみを返すため、ポリシーが未設定だとNOT_FOUND になる点にご注意ください。
name: projects/<your-project-id>/policies/iam.managed.disableServiceAccountKeyCreation
spec:
etag: xxxxxxxxxxxx
rules:
- enforce: true
updateTime: '2026-01-15T10:00:00.000000Z'
--effectiveフラグを使うと、継承を含めた有効なポリシーを確認できます。
gcloud org-policies describe iam.managed.disableServiceAccountKeyCreation --project=$PROJECT_ID --effective
ブール型マネージド制約の設定
ブール型のマネージド制約は、特定の動作を「有効にする(enforce)」か「無効にする」かを制御します。
ここではiam.managed.disableServiceAccountKeyCreationを例に、サービスアカウントキーの作成を禁止してみます。
ポリシーファイルの作成
まず、YAMLファイルでポリシーを定義します。
name: projects/<your-project-id>/policies/iam.managed.disableServiceAccountKeyCreation
spec:
rules:
- enforce: true
ポリシーの適用
set-policyコマンドでポリシーを適用します。
gcloud org-policies set-policy policy-boolean.yaml --project=$PROJECT_ID
name: projects/<your-project-id>/policies/iam.managed.disableServiceAccountKeyCreation
spec:
etag: xxxxxxxxxxxx
rules:
- enforce: true
updateTime: '2026-02-27T10:00:00.000000Z'
設定の確認
適用後にdescribeコマンドで設定を確認します。
gcloud org-policies describe iam.managed.disableServiceAccountKeyCreation --project=$PROJECT_ID
パラメータ付きマネージド制約の設定
マネージド制約の中には、パラメータを指定して制御するものがあります。ブール型と異なり、parametersブロックで許可する値を定義します。
ここではessentialcontacts.managed.allowedContactDomainsを例に、Essential Contactsの通知先ドメインを制限してみます。
ポリシーファイルの作成
特定のドメインのみ通知先として許可するポリシーを定義します。
name: projects/<your-project-id>/policies/essentialcontacts.managed.allowedContactDomains
spec:
rules:
- enforce: true
parameters:
allowedDomains:
- '@example.com'
- '@example.org'
パラメータ付きの制約では、enforce: true に加えて parameters で具体的な値を指定します。
ポリシーの適用
ブール型と同様にset-policyコマンドで適用します。
gcloud org-policies set-policy policy-params.yaml --project=$PROJECT_ID
name: projects/<your-project-id>/policies/essentialcontacts.managed.allowedContactDomains
spec:
etag: xxxxxxxxxxxx
rules:
- enforce: true
parameters:
allowedDomains:
- '@example.com'
- '@example.org'
updateTime: '2026-02-27T10:00:00.000000Z'
設定の確認
gcloud org-policies describe essentialcontacts.managed.allowedContactDomains --project=$PROJECT_ID
この設定を適用後、許可されていないドメインの連絡先を追加しようとすると、組織ポリシー違反のエラーが発生します。
ポリシーの削除・リセット
ポリシーを元に戻す方法には、deleteとresetの2つがあります。
delete: 親のポリシーを継承する
deleteはそのリソースのポリシーを削除し、「親のポリシーを継承する」状態に戻します。
gcloud org-policies delete iam.managed.disableServiceAccountKeyCreation --project=$PROJECT_ID
例えば、組織レベルでenforceされている制約がある場合は、deleteするとその設定が再び適用されます。
reset: Googleで管理されるデフォルト値に戻す
resetは「Googleで管理されるデフォルト値」に上書きします。親のポリシーは継承されません。
gcloud org-policies reset iam.managed.disableServiceAccountKeyCreation --project=$PROJECT_ID
例えば、組織レベルでenforceされている制約があっても、resetするとそのプロジェクトではデフォルトが適用されます。
使い分け
| コマンド | 動作 | 親がenforceしている場合 |
|---|---|---|
delete |
ポリシーを削除し、親のポリシーを継承する | 親のenforceが適用される |
reset |
Googleで管理されるデフォルト値に上書きする | 親のenforceは適用されない |
おわりに
gcloud CLIで組織ポリシーを設定してみました。
ブール型とパラメータ付きの2種類のマネージド制約を試しましたが、どちらもYAMLファイルを作成してset-policyコマンドで適用する流れは共通しています。
CLIで操作できるため、シェルスクリプトやCI/CDパイプラインでの自動化がしやすくなります。Terraformのgoogle_org_policy_policyリソースと組み合わせてIaCで管理する方法も検討してみてください。






