カスタム制約を使用して関数リソースを管理する

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

組織のポリシーは、さまざまな Google Cloud サービスに事前に定義された制約を提供します。ただし、組織のポリシーで制限されている特定のフィールドをカスタマイズ可能な方法でより詳細に制御する必要がある場合は、カスタムの組織のポリシーを作成することもできます。

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

メリット

  • コスト管理: 組織のポリシーを使用して、組織で使用できる VM インスタンスとディスクのサイズとタイプを制限します。VM インスタンスに使用するマシン ファミリーを制限することもできます。
  • セキュリティ、コンプライアンス、ガバナンス:
    • セキュリティ要件を適用するには、VM に特定のファイアウォール ポートルールを要求するようにします。
    • ハードウェアの分離またはライセンスのコンプライアンスをサポートするために、特定のプロジェクトまたはフォルダ内のすべての VM を単一テナントノードで実行することを要求できます。
    • 自動化スクリプトを管理するには、カスタム組織のポリシーを使用して、ラベルが必要な式と一致することを確認します。

ポリシーの継承

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

料金

事前定義の組織のポリシーやカスタムの組織のポリシーを含む組織のポリシー サービスは料金なしで利用できます。

制限事項

カスタム組織のポリシーには次の制限が適用されます。

  • 一括挿入 API を使用する場合、VM インスタンス名には適用されません。
  • Compute Engine リソースの CREATE メソッドにのみ適用されます。
  • Cloud Functions v2 API でのみ使用できます。Cloud Run functions(第 1 世代)には適用できません。
  • Cloud Functions v2 API を使用する場合にのみ関数を保護します。Cloud Run functions は、Cloud Run API からも変更できます。追加の保護として、Cloud Run にカスタム制約を適用することも必要になる場合があります。

始める前に

必要なロール

  • 組織のポリシーを作成または変更するには、アカウントに roles/orgpolicy.policyAdmin ロールが必要です。

カスタム制約を作成する

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

最大インスタンス数が 150 を超えるすべての関数の作成を拒否するカスタム制約を指定するには、次の操作を行います。

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

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - cloudfunctions.googleapis.com/Function
    methodTypes: 
    - CREATE
    - UPDATE
    condition: resource.serviceConfig.maxInstanceCount > 150
    actionType: DENY
    displayName: Deny functions with max instance count greater than 150
    description: Functions cannot be created with a max instance count greater than 150
    

ORGANIZATION_ID は、組織 ID(123456789 など)に置き換えます。

詳細については、カスタム制約の定義をご覧ください。

カスタム制約を設定する

新しいカスタム制約の YAML ファイルを作成したら、組織内の組織のポリシーで使用できるように設定する必要があります。カスタム制約を設定するには、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 リソースに適用します。

コンソール

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

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

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

gcloud

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

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

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

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

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

    gcloud org-policies set-policy POLICY_PATH
    

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

カスタム組織のポリシーをテストする

最大インスタンス数が 151 の関数を作成するには、次のコマンドを実行します。

gcloud functions deploy FUNCTION_NAME \
  ...
  --max-instances 151

次の出力が表示されます。

 Operation denied by custom org policy on resource: ["customConstraints/custom.cloudFunctionsMaxInstanceLimit": "Cloud Functions cannot be created with a max instance count greater than 150."]

Cloud Run functions でサポートされているリソースとオペレーション

リソースの種類 メソッドタイプ API リファレンス
cloudfunctions.googleapis.com/Function CREATEUPDATE projects.locations.functions

一般的な組織のポリシーの例

次の表に、実際に役に立つ可能性のあるカスタム組織のポリシーの構文を示します。

説明 制約の構文
特定の言語で関数を作成できないようにする
    name: organizations/ORGANIZATION_IDcustomConstraints/custom.cloudFunctionRuntimeBlock
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.runtime == "python312"
    action_type: DENY
    display_name: Deny functions using Python 3.12
    description: Functions cannot be created with Python 3.12 as the language runtime
関数が特定のワーカープールを使用することを必須にする
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsWorkerPool
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.workerPool == "WORKER_POOL"
    action_type: DENY
    display_name: Require worker pool
    description: Functions must use a worker pool 
WORKER_POOL は、Cloud Build ワーカープールの名前に置き換えます。
関数がすべてのコンテナ イメージを特定のイメージ リポジトリに保存することを必須にする
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsRepository
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.dockerRepository.startsWith("REPO_PATH")
    action_type: DENY
    display_name: Image repository constraint
    description: Functions must push images to a central image repository under REPO_PATH
REPO_PATH を、すべての関数でコンテナ イメージを保存するイメージ リポジトリの URL の URI に置き換えます。

次のステップ