Google Cloud の組織のポリシーを使用すると、組織のリソースをプログラムで一元管理できます。組織のポリシー管理者は組織のポリシーを定義できます。組織のポリシーは、Google Cloud のリソース階層内の Google Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。組織のポリシーは、組織レベル、フォルダレベル、またはプロジェクト レベルで適用できます。
組織のポリシーは、さまざまな Google Cloud サービスに事前に定義された制約を提供します。ただし、組織のポリシーで制限されている特定のフィールドをきめ細かく制御する必要がある場合は、カスタム制約を作成して、カスタムの組織のポリシーでそれらのカスタム制約を使用することもできます。
利点
- コスト管理: カスタムの組織のポリシーを使用して、組織で使用できる VM インスタンスとディスクのサイズとタイプを制限します。VM インスタンスに使用するマシン ファミリーを制限することもできます
- セキュリティ、コンプライアンス、ガバナンス: カスタムの組織のポリシーを使用して、次のようにポリシーを適用できます。
- セキュリティ要件を適用するには、VM に特定のファイアウォール ポートルールを要求するようにします。
- ハードウェアの分離またはライセンスのコンプライアンスをサポートするために、特定のプロジェクトまたはフォルダ内のすべての VM を単一テナントノードで実行することを要求できます。
- 自動化スクリプトを管理するには、カスタムの組織のポリシーを使用して、ラベルが指定された式と一致することを確認します。
ポリシーの継承
デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、そのフォルダ内のすべてのプロジェクトにそのポリシーが適用されます。この動作の詳細と変更方法については、階層評価ルールをご覧ください。
料金
事前定義の組織のポリシーやカスタムの組織のポリシーを含む組織のポリシー サービスは料金なしで利用できます。
制限事項
- すべての Compute Engine リソースで、
CREATE
メソッドにカスタム制約が適用されます。 - Compute Engine SSL ポリシー リソースなど、一部の Compute Engine リソースでは、
UPDATE
メソッドにもカスタム制約が適用されます。
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
-
- 組織 ID を確認します。
必要なロール
Compute Engine リソースの組織のポリシーを管理するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
-
組織リソースに対する組織のポリシー管理者(
roles/orgpolicy.policyAdmin
) - 制約をテストする場合: プロジェクトに対する Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1
)
ロールの付与の詳細については、アクセス権の管理をご覧ください。
これらの事前定義ロールには、Compute Engine リソースの組織のポリシーを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
Compute Engine リソースの組織のポリシーを管理するには、次の権限が必要です。
-
orgpolicy.constraints.list
-
orgpolicy.policies.create
-
orgpolicy.policies.delete
-
orgpolicy.policies.list
-
orgpolicy.policies.update
-
orgpolicy.policy.get
-
orgpolicy.policy.set
-
制約をテストするには:
- プロジェクトに対する
compute.instances.create
- カスタム イメージを使用して VM を作成する: イメージに対する
compute.images.useReadOnly
- スナップショットを使用して VM を作成する: スナップショットに対する
compute.snapshots.useReadOnly
- インスタンス テンプレートを使用して VM を作成する: インスタンス テンプレートに対する
compute.instanceTemplates.useReadOnly
- レガシー ネットワークを VM に割り当てる: プロジェクトに対する
compute.networks.use
- VM の静的 IP アドレスを指定する: プロジェクトに対する
compute.addresses.use
- レガシー ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトに対する
compute.networks.useExternalIp
- VM のサブネットを指定する: プロジェクトまたは選択したサブネットに対する
compute.subnetworks.use
- VPC ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトまたは選択したサブネットに対する
compute.subnetworks.useExternalIp
- VM の VM インスタンス メタデータを設定する: プロジェクトに対する
compute.instances.setMetadata
- VM にタグを設定する: VM に対する
compute.instances.setTags
- VM にラベルを設定する: VM に対する
compute.instances.setLabels
- VM が使用するサービス アカウントを設定する: VM に対する
compute.instances.setServiceAccount
- VM に新しいディスクを作成する: プロジェクトに対する
compute.disks.create
- 既存のディスクを読み取り専用モードまたは読み取り / 書き込みモードでアタッチする: ディスクに対する
compute.disks.use
- 既存のディスクを読み取り専用モードでアタッチする: ディスクに対する
compute.disks.useReadOnly
- プロジェクトに対する
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
Compute Engine でサポートされているリソース
Compute Engine では、次のリソースとフィールドにカスタム制約を設定できます。
- Persistent Disk:
compute.googleapis.com/Disk
- Persistent Disk のタイプ:
resource.type
- Persistent Disk のサイズ:
resource.sizeGb
- Persistent Disk のタイプ:
- イメージ:
compute.googleapis.com/Image
- 元のディスクソース:
resource.rawDisk.source
- 元のディスクソース:
- VM インスタンス:
compute.googleapis.com/Instance
- 高度なマシン機能:
resource.advancedMachineFeatures.enableNestedVirtualization
resource.advancedMachineFeatures.threadsPerCore
- IP 転送:
resource.canIpForward
- 削除からの保護:
resource.deletionProtection
- ラベル数:
resource.labels
- マシンタイプ:
resource.machineType
- 最小 CPU プラットフォーム:
resource.minCpuPlatform
- ネットワーク インターフェース:
resource.networkInterfaces.network
resource.networkInterfaces.subnetwork
- ノードのアフィニティ:
resource.scheduling.nodeAffinities.key
resource.scheduling.nodeAffinities.operator
resource.scheduling.nodeAffinities.values
- 限定公開の Google アクセス(IPv6):
resource.privateIpv6GoogleAccess
- 高度なマシン機能:
- SSL ポリシー:
compute.googleapis.com/SslPolicy
resource.profile
resource.minTlsVersion
resource.customFeatures
カスタム制約を設定する
カスタム制約は、組織のポリシーを適用しているサービスでサポートされるリソース、メソッド、条件、アクションによって定義されます。カスタム制約の条件は、Common Expression Language(CEL)を使用して定義されます。CEL を使用してカスタム制約で条件を作成する方法については、カスタム組織のポリシーの作成と管理の CEL セクションをご覧ください。
カスタム制約を作成し、Google Cloud コンソールまたは gcloud CLI を使用して組織のポリシーで使用するように設定できます。
コンソール
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
ページの上部にあるプロジェクト選択ツールを選択します。
プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。
[
カスタム制約] をクリックします。[表示名] ボックスに制約の名前を入力します。わかりやすい名前を入力してください。このフィールドの最大長は 200 文字です。エラー メッセージで漏えいする可能性があるため、制約名には PII や機密データを使用しないでください。
[制約 ID] ボックスに、新しいカスタム制約の名前を入力します。カスタム制約は
custom.
で始まる必要があり、大文字、小文字、数字のみを含めることができます(例:custom.createOnlyN2DVMs
)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例:organizations/123456789/customConstraints/custom.
)。[説明] ボックスに、ポリシー違反が発生したときにエラー メッセージとして表示される制約の説明を入力します。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。
[リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む Google Cloud REST リソースの名前を選択します。例:
compute.googleapis.com/Instance
[適用方法] で、REST
CREATE
メソッドに制約を適用するかどうかを選択します。条件を定義するには、[
条件を編集] をクリックします。[条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します(例:
)。このフィールドの最大長は 1,000 文字です。resource.machineType.contains('/machineTypes/n2d')
[保存] をクリックします。
[アクション] で、前述の条件を満たしている場合に、評価された方法を許可するか拒否するかを選択します。
[制約を作成] をクリックします。
各フィールドに値を入力すると、このカスタム制約の YAML 構成が右側に表示されます。
gcloud
gcloud CLI を使用してカスタム制約を作成するには、カスタム制約の YAML ファイルを作成します。
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resource_types: compute.googleapis.com/RESOURCE_NAME
method_types: CREATE
condition: CONDITION
action_type: ACTION
display_name: DISPLAY_NAME
description: DESCRIPTION
次のように置き換えます。
ORGANIZATION_ID
: 組織 ID(123456789
など)。CONSTRAINT_NAME
: 新しいカスタム制約に付ける名前。カスタム制約はcustom.
で始まる必要があり、大文字、小文字、数字のみを含めることができます。例:custom.createOnlyN2DVMs
。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例:organizations/123456789/customConstraints/custom.
)。RESOURCE_NAME
: 制限するオブジェクトとフィールドを含む Compute Engine API REST リソースの名前(URI ではない)。例:Instance
CONDITION
: サポート対象のサービス リソースの表現に対して書き込まれる CEL 条件。このフィールドの最大長は 1,000 文字です。条件の書き込み先として使用できるリソースの詳細については、サポート対象のリソースをご覧ください。例:"resource.machineType.contains('/machineTypes/n2d')"
。ACTION
:condition
が満たされている場合に実行するアクション。ALLOW
またはDENY
になります。DISPLAY_NAME
: 制約の名前。わかりやすい名前を入力してください。このフィールドの最大長は 200 文字です。DESCRIPTION
: ポリシー違反時にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。
カスタム制約の作成方法の詳細については、カスタム組織のポリシーの作成と管理をご覧ください。
Google Cloud CLI を使用して新しいカスタム制約を作成したら、組織内の組織のポリシーで使用できるように設定する必要があります。カスタム制約を設定するには、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.createOnlyN2DVMs
制約を含む組織のポリシーを適用するには、次のコマンドを実行します。
gcloud org-policies set-policy POLICY_PATH
POLICY_PATH
は、組織のポリシーの YAML ファイルのパスに置き換えます。ポリシーが有効になるまでに最長 15 分かかります。
例: VM による N2D マシンタイプの使用を制限する制約を作成する
gcloud
次の情報を含む
onlyN2DVMs.yaml
制約ファイルを作成します。name: organizations/ORGANIZATION_ID/customConstraints/custom.createOnlyN2DVMs resource_types: compute.googleapis.com/Instance condition: "resource.machineType.contains('/machineTypes/n2d')" action_type: ALLOW method_types: CREATE display_name: Only N2D VMs allowed description: Restrict all VMs created to only use N2D machine types.
カスタム制約を設定します。
gcloud org-policies set-custom-constraint onlyN2DVMs.yaml
次の情報を含む
onlyN2DVMs-policy.yaml
ポリシー ファイルを作成します。この例では、この制約をプロジェクト レベルで適用しますが、組織レベルまたはフォルダレベルで設定することもできます。PROJECT_ID
は、実際のプロジェクト ID に置き換えます。name: projects/PROJECT_ID/policies/custom.createOnlyN2DVMs spec: rules: – enforce: true
ポリシーを適用します。
gcloud org-policies set-policy onlyN2DVMs-policy.yaml
N2D マシン以外のマシンタイプを使用する VM を作成して、制約をテストします。
gcloud compute instances create my-test-instance \ --project=PROJECT_ID \ --zone=us-central1-c \ --machine-type=e2-medium
出力は次のようになります。
ERROR: (gcloud.compute.instances.create) Could not fetch resource: – Operation denied by custom org policies: [customConstraints/
custom.createOnlyN2DVMs
]: Restrict all VMs created to only use N2D machine types.
例: カスタム制約を使用して TLS 機能を制限する
カスタム制約を使用してサポートされているロードバランサの TLS 機能を制限するには、組織で事前定義された constraints/compute.requireSslPolicy
制約を使用するポリシーを定義します。ポリシーを定義したら、次の手順でカスタム制約を設定して使用します。
事前定義された制約の YAML ファイルを作成します。
name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_NAME resource_types: compute.googleapis.com/sslPolicy methodTypes: - CREATE - UPDATE condition: resource.FIELD_NAME == VALUE action_type: ACTION display_name: DISPLAY_NAME description: DESCRIPTION
次の例では、最小 TLS バージョンを 1.2 に制限しています。
name: organizations/012345678901/customConstraints/custom.restrictLbTlsVersion resource_types: compute.googleapis.com/sslPolicy methodTypes: - CREATE - UPDATE condition: resource.minTlsVersion == "TLS_1_2" action_type: ALLOW display_name: Restrict Load Balancing TLS version to 1.2 description: Only allow SSL policies to be created or updated if the minimum TLS version is 1.2 where this custom constraint is enforced.
カスタム制約を組織に追加します。
gcloud org-policies set-custom-constraint PATH_TO_FILE
組織にカスタム制約が存在することを確認します。
gcloud org-policies list-custom-constraints \ --organization=ORGANIZATION_ID
制約のポリシー ファイルを作成します。
name: projects/PROJECT_ID/policies/custom.CONSTRAINT_NAME spec: rules: – enforce: true
次のように置き換えます。
PROJECT_ID
: 実際の Google Cloud プロジェクト IDCONSTRAINT_NAME
: 制約名
ポリシーを適用します。
gcloud org-policies set-policy PATH_TO_POLICY_FILE
PATH_TO_POLICY_FILE
は、ポリシー ファイルの完全修飾パスに置き換えます。最小 TLS バージョンを 1.2 に制限する YAML ファイルを作成したと仮定します。
minTlsVersion
をTLS_1_0
に設定して SSL ポリシーを作成して、制約をテストします。gcloud compute ssl-policies create SSL_POLICY_NAME \ --min-tls-version=1.0 \ --project=PROJECT_ID
出力は次のようになります。
ERROR: (gcloud.compute.ssl-policies.update) HTTPError 412: Operation denied by custom org policy: [customConstraints/custom. restrictLbTlsVersion] : Only allow SSL policy resources to be created or updated if the minimum TLS version is 1.2 where this custom constraint is enforced.
一般的なユースケースのカスタム制約の例
以下のセクションでは、役立つ可能性のあるカスタム制約の構文について説明します。
ディスク
ユースケース | 構文 |
---|---|
Persistent Disk のタイプは「エクストリーム永続ディスク(pd-extreme )」である必要があります。 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.createDisksPDExtremeOnly resource_types: compute.googleapis.com/Disk condition: "resource.type.contains('pd-extreme')" action_type: ALLOW method_types: CREATE display_name: Create pd-extreme disks only description: Only the extreme persistent disk type is allowed to be created. |
ディスクサイズは 250 GB 以下にする必要があります | name: organizations/ORGANIZATION_ID/customConstraints/custom.createDisksLessThan250GB resource_types: compute.googleapis.com/Disk condition: "resource.sizeGb <= 250" action_type: ALLOW method_types: CREATE display_name: Disks size maximum is 250 GB description: Restrict the boot disk size to 250 GB or less for all VMs. |
イメージ
ユースケース | 構文 |
---|---|
ソースイメージは Cloud Storage test_bucket からのみにする必要があります |
name: organizations/ORGANIZATION_ID/customConstraints/custom.createDisksfromStoragebucket resource_types: compute.googleapis.com/Image condition: "resource.rawDisk.source.contains('storage.googleapis.com/test_bucket/')" action_type: ALLOW method_types: CREATE display_name: Source image must be from Cloud Storage test_bucket only description: Source images used in this project must be imported from the Cloud Storage test_bucket. |
VM インスタンス
ユースケース | 構文 |
---|---|
VM には、キーが cost center に設定されたラベルが必要です |
name: organizations/ORGANIZATION_ID/customConstraints/custom.createVMWithLabel resource_types: compute.googleapis.com/Instance condition: "'cost_center' in resource.labels" action_type: ALLOW method_types: CREATE display_name: 'cost_center' label required description: Requires that all VMs created must have the a 'cost_center' label that can be used for tracking and billing purposes. |
VM には、キーが cost center 、値が eCommerce に設定されたラベルが必要です。 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.createECommerceVMOnly resource_types: compute.googleapis.com/Instance condition: "'cost_center' in resource.labels and resource.labels['cost_center'] == 'eCommerce'" action_type: ALLOW method_types: CREATE display_name: Label (cost_center/eCommerce) required description: Label required and Key/value must be cost_center/eCommerce. |
VM はマシンタイプ N2D を使用する必要があります | name: organizations/ORGANIZATION_ID/customConstraints/custom.createOnlyN2DVMs resource_types: compute.googleapis.com/Instance condition: "resource.machineType.contains('/machineTypes/n2d')" action_type: ALLOW method_types: CREATE display_name: Only N2D VMs allowed description: Restrict all VMs created to only use N2D machine types. |
VM はマシンタイプ e2-highmem-8 を使用する必要があります |
name: organizations/ORGANIZATION_ID/customConstraints/custom.createOnlyE2highmem8 resource_types: compute.googleapis.com/Instance condition: "resource.machineType.endsWith('-e2-highmem-8')" action_type: ALLOW method_types: CREATE display_name: Only "e2-highmem-8" VMs allowed description: Restrict all VMs created to only use the E2 high-memory machine types that have 8 vCPUs. |
VM がノードグループ「foo」でスケジュールされるようにします | name: organizations/ORGANIZATION_ID/customConstraints/custom.createOnlySTVM resource_types: compute.googleapis.com/Instance condition: "resource.scheduling.nodeAffinities.exists(n, n.key == 'foo')" action_type: ALLOW method_types: CREATE display_name: Only VMs scheduled on node group "foo" allowed description: Restrict all VMs created to use the node group "foo". |
次のステップ
- 組織のポリシーの詳細について、組織のポリシー サービスの概要を確認する。
- 組織のポリシーの作成と管理の方法について学習する。
- 事前定義された組織のポリシーの制約の完全なリストを確認する。