プロジェクトにカスタム制約を適用する

組織管理者は、Cloud Run のサービスとジョブにカスタム制約を作成できます。組織のポリシーは、これらのカスタム制約をプロジェクト、フォルダ、組織レベルで適用します。

このページでは、サービスとジョブのカスタム制約を作成し、プロジェクト レベルで適用する方法について説明します。カスタム組織のポリシーの詳細については、カスタム組織のポリシーの作成と管理をご覧ください。

Cloud Run では、Cloud Run Admin API でほとんどのユーザー構成フィールドを使用して、任意の数のカスタム制約を記述できます。たとえば、サービスまたはジョブがリリース ステージをアルファ版またはベータ版に設定できないようにするカスタム制約を作成できます。

カスタム制約を適用するポリシーに違反するリクエストを送信すると、gcloud CLI と Cloud Run ログにエラー メッセージが表示されます。エラー メッセージには、制約 ID と違反したカスタム制約の説明が含まれます。

始める前に

  • 組織のポリシーの作成と表示を行うには、組織のポリシー管理者のロール roles/orgpolicy.policyAdmin が必要です。必要なロールをご覧ください。

制限事項

一般的な制約をカスタマイズする

次の例は、gcloud CLI を使用して一般的なユースケースのカスタム制約を指定する方法を示しています。Google Cloud コンソールでの手順については、カスタム組織のポリシーの作成と管理をご覧ください。

上り(内向き)設定を制限する

新規または変更された Cloud Run サービスの上り(内向き)設定を制限するカスタム制約を作成して、プロジェクト レベルで適用します。

Google Cloud CLI を使用して、サービスを「内部」に設定することを必須にするカスタム制約を指定するには、次の操作を行います。

  1. 次の内容の新しいファイルを ingressConstraint.yaml という名前で作成します。

      name: organizations/ORGANIZATION_ID/customConstraints/custom.ingressInternal
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "'run.googleapis.com/ingress' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/ingress'] == 'internal'"
      actionType: ALLOW
      displayName: IngressInternal
      description: Require ingress to be set to internal

    ORGANIZATION_ID は組織の ID に置き換えます。

  2. 次のコマンドを実行して、カスタム制約を追加します。

    gcloud org-policies set-custom-constraint /ingressConstraint.yaml
  3. 次の内容の新しい enforceIngressConstraint.yaml ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。

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

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  4. 次のコマンドを実行して、新しいポリシーを設定します。

    gcloud org-policies set-policy /enforceIngressConstraint.yaml

最大メモリの上限を必須にする

新しい Cloud Run サービスまたは変更された Cloud Run サービスのすべてのコンテナに、特定の値より小さいメモリ上限を設定することを必須にします。

Google Cloud CLI を使用してサービスのコンテナにカスタムメモリの上限を適用するには、次の操作を行います。

  1. 次の内容の新しいファイルを memorylimitConstraint.yaml という名前で作成します。

      name: organizations/ORGANIZATION_ID/customConstraints/custom.memoryLimit
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "resource.spec.template.spec.containers.all(container, 'memory' in container.resources.limits && container.resources.limits['memory'] <= 'MEMORY_LIMIT')"
      actionType: ALLOW
      displayName: memoryLimitCap
      description: Require the container memory limit to be set to <= MEMORY_LIMIT

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

    • ORGANIZATION_ID: 組織の ID。
    • MEMORY_LIMIT: 設定するメモリ上限。
  2. 次のコマンドを実行して、カスタム制約を追加します。

    gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
  3. 次の内容の新しい enforceMemorylimitConstraint.yaml ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。

      name: projects/PROJECT_ID/policies/custom.memoryLimit
      spec:
        rules:
          - enforce: true

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  4. 次のコマンドを実行して、新しいポリシーを設定します。

    gcloud org-policies set-policy /enforceMemorylimitConstraint.yaml

GA 以外のリリース ステージの設定を防ぐ

Cloud Run のリリース ステージがデフォルトの GA からアルファ版またはベータ版に変更されないようにします。

リリース ステージが GA 以外のリリース ステージに設定されないようにするには、次の操作を行います。

  1. 次の内容の新しいファイルを launchstageConstraint.yaml という名前で作成します。

      name: organizations/ORGANIZATION_ID/customConstraints/custom.launchStage
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "!('run.googleapis.com/launch-stage' in resource.metadata.annotations)"
      actionType: ALLOW
      displayName: launchStage
      description: Only allow unset launch stage (default is GA).

    ORGANIZATION_ID は組織の ID に置き換えます。

  2. 次のコマンドを実行して、カスタム制約を追加します。

    gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
  3. 次の内容の新しい enforceLaunchstageConstraint.yaml ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。

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

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  4. 次のコマンドを実行して、新しいポリシーを設定します。

    gcloud org-policies set-policy /enforceLaunchstageConstraint.yaml

Binary Authorization を必須にする

Binary Authorizationdefault に設定する必要があります。

Binary Authorization を default に設定することを必須にするには、次の操作を行います。

  1. 次の内容の新しいファイルを binaryauthorizationConstraint.yaml という名前で作成します。

      name: organizations/ORGANIZATION_ID/customConstraints/custom.binaryAuthorization
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "'run.googleapis.com/binary-authorization' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/binary-authorization'] == 'default'"
      actionType: ALLOW
      displayName: binaryAuthorization
      description: Require binaryAuthorization to be set to default.

    ORGANIZATION_ID は組織の ID に置き換えます。

  2. 次のコマンドを実行して、カスタム制約を追加します。

    gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
  3. 次の内容の新しい enforceBinaryauthorizationConstraint.yaml ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。

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

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  4. 次のコマンドを実行して、新しいポリシーを設定します。

    gcloud org-policies set-policy /enforceBinaryauthorizationConstraint.yaml

すべてのコンテナでライフネス プローブを必須にする

livenessProbe.initialDelaySeconds フィールドに値を設定することを必須にして、コンテナごとにサービスのライブネス プローブを必須にします。

すべてのコンテナでライブネス プローブを必須にするには、次の操作を行います。

  1. 次の内容の新しいファイルを livenessprobeConstraint.yaml という名前で作成します。

      name: organizations/ORGANIZATION_ID/customConstraints/custom.livenessProbe
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "resource.spec.template.spec.containers.all(container, has(container.livenessProbe.initialDelaySeconds))"
      actionType: ALLOW
      displayName: livenessProbe
      description: Require all containers to have a liveness probe configured with initialDelaySeconds.

    ORGANIZATION_ID は組織の ID に置き換えます。

  2. 次のコマンドを実行して、カスタム制約を追加します。

    gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
  3. 次の内容の新しい enforceLivenessprobeConstraint.yaml ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。

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

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  4. 次のコマンドを実行して、新しいポリシーを設定します。

    gcloud org-policies set-policy /enforceLivenessprobeConstraint.yaml

コンテナ イメージの接頭辞とポートを介してサイドカーを必須にする

サービスに、指定された接頭辞で始まるイメージと指定された数のポートを使用するサイドカー コンテナが 1 つ以上存在することを必須にします。

コンテナが設定された接頭辞で始まり、PORT = 8081 を使用するように設定するには、次の操作を行います。

  1. 次の内容の新しいファイルを requireSidecarConstraint.yaml という名前で作成します。

      name: organizations/ORGANIZATION_ID/customConstraints/custom.requireSidecar
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "resource.spec.template.spec.containers.exists(container, container.image.startsWith('us-docker.pkg.dev/cloud-ops-agents-artifacts/cloud-run-gmp-sidecar/') && container.ports.exists(port, port.containerPort == 8081))"
      actionType: ALLOW
      displayName: requireSidecar
      description: Require at least one container with an image that starts with "us-docker.pkg.dev/cloud-ops-agents-artifacts/cloud-run-gmp-sidecar/" and uses port 8081

    ORGANIZATION_ID は組織の ID に置き換えます。

  2. 次のコマンドを実行して、カスタム制約を追加します。

      gcloud org-policies set-custom-constraint /requireSidecarConstraint.yaml
      

  3. 次の内容の新しい enforceRequireSidecarConstraint.yaml ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。

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

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  4. 次のコマンドを実行して、新しいポリシーを設定します。

    gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml