組織管理者は、Cloud Run のサービスとジョブにカスタム制約を作成できます。組織のポリシーは、これらのカスタム制約をプロジェクト、フォルダ、組織レベルで適用します。
このページでは、サービスとジョブのカスタム制約を作成し、プロジェクト レベルで適用する方法について説明します。カスタム組織のポリシーの詳細については、カスタム組織のポリシーの作成と管理をご覧ください。
Cloud Run では、Cloud Run Admin API でほとんどのユーザー構成フィールドを使用して、任意の数のカスタム制約を記述できます。たとえば、サービスまたはジョブがリリース ステージをアルファ版またはベータ版に設定できないようにするカスタム制約を作成できます。
カスタム制約を適用するポリシーに違反するリクエストを送信すると、gcloud CLI と Cloud Run ログにエラー メッセージが表示されます。エラー メッセージには、制約 ID と違反したカスタム制約の説明が含まれます。
始める前に
- 組織のポリシーの作成と表示を行うには、組織のポリシー管理者のロール
roles/orgpolicy.policyAdmin
が必要です。必要なロールをご覧ください。
制限事項
- Cloud Run カスタム制約は、Cloud Run Admin API v1 フィールド仕様を使用して指定する必要があります。
- ラベルと最上位フィールドはサポートされていません。
一般的な制約をカスタマイズする
次の例は、gcloud CLI を使用して一般的なユースケースのカスタム制約を指定する方法を示しています。Google Cloud コンソールでの手順については、カスタム組織のポリシーの作成と管理をご覧ください。
- 上り(内向き)設定を制限する
- 最大メモリの上限を必須にする
- GA 以外のリリース ステージの設定を防ぐ
- Binary Authorization を必須にする
- すべてのコンテナでライフネス プローブを必須にする
- コンテナ イメージの接頭辞とポートを介してサイドカーを必須にする
上り(内向き)設定を制限する
新規または変更された Cloud Run サービスの上り(内向き)設定を制限するカスタム制約を作成して、プロジェクト レベルで適用します。
Google Cloud CLI を使用して、サービスを「内部」に設定することを必須にするカスタム制約を指定するには、次の操作を行います。
次の内容の新しいファイルを
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 に置き換えます。
次のコマンドを実行して、カスタム制約を追加します。
gcloud org-policies set-custom-constraint /ingressConstraint.yaml
次の内容の新しい
enforceIngressConstraint.yaml
ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。name: projects/PROJECT_ID/policies/ingressInternal spec: rules: - enforce: true
PROJECT_ID は、プロジェクトの ID に置き換えます。
次のコマンドを実行して、新しいポリシーを設定します。
gcloud org-policies set-policy /enforceIngressConstraint.yaml
最大メモリの上限を必須にする
新しい Cloud Run サービスまたは変更された Cloud Run サービスのすべてのコンテナに、特定の値より小さいメモリ上限を設定することを必須にします。
Google Cloud CLI を使用してサービスのコンテナにカスタムメモリの上限を適用するには、次の操作を行います。
次の内容の新しいファイルを
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: 設定するメモリ上限。
次のコマンドを実行して、カスタム制約を追加します。
gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
次の内容の新しい
enforceMemorylimitConstraint.yaml
ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。name: projects/PROJECT_ID/policies/custom.memoryLimit spec: rules: - enforce: true
PROJECT_ID は、プロジェクトの ID に置き換えます。
次のコマンドを実行して、新しいポリシーを設定します。
gcloud org-policies set-policy /enforceMemorylimitConstraint.yaml
GA 以外のリリース ステージの設定を防ぐ
Cloud Run のリリース ステージがデフォルトの GA からアルファ版またはベータ版に変更されないようにします。
リリース ステージが GA 以外のリリース ステージに設定されないようにするには、次の操作を行います。
次の内容の新しいファイルを
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 に置き換えます。
次のコマンドを実行して、カスタム制約を追加します。
gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
次の内容の新しい
enforceLaunchstageConstraint.yaml
ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。name: projects/PROJECT_ID/policies/launchStage spec: rules: - enforce: true
PROJECT_ID は、プロジェクトの ID に置き換えます。
次のコマンドを実行して、新しいポリシーを設定します。
gcloud org-policies set-policy /enforceLaunchstageConstraint.yaml
Binary Authorization を必須にする
Binary Authorization を default
に設定する必要があります。
Binary Authorization を default
に設定することを必須にするには、次の操作を行います。
次の内容の新しいファイルを
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 に置き換えます。
次のコマンドを実行して、カスタム制約を追加します。
gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
次の内容の新しい
enforceBinaryauthorizationConstraint.yaml
ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。name: projects/PROJECT_ID/policies/binaryAuthorization spec: rules: - enforce: true
PROJECT_ID は、プロジェクトの ID に置き換えます。
次のコマンドを実行して、新しいポリシーを設定します。
gcloud org-policies set-policy /enforceBinaryauthorizationConstraint.yaml
すべてのコンテナでライフネス プローブを必須にする
livenessProbe.initialDelaySeconds
フィールドに値を設定することを必須にして、コンテナごとにサービスのライブネス プローブを必須にします。
すべてのコンテナでライブネス プローブを必須にするには、次の操作を行います。
次の内容の新しいファイルを
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 に置き換えます。
次のコマンドを実行して、カスタム制約を追加します。
gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
次の内容の新しい
enforceLivenessprobeConstraint.yaml
ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。name: projects/PROJECT_ID/policies/livenessProbe spec: rules: - enforce: true
PROJECT_ID は、プロジェクトの ID に置き換えます。
次のコマンドを実行して、新しいポリシーを設定します。
gcloud org-policies set-policy /enforceLivenessprobeConstraint.yaml
コンテナ イメージの接頭辞とポートを介してサイドカーを必須にする
サービスに、指定された接頭辞で始まるイメージと指定された数のポートを使用するサイドカー コンテナが 1 つ以上存在することを必須にします。
コンテナが設定された接頭辞で始まり、PORT = 8081
を使用するように設定するには、次の操作を行います。
次の内容の新しいファイルを
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 に置き換えます。
次のコマンドを実行して、カスタム制約を追加します。
gcloud org-policies set-custom-constraint /requireSidecarConstraint.yaml
次の内容の新しい
enforceRequireSidecarConstraint.yaml
ファイルを作成して、前の手順で作成したカスタム制約を適用する新しいポリシーを指定します。name: projects/PROJECT_ID/policies/requireSidecar spec: rules: - enforce: true
PROJECT_ID は、プロジェクトの ID に置き換えます。
次のコマンドを実行して、新しいポリシーを設定します。
gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml