カスタム制約を使用して関数リソースを管理する
組織の管理者は、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 にカスタム制約を適用することも必要になる場合があります。
始める前に
- 組織 ID を確認します。
必要なロール
- 組織のポリシーを作成または変更するには、アカウントに
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 リソースに適用します。コンソール
- Google Cloud コンソールで、[組織のポリシー] ページに移動します。
- プロジェクト選択ツールから、組織のポリシーを設定するプロジェクトを選択します。
- [組織のポリシー] ページのリストで制約を選択して、その制約の [ポリシーの詳細] ページを表示します。
- このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
- [ポリシーの編集] ページで、[Override parent's policy] を選択します。
- [ルールを追加] をクリックします。
- [適用] セクションで、この組織のポリシーの適用を有効にするかどうかを選択します。
- 省略可: タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグ付きの組織のポリシーの設定をご覧ください。
- カスタム制約の場合は、[変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートできます。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
- 組織のポリシーを完成させて適用するには、[ポリシーを設定] をクリックします。ポリシーが有効になるまでに最大 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 |
CREATE 、UPDATE |
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 |
関数がすべてのコンテナ イメージを特定のイメージ リポジトリに保存することを必須にする |
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 |
次のステップ
- 組織のポリシーの詳細について、組織のポリシー サービスの概要を確認する。
- 組織のポリシーの作成と管理の方法について学習する。
- 事前定義された組織のポリシーの制約の完全なリストを確認する。