gcloud CLIで組織ポリシーのマネージド制約を設定してみた

gcloud CLIで組織ポリシーのマネージド制約を設定してみた

2026.02.27

Google Cloudでは、組織ポリシーを使い組織全体にセキュリティやコンプライアンスのルールを適用できます。

今回はgcloud CLIを使って組織ポリシーを設定してみました。

組織ポリシーとは

Organization Policy Serviceは、Google Cloud組織全体にガバナンスルールを適用するためのサービスです。

組織ポリシーでは「制約(Constraint)」を使ってルールを定義します。

  • サービスアカウントキーの作成を禁止
  • 通知先の連絡先ドメインを制限
  • デフォルトサービスアカウントへの特権ロール付与を防止

ポリシーは階層構造を持ち、組織 → フォルダ → プロジェクトの順で継承されます。上位で設定したポリシーは、下位のリソースにも適用されます。

https://cloud.google.com/resource-manager/docs/organization-policy/overview

https://dev.classmethod.jp/articles/gcp-organization-policies-for-beginners/

前提条件

  • 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を例に、サービスアカウントキーの作成を禁止してみます。

https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints

ポリシーファイルの作成

まず、YAMLファイルでポリシーを定義します。

policy-boolean.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の通知先ドメインを制限してみます。

ポリシーファイルの作成

特定のドメインのみ通知先として許可するポリシーを定義します。

policy-params.yaml
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

この設定を適用後、許可されていないドメインの連絡先を追加しようとすると、組織ポリシー違反のエラーが発生します。

ポリシーの削除・リセット

ポリシーを元に戻す方法には、deleteresetの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で管理する方法も検討してみてください。

https://cloud.google.com/resource-manager/docs/organization-policy/creating-managing-policies

https://dev.classmethod.jp/articles/terraform-organization-policy-management/

この記事をシェアする

FacebookHatena blogX

関連記事