Google Cloud の組織のポリシーを使用すると、組織のリソースをプログラムで一元管理できます。組織ポリシー管理者は組織ポリシーを定義できます。組織ポリシーは、Google Cloud のリソース階層内の Google Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。組織のポリシーは、組織レベル、フォルダレベル、またはプロジェクト レベルで適用できます。
組織のポリシーは、さまざまな Google Cloud サービスに事前に定義された制約を提供します。ただし、組織のポリシーで制限されている特定のフィールドをきめ細かくカスタマイズ可能な制御を行なう場合は、カスタム制約を作成して、カスタムの組織のポリシーでそれらを使用することもできます。
利点
- コスト管理: カスタムの組織のポリシーを使用して、組織で使用できる VM インスタンスとディスクのサイズとタイプを制限します。VM インスタンスに使用するマシン ファミリーを制限することもできます
- セキュリティ、コンプライアンス、ガバナンス: カスタムの組織のポリシーを使用して、次のようにポリシーを適用できます。
- セキュリティ要件を適用するには、VM に特定のファイアウォール ポートルールを要求するようにします。
- ハードウェアの分離またはライセンスのコンプライアンスをサポートするために、特定のプロジェクトまたはフォルダ内のすべての VM を単一テナントノードで実行することを要求できます。
- 自動化スクリプトを管理するには、カスタムの組織のポリシーを使用して、ラベルが指定された式と一致することを確認します。
ポリシーの継承
デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、Google Cloud はそのフォルダ内のすべてのプロジェクトにそのポリシーを適用します。この動作の詳細と変更方法については、階層評価ルールをご覧ください。
料金
事前定義の組織のポリシーやカスタムの組織のポリシーを含む組織のポリシー サービスは料金なしで利用できます。
制限事項
- すべての Compute Engine リソースで、
CREATE
メソッドにカスタム制約が適用されます。 - Compute Engine SSL ポリシー リソースなど、一部の Compute Engine リソースでは、
UPDATE
メソッドにもカスタム制約が適用されます。
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- 組織 ID を確認します。
-
組織リソースに対する組織のポリシー管理者(
roles/orgpolicy.policyAdmin
) -
制約をテストする場合: プロジェクトに対する Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1
) -
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
- プロジェクトに対する
- Persistent Disk:
compute.googleapis.com/Disk
- Persistent Disk のタイプ:
resource.type
- Persistent Disk のサイズ:
resource.sizeGb
- Persistent Disk のライセンス:
resource.licenses
- Persistent Disk のライセンス コード:
resource.licenseCodes
- Persistent Disk Confidential Computing:
resource.enableConfidentialCompute
- Persistent Disk のタイプ:
- イメージ:
compute.googleapis.com/Image
- 元のディスクソース:
resource.rawDisk.source
- 元のディスクソース:
- VM インスタンス:
compute.googleapis.com/Instance
- 高度なマシン機能:
resource.advancedMachineFeatures.enableNestedVirtualization
resource.advancedMachineFeatures.threadsPerCore
- Confidential VM インスタンスの構成:
resource.confidentialInstanceConfig.enableConfidentialCompute
resource.confidentialInstanceConfig.confidentialInstanceType
- IP 転送:
resource.canIpForward
- 削除からの保護:
resource.deletionProtection
- ラベル数:
resource.labels
- アクセラレータ:
resource.guestAccelerators.acceleratorType
resource.guestAccelerators.acceleratorCount
- マシンタイプ:
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
- 高度なマシン機能:
- サポートされているその他のコンピューティング リソース:
- Cloud Load Balancing で使用される Compute Engine リソース(バックエンド サービス、バックエンド バケット、転送ルール、ヘルスチェック、SSL ポリシー、ターゲット プロキシ、URL マップなど)の詳細については、カスタム制約を使用して Cloud Load Balancing リソースを管理するをご覧ください。
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
ページの上部にあるプロジェクト選択ツールを選択します。
プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。
[
カスタム制約] をクリックします。[表示名] ボックスに制約の名前を入力します。わかりやすい名前を入力してください。このフィールドの最大長は 200 文字です。 エラー メッセージで漏えいする可能性があるため、制約名には PII や機密データを使用しないでください。
[制約 ID] ボックスに、新しいカスタム制約の名前を入力します。カスタム制約は
custom.
で始まる必要があり、大文字、小文字、数字のみを含めることができます(例:custom.createOnlyN2DVMs
)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例:organizations/123456789/customConstraints/custom.
)。[説明] ボックスに、ポリシー違反が発生したときにエラー メッセージとして表示される制約の説明を入力します。わかりやすい説明を入力してください。このフィールドの最大長は 2000 文字です。
[リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む Google Cloud REST リソースの名前を選択します。例:
compute.googleapis.com/Instance
[適用方法] で、REST
CREATE
メソッドに制約を適用するかどうかを選択します。条件を定義するには、[
条件を編集] をクリックします。[条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します(例:
)。このフィールドの最大長は 1,000 文字です。resource.machineType.contains('/machineTypes/n2d')
[保存] をクリックします。
[アクション] で、前述の条件を満たしている場合に、評価された方法を許可するか拒否するかを選択します。
[制約を作成] をクリックします。
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 コンソールで、[組織のポリシー] ページに移動します。
- プロジェクト選択ツールから、組織のポリシーを設定するプロジェクトを選択します。
- [組織のポリシー] ページのリストで制約を選択して、その制約の [ポリシーの詳細] ページを表示します。
- このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
- [ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。
- [ルールの追加] をクリックします。
- [適用] セクションで、この組織のポリシーの適用を有効にするかどうかを選択します。
- 省略可: タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグ付きの組織のポリシーの設定をご覧ください。
- カスタム制約の場合は、[変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートできます。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
- 組織のポリシーを完成させて適用するには、[ポリシーを設定] をクリックします。ポリシーが有効になるまでに最大 15 分かかります。
-
PROJECT_ID
: 制約を適用するプロジェクト。 -
CONSTRAINT_NAME
: カスタム制約に定義した名前。例:
。custom.createOnlyN2DVMs
次の情報を含む
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.- 組織のポリシーの詳細について、組織のポリシー サービスの概要を確認する。
- 組織のポリシーの作成と管理の方法について学習する。
- 事前定義された組織のポリシーの制約の完全なリストを確認する。
必要なロール
Compute Engine リソースの組織のポリシーを管理するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、Compute Engine リソースの組織のポリシーを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
Compute Engine リソースの組織のポリシーを管理するには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
Compute Engine でサポートされているリソース
Compute Engine では、次のリソースとフィールドにカスタム制約を設定できます。
カスタム制約を設定する
カスタム制約は、組織のポリシーを適用しているサービスでサポートされるリソース、メソッド、条件、アクションによって定義されます。カスタム制約の条件は、Common Expression Language(CEL)を使用して定義されます。CEL を使用してカスタム制約で条件を作成する方法については、カスタム組織のポリシーの作成と管理の CEL セクションをご覧ください。
カスタム制約を作成し、Google Cloud コンソールまたは gcloud CLI を使用して組織のポリシーで使用するように設定できます。
コンソール
各フィールドに値を入力すると、このカスタム制約の 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
次のように置き換えます。
カスタム制約の作成方法の詳細については、カスタム組織のポリシーの作成と管理をご覧ください。
新しいカスタム制約の 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 リソースに適用します。Console
gcloud
ブール型制約を適用する組織のポリシーを作成するには、制約を参照するポリシー YAML ファイルを作成します。
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
次のように置き換えます。
制約を含む組織のポリシーを適用するには、次のコマンドを実行します。
gcloud org-policies set-policy POLICY_PATH
POLICY_PATH
は、組織のポリシーの YAML ファイルのパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。例: VM による N2D マシンタイプの使用を制限する制約を作成する
gcloud
一般的なユースケースのカスタム制約の例
以下のセクションでは、役立つ可能性のあるカスタム制約の構文について説明します。
ディスク
ユースケース 構文 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".
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-12-05 UTC。
-