カスタムの組織のポリシー制約を使用して、インスタンスに一貫した構成と制限を適用する

このドキュメントでは、Memorystore for Valkey インスタンスのカスタム組織のポリシー制約を作成、設定、管理する方法について説明します。カスタムの組織のポリシーの概要については、カスタムの組織のポリシーをご覧ください。

Google Cloud 組織ポリシー サービスを使用すると、組織のリソースをプログラマティックに一元管理できます。組織のポリシー管理者は組織のポリシーを定義できます。これは、Google Cloud リソース階層内の Google Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。組織のポリシーは、組織レベル、フォルダレベル、プロジェクト レベルで適用できます。

組織のポリシー サービスは、Memorystore for Valkey を含むさまざまな Google Cloud サービスに対して事前に定義された制約を提供します。ただし、組織のポリシーで制限されている特定のフィールドをきめ細かく制御する必要がある場合は、カスタム制約を作成して、組織のポリシーでそれらのカスタム制約を使用できます。

カスタムの組織のポリシーの制約を実装すると、一貫した構成と制限を適用できます。これにより、インスタンスがセキュリティのベスト プラクティスと規制要件に準拠していることが検証されます。

カスタムの組織のポリシーを使用すると、Memorystore for Valkey リソースを許可または拒否できます。たとえば、カスタム制約が適用されているときにインスタンスの作成または更新を試み、インスタンスが制約に準拠していない場合、Memorystore for Valkey はインスタンスを作成または更新しません。また、カスタムの組織のポリシーを使用する組織またはフォルダに追加されたプロジェクトは、そのポリシーの制約を継承します。

ポリシーの継承

デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、 Google Cloud はそのフォルダ内のすべてのプロジェクトにそのポリシーを適用します。この動作の詳細と変更方法については、階層評価ルールをご覧ください。

始める前に

カスタム組織のポリシーの使用を開始する前に、このセクションの前提条件を満たしてください。

Google Cloud コンソール、Google Cloud CLI、API を使用する

Google Cloud コンソール、gcloud CLI、API を使用するには、次の操作を行います。

  1. Google Cloud コンソールのプロジェクト セレクタ ページで、 Google Cloud プロジェクトを選択または作成します。

    プロジェクトの選択に移動

  2. プロジェクトに対して課金が有効になっていることを確認します。プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. Google Cloud CLI(gcloud CLI)をインストールして初期化します。

    gcloud CLI をインストールした場合は、gcloud components update を実行して最新バージョンであることを確認します。Memorystore for Valkey の gcloud CLI コマンドにアクセスするには、少なくとも gcloud CLI バージョン 489.0.0 が必要です。

  4. Memorystore for Valkey API を有効にします。
    Memorystore for Valkey API
  5. 外部 ID プロバイダ(IdP)を使用している場合は、まずフェデレーション ID を使用して gcloud CLI にログインする必要があります。
  6. 組織の ID を確認します。

ロールを割り当てる

インスタンスにカスタム組織ポリシーを使用するには、 Google Cloud プロジェクトに次のいずれかの IAM ロールが必要です。

  • roles/memorystore.admin(Memorystore 管理者ロール)
  • roles/owner(オーナーのロール)
  • roles/editor(編集者のロール)

また、ユーザー アカウントまたはサービス アカウントに roles/orgpolicy.policyAdmin(組織ポリシー管理者)ロールと memorystore.instances.create 権限を付与する必要があります。ロールと権限の付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

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

カスタム制約を作成して、制約の対象となるリソース、メソッド、条件、アクションを定義します。これらは、組織のポリシーを適用するサービスに固有のものです。

カスタム制約の条件は、Common Expression Language(CEL)を使用して定義します。CEL を使用してカスタム制約で条件を作成する方法については、カスタム制約の作成と管理の CEL セクションをご覧ください。

カスタム制約を作成したら、組織のポリシーで使用できるように設定します。これは、Google Cloud コンソールまたは Google Cloud CLI を使用して行うことができます。

コンソール

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

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

  2. Google Cloud コンソールのメニューバーのメニューをクリックし、カスタム制約を作成して設定するプロジェクト、フォルダ、または組織を選択します。
  3. [組織のポリシー] ページで、[カスタム制約] をクリックします。
  4. [カスタム制約を作成] ページの [表示名] フィールドに、人が読める形式で制約の名前を入力します。この名前はエラー メッセージで使用されるほか、識別やデバッグにも使用できます。このフィールドには、最大 200 文字まで入力できます。

  5. [制約 ID] フィールドに、カスタム制約の ID を入力します。この制約は custom. で始まる必要があり、大文字、小文字、数字のみを含めることができます(例: custom.restrictFiveShardInstances)。この値の最大長は 70 文字です(接頭辞は含まれません)。例: organizations/123456789/customConstraints/custom.allowConstraint

  6. [説明] フィールドに、人が読める形式で制約の説明を入力します。この説明は、組織のポリシー違反時にエラー メッセージとして使用されます。ポリシー違反が発生した理由と、ポリシー違反を解決する方法に関する詳細を含めてください。このフィールドには、最大 2,000 文字まで入力できます。

  7. [リソースの種類] メニューから、制限するオブジェクトとフィールドを含む Memorystore for Valkey リソースの名前(URI ではない)を選択します。例: memorystore.googleapis.com/Instance
  8. [適用方法] メニューで、次のいずれかを選択します。
    • 作成時に適用: 制約は、Memorystore for Valkey インスタンスを作成するときにのみ適用されます。
    • 作成時と更新時に適用する: インスタンスの作成時と更新時に制約が適用されます。
  9. サポートされているサービス リソースの表現に対して記述された CEL 条件を定義するには、次の操作を行います。

    1. [条件] フィールドで、[編集] をクリックします。
    2. [条件を追加] ダイアログで、CEL 条件を入力します。例: resource.shardCount == 5

      この条件の最大長は 1,000 文字です。条件の書き込み先として使用できるリソースの詳細については、 サポートされているカスタム制約とオペレーションをご覧ください。

    3. [保存] をクリックします。
  10. [アクション] セクションで、条件が満たされた場合に実行するアクションを表す次のいずれかを選択します。
    • 許可: 条件が true と評価された場合、インスタンスを作成または更新するオペレーションが許可されます。条件に明記されているケースを除き、他のケースはすべてブロックされます。
    • 拒否: 条件が true と評価された場合、インスタンスを作成または更新するオペレーションがブロックされます。
  11. [YAML 構成] セクションで、カスタム制約の YAML 構成が正しいことを確認します。
  12. [制約を作成] をクリックします。

gcloud

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

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

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

    • ORGANIZATION_ID: 組織 ID(123456789 など)。
    • CONSTRAINT_NAME: カスタム制約の名前。この制約は custom. で始まる必要があり、大文字、小文字、数字のみを含めることができます(例: custom.restrictFiveShardInstances)。この値の最大長は、接頭辞を除いて 70 文字です。例: organizations/123456789/customConstraints/custom.allowConstraint
    • RESOURCE_NAME: 制限するオブジェクトとフィールドを含む Memorystore for Valkey リソースの名前(URI ではない)。例: memorystore.googleapis.com/Instance
    • CONDITION: サポートされているサービス リソースの表現に対して書き込まれる CEL 条件。例: "resource.shardCount == 5"

      このフィールドの最大長は 1,000 文字です。条件の書き込み先として使用できるリソースの詳細については、サポートされているカスタム制約とオペレーションをご覧ください。

    • ACTION: 条件が満たされている場合に実行するアクション。このアクションは、次のいずれかの値になります。
      • ALLOW: 条件が true と評価された場合、インスタンスを作成または更新するオペレーションが許可されます。条件に明記されているケースを除き、他のケースはすべてブロックされます。
      • DENY: 条件が true と評価された場合、インスタンスを作成または更新するオペレーションがブロックされます。
    • DISPLAY_NAME: 制約の名前。わかりやすい名前を入力してください。この名前はエラー メッセージで使用されるほか、識別やデバッグにも使用できます。このフィールドには、最大 200 文字まで入力できます。
    • DESCRIPTION: 人が読める形式の制約の説明。この説明は、組織のポリシー違反時にエラー メッセージとして使用されます。ポリシー違反が発生した理由と、ポリシー違反を解決する方法に関する詳細を含めてください。このフィールドには、最大 2,000 文字まで入力できます。
  2. カスタム制約を設定するには、gcloud org-policies set-custom-constraint コマンドを使用します。

    gcloud org-policies set-custom-constraint CONSTRAINT_PATH
    

    CONSTRAINT_PATH は、カスタム制約ファイルのフルパス(/home/user/customconstraint.yaml など)に置き換えます。

    カスタム制約を設定すると、 Google Cloud 組織のポリシーのリストに組織のポリシーとして表示されます。

  3. カスタム制約が存在することを確認するには、 gcloud org-policies list-custom-constraints コマンドを使用します。

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

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

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

コンソール

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

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

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

gcloud

  1. ブール値のルールを含む組織のポリシーを作成するには、制約を参照するポリシーの YAML ファイルを作成します。
  2. name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
    spec:
      rules:
      - enforce: true
    
    dryRunSpec:
      rules:
      - enforce: true

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

    • PROJECT_ID: 制約を適用するプロジェクト。
    • CONSTRAINT_NAME: カスタム制約に定義した名前。例: custom.restrictFiveShardInstances
  3. ドライラン モードで組織のポリシーを適用するには、dryRunSpec フラグを指定して次のコマンドを実行します。
  4. gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec

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

  5. ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、org-policies set-policy コマンドと spec フラグを使用して有効なポリシーを設定します。
  6. gcloud org-policies set-policy POLICY_PATH --update-mask=spec

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

カスタム制約をテストする

Memorystore for Valkey のカスタム組織のポリシー制約をテストするには、適用されたポリシーに準拠していないインスタンスを作成または更新してみます。

たとえば、インスタンスに 5 つのシャードがある場合、制約によってインスタンスの作成が制限されるとします。この制約をテストするには、インスタンスを作成してシャード数を 5 に設定します。インスタンスが制約に準拠していないため、Memorystore for Valkey はインスタンスを作成しません。

サポートされているカスタム制約とオペレーション

インスタンスを作成または更新する際に、次の Memorystore for Valkey カスタム制約フィールドを使用できます。

  • Memorystore for Valkey インスタンス
    • resource.name
    • resource.replicaCount
    • resource.shardCount
    • resource.nodeType
    • resource.engineVersion
    • resource.mode
    • resource.kmsKey
    • resource.simulateMaintenanceEvent
    • resource.engineConfigs
    • resource.persistenceConfig.mode
    • resource.persistenceConfig.rdbConfig.rdbSnapshotPeriod
    • resource.persistenceConfig.rdbConfig.rdbSnapshotStartTime
    • resource.persistenceConfig.aofConfig.appendFsync
    • resource.deletionProtectionEnabled
    • resource.maintenancePolicy.weeklyMaintenanceWindow.day
    • resource.maintenancePolicy.weeklyMaintenanceWindow.startTime
    • resource.automatedBackupConfig.automatedBackupMode
    • resource.automatedBackupConfig.fixedFrequencySchedule
    • resource.automatedBackupConfig.retention
    • resource.crossInstanceReplicationConfig.instanceRole
    • resource.crossInstanceReplicationConfig.primaryInstance
    • resource.crossInstanceReplicationConfig.secondaryInstances
    • resource.crossInstanceReplicationConfig.primaryInstance.instance
    • resource.crossInstanceReplicationConfig.secondaryInstances.instance
    • resource.zoneDistributionConfig.zone
    • resource.zoneDistributionConfig.mode
    • resource.transitEncryptionMode
    • resource.authorizationMode
    • resource.serverCaMode
    • resource.managedBackupSource.backup
    • resource.serverCaPool

カスタム制約の例

次の表に、インスタンスに 5 つのシャードがある場合に、ユーザーが Memorystore for Valkey インスタンスを作成または更新できないようにするカスタム制約の例を示します。

説明 制約の構文
5 つのシャードを持つインスタンスの作成または更新を制限する
    name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictFiveShardInstances
    resourceTypes:
    - memorystore.googleapis.com/Instance
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.shardCount == 5"
    actionType: DENY
    displayName: Restrict five-shard Memorystore for Valkey instances
    description: Prevent users from creating or updating instances that have
    five shards.

次のステップ