カスタムの組織のポリシーを追加する

このページでは、Cloud SQL インスタンスでカスタム制約を作成、設定、管理する方法について説明します。カスタムの組織のポリシーの概要については、カスタムの組織のポリシーをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. [IAM と管理] ページから、組織ポリシー管理者ロール(roles/orgpolicy.policyAdmin)をユーザー アカウントまたはサービス アカウントに追加します。

    IAM アカウントのページに移動

  11. この操作を行う前に、制限事項をご覧ください。

カスタム制約でサポートされているフィールド

次のフィールドにカスタム制約を設定できます。

フィールド 使用例
SqlDatabaseVersion 特定のデータベース バージョンの使用を強制する
region インスタンスの作成を特定のリージョンに制限する
availabilityType 高可用性を適用する
ipConfiguration > pscConfig > allowedConsumerProjects PSC でコンシューマー プロジェクトの許可リストを特定のプロジェクトに制限する
ipConfiguration > sslMode SSL モードを ENCRYPTED_ONLY または TRUSTED_CLIENT_CERTIFICATE_REQUIRED に適用します。Google Cloud コンソールで Cloud SQL インスタンスを作成するときに SSL モードを選択することはできません。したがって、このカスタムの組織のポリシーを作成する場合は、gcloud CLI、API、または Terraform を使用して Cloud SQL インスタンスを作成する必要があります。
dataDiskType SSD または HDD の使用を強制する
backupConfiguration > location 自動バックアップのロケーションを特定のロケーションに制限する
backupConfiguration > pointInTimeRecoveryEnabled すべてのインスタンスで PITR を有効にする
backupConfiguration > transactionLogRetentionDays すべてのインスタンスで、トランザクション ログの保持に特定の保持期間を使用するように強制する
backupConfiguration > backupRetentionSettings > retentionUnit すべてのバックアップに保持日数を適用する。
passwordValidationPolicy > minLength 最小パスワード長のパスワード ポリシーを適用する。
passwordValidationPolicy > complexity 複雑さに関するパスワード ポリシーを適用する。
passwordValidationPolicy > reuseInterval 特定の再利用間隔のパスワード ポリシーを適用する
passwordValidationPolicy > disallowUsernameSubstring パスワードとしてユーザー名を許可しないパスワード ポリシーを適用する
Edition すべてのインスタンスに Enterprise Plus エディションの使用を強制する
connectorEnforcement すべての接続で Cloud SQL コネクタの使用を必須にする
dataCacheConfig すべてのインスタンスでデータ キャッシュの使用を必須にする

カスタム制約の作成と設定

カスタム制約は、組織のポリシーを適用しているサービスでサポートされるリソース、メソッド、条件、アクションを使用して YAML ファイルで定義されます。カスタム制約の条件は、Common Expression Language(CEL)を使用して定義されます。CEL を使用してカスタム制約で条件を作成する方法については、Common Expression Language をご覧ください。

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. ページの上部にあるプロジェクト選択ツールを選択します。

  3. プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。

  4. [ カスタム制約] をクリックします。

  5. [表示名] ボックスに、制約の名前を入力します。このフィールドの最大長は 200 文字です。

  6. [制約 ID] ボックスに、新しいカスタム制約の名前を入力します。カスタム制約は custom. で始まる必要があり、大文字、小文字、数字のみを含めることができます(例: custom.requireCloudSqlPasswordMinLength)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例: organizations/123456789/customConstraints/custom.)。

  7. [説明] ボックスに、ポリシー違反が発生したときにエラー メッセージとして表示される制約の説明を入力します。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。

  8. [リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む Google Cloud REST リソースの名前を選択します(例: sqladmin.googleapis.com/Instance)。リソースタイプごとに最大 20 個のカスタム制約を設定できます。すでに 20 個のカスタム制約があるリソースタイプにカスタム制約を作成しようとすると、オペレーションは失敗します。

  9. [適用方法] で、REST CREATE メソッドに制約を適用するのか、または CREATE メソッドと UPDATE メソッドの両方に制約を適用するのかを選択します。

    [条件を編集] をクリックして、次の操作を行います。

    1. [条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します(例: resource.settings.passwordValidationPolicy.minLength > 10)。このフィールドの最大長は 1,000 文字です。CEL の使用方法の詳細については、Common Expression Language をご覧ください。カスタム制約で使用できるサービス リソースの詳細については、カスタム制約でサポートされているサービスをご覧ください。

    2. [保存] をクリックします。

  10. [アクション] で、上記の条件が満たされた場合に評価された方法を許可するか拒否するかを選択します。

    • 拒否: 条件が true と評価された場合に、リソースを作成または更新するオペレーションをブロックします。

    • 許可: 条件が true と評価された場合に、リソースを作成または更新するオペレーションが許可されます。条件に明示的にリストされているケースを除き、他のすべてのケースはブロックされます。

  11. [制約を作成] をクリックします。

各フィールドに値を入力すると、このカスタム制約の YAML 構成が右側に表示されます。

gcloud

カスタム制約の YAML ファイルを作成するには、次の形式を使用します。

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- container.googleapis.com/RESOURCE_NAME
methodTypes:
- CREATE
- UPDATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

次のように置き換えます。

  • ORGANIZATION_ID: 組織 ID(123456789 など)。

  • CONSTRAINT_NAME: 新しいカスタム制約に付ける名前。カスタム制約は custom. で始まる必要があり、大文字、小文字、数字のみを含めることができます(例: custom.enableGkeAutopilot.)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例: organizations/123456789/customConstraints/custom)。

  • RESOURCE_NAME: 制限するオブジェクトとフィールドを含む GKE API REST リソースの名前(URI ではない)。例: Cluster

  • CONDITION: サポート対象のサービス リソースの表現に対して書き込まれる CEL 条件。このフィールドの最大長は 1,000 文字です。

  • ACTION: condition が満たされている場合に実行するアクション。ALLOW または DENY になります。

    • 拒否: 条件が true と評価された場合に、リソースを作成または更新するオペレーションをブロックします。

    • 許可: 条件が true と評価された場合に、リソースを作成または更新するオペレーションが許可されます。条件に明示的にリストされているケースを除き、他のすべてのケースはブロックされます。

  • DISPLAY_NAME: 制約の名前。このフィールドの最大長は 200 文字です。

  • DESCRIPTION: ポリシー違反時にエラー メッセージとして表示される制約の説明。このフィールドの最大長は 2,000 文字です。

gcloud CLI を使用して新しいカスタム制約を作成したら、組織内の組織のポリシーで使用できるように設定する必要があります。カスタム制約を設定するには、次の gcloud org-policies set-custom-constraint コマンドを使用します。
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
ここで、CONSTRAINT_PATH はカスタム制約ファイルのフルパスに置き換えます。例: /home/user/customconstraint.yaml。完了すると、カスタム制約が利用可能な組織のポリシーとして Google Cloud 組織のポリシーのリストに表示されます。カスタム制約が存在することを確認するには、次の gcloud org-policies list-custom-constraints コマンドを使用します。
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ここで、ORGANIZATION_ID は組織リソースの ID に置き換えます。詳細については、組織のポリシーの表示をご覧ください。

カスタムの組織のポリシーを適用する

カスタム制約が設定されると、事前定義されたブール値制約と同じように動作します。Google Cloud では、ユーザー リクエストが許可されているかどうかを評価する際に、カスタム制約を最初にチェックします。いずれかのカスタムの組織のポリシーがリクエストを拒否すると、そのリクエストは承認されません。次に、Google Cloud は、そのリソースに適用されている事前定義の組織のポリシーを確認します。

ブール型制約を適用するには、それを参照する組織のポリシーを作成し、それを Google Cloud リソースに適用します。

コンソール

ブール型制約を適用するには、次のようにします。

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. ページの上部にあるプロジェクト選択ツールを選択します。
  3. プロジェクト選択ツールから、組織のポリシーを設定するプロジェクトを選択します。
  4. [組織のポリシー] ページのリストから制約を選択します。その制約の [ポリシーの詳細] ページが表示されます。
  5. このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
  6. [ポリシーの編集] ページで、[Override parent's policy] を選択します。
  7. [ルールを追加] をクリックします。
  8. [適用] で、この組織のポリシーの適用を有効にするかどうかを選択します。
  9. タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。
  10. カスタム制約の場合は、[変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートできます。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
  11. 組織のポリシーを完成させて適用するには、[ポリシーを設定] をクリックします。ポリシーが有効になるまでに最長 15 分かかります。

gcloud

ブール型制約を適用する組織のポリシーを作成するには、制約を参照するポリシー YAML ファイルを作成します。

      name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
    

次のように置き換えます。

  • PROJECT_ID: 制約を適用するプロジェクト。
  • CONSTRAINT_NAME: カスタム制約に定義した名前。たとえば、custom.enableGkeAutopilot のようにします。

制約を含む組織のポリシーを適用するには、次のコマンドを実行します。

    gcloud org-policies set-policy POLICY_PATH
    

POLICY_PATH は、組織のポリシーの YAML ファイルのパスに置き換えます。ポリシーが有効になるまでに最長 15 分かかります。

カスタム制約を更新する

カスタム制約を更新するには、Google Cloud コンソールで制約を編集するか、新しい YAML ファイルを作成して、gcloud CLI コマンド set-custom-constraint を再度使用します。カスタム制約に対してバージョニングは実行されないため、この操作を行うと、既存のカスタム制約が上書きされます。カスタム制約がすでに適用されている場合、更新されたカスタム制約はすぐに有効になります。

コンソール

  1. Google Cloud コンソールで [組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. ページの上部にあるプロジェクト選択ツールを選択します。

  3. プロジェクト選択ツールから、組織のポリシーを更新するリソースを選択します。

  4. [組織のポリシー] ページのリストから、編集する制約を選択します。その制約の [ポリシーの詳細] ページが表示されます。

  5. [ 制約を編集] をクリックします。

  6. 表示名、説明、適用方法、条件、アクションを変更します。制約を作成した後で、制約 ID またはリソースタイプを変更することはできません。

  7. [変更を保存] をクリックします。

gcloud

gcloud CLI を使用して既存のカスタム制約を編集するには、変更する内容を含む新しい YAML ファイルを作成します。

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- METHOD1
- METHOD2
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

次のように置き換えます。

  • ORGANIZATION_ID: 組織 ID(123456789 など)。

  • CONSTRAINT_NAME: 新しいカスタム制約に付ける名前。カスタム制約は custom. で始める必要があります。また、使用できるのは、大文字、小文字、数字のみです(例: custom.disableGkeAutoUpgrade)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例: organizations/123456789/customConstraints/custom.)。

  • RESOURCE_NAME: 制限するオブジェクトとフィールドを含む Google Cloud REST リソースの完全修飾名。例: container.googleapis.com/NodePoolカスタム制約で使用できるサービス リソースの詳細については、カスタム制約でサポートされているサービスをご覧ください。

  • METHOD1,METHOD2: 制約を適用する RESTful メソッドのリスト。CREATECREATEUPDATE のいずれかです。 すべての Google Cloud サービスが両方のメソッドをサポートしているわけではありません。各サービスでサポートされているメソッドを確認するには、サポートされているサービスをご覧ください。

  • CONDITION: サポートされているサービス リソースを参照する CEL 条件(例: "resource.management.autoUpgrade == false")。このフィールドの最大長は 1,000 文字です。CEL の使用方法の詳細については、Common Expression Language をご覧ください。

  • ACTION: condition を満たしている場合に実行するアクション。ALLOW または DENY になります。

  • DISPLAY_NAME: 制約の名前。このフィールドの最大長は 200 文字です。

  • DESCRIPTION: ポリシー違反時にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。

gcloud CLI を使用して新しいカスタム制約を作成したら、組織内の組織のポリシーで使用できるように設定する必要があります。カスタム制約を設定するには、次の gcloud org-policies set-custom-constraint コマンドを使用します。

gcloud org-policies set-custom-constraint CONSTRAINT_PATH
ここで、CONSTRAINT_PATH はカスタム制約ファイルのフルパスに置き換えます。例: /home/user/customconstraint.yaml。完了すると、カスタム制約が利用可能な組織のポリシーとして Google Cloud 組織のポリシーのリストに表示されます。カスタム制約が存在することを確認するには、次の gcloud org-policies list-custom-constraints コマンドを使用します。
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ここで、ORGANIZATION_ID は組織リソースの ID に置き換えます。詳細については、組織のポリシーの表示をご覧ください。

カスタム制約を削除する

カスタム制約は、Google Cloud コンソールまたは gcloud CLI で削除できます。

コンソール

  1. Google Cloud コンソールで [組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. ページの上部にあるプロジェクト選択ツールを選択します。

  3. プロジェクト選択ツールから、組織のポリシーを削除するリソースを選択します。

  4. [組織のポリシー] ページのリストから、削除する制約を選択します。その制約の [ポリシーの詳細] ページが表示されます。

  5. [削除] をクリックします。

  6. [削除] をクリックして、制約の削除を確定します。

gcloud

カスタム制約を削除するには、org-policies delete-custom-constraint gcloud CLI コマンドを使用します。

gcloud org-policies delete-custom-constraint custom.CONSTRAINT_NAME \
  --organization=ORGANIZATION_ID

次のように置き換えます。

  • ORGANIZATION_ID: 組織 ID(123456789 など)。

  • CONSTRAINT_NAME: カスタム制約の名前。例: custom.disableGkeAutoUpgrade

出力は次のようになります。

Deleted custom constraint [organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade]

カスタム制約を削除しても、その制約を使用して作成されたポリシーは引き続き存在しますが、無視されます。削除したカスタム制約と同じ名前のカスタム制約を作成することはできません。

例: カスタム制約を使用して HDD ではなく SSD を使用するように強制する

  1. 次のように dataDiskType.yaml ファイルを作成します。

    name: organizations/651333429324/customConstraints/custom.dataDiskType
    resourceTypes:
    - sqladmin.googleapis.com/Instance
    methodTypes:
    - CREATE
    - UPDATE
    condition: resource.settings.dataDiskType == "PD_SSD"
    actionType: ALLOW
    displayName: dataDiskType must be PD_SDD
    description: dataDiskType must be PD_SSD
    

    これにより、インスタンスのすべての CREATE メソッドと UPDATE メソッドが、dataDiskTypeSSD であるという制約を満たすようになります。そのため、HDD を含むインスタンスはすべて拒否されます。

  2. 組織レベルでカスタム制約を設定します。

    gcloud org-policies set-custom-constraint dataDiskType.yaml
    
  3. 次のように enforceDataDiskType.yaml を作成します。

    name: projects/custom-constraints-cloudsql3/policies/custom.dataDiskType
    spec:
    rules:
    - enforce: true
    
  4. プロジェクト レベルでカスタム制約を適用します。

    gcloud org-policies set-policy enforceDataDiskType.yaml
    

次のステップ