カスタムの組織のポリシーを使用して VPC リソースを管理する
Google Cloud の組織のポリシーを使用すると、組織のリソースをプログラムで一元管理できます。組織のポリシー管理者は組織のポリシーを定義できます。組織のポリシーは、Google Cloud のリソース階層内の Google Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。組織のポリシーは、組織レベル、フォルダレベル、またはプロジェクト レベルで適用できます。
組織のポリシーは、さまざまな Google Cloud サービスに事前に定義された制約を提供します。ただし、組織のポリシーで制限されている特定のフィールドをきめ細かく制御する必要がある場合は、カスタム制約を作成して、カスタムの組織のポリシーでそれらのカスタム制約を使用することもできます。
ポリシーの継承
デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、そのフォルダ内のすべてのプロジェクトにそのポリシーが適用されます。この動作の詳細と変更方法については、階層評価ルールをご覧ください。
Virtual Private Cloud でサポートされているリソース
VPC では、次のリソースとフィールドにカスタム制約を設定できます。
- ネットワーク:
compute.googleapis.com/Network
- 名前:
resource.name
- 説明:
resource.description
- モード:
resource.autoCreateSubnetworks
- MTU の設定:
resource.mtu
- ファイアウォールの適用順序:
resource.networkFirewallPolicyEnforcementOrder
- 内部 IPv6 の設定:
resource.enableUlaInternalIpv6
- 内部 IPv6 範囲:
resource.internalIpv6Range
- ルーティング モード:
resource.routingConfig.routingMode
- 名前:
- サブネットワーク:
compute.googleapis.com/Subnetwork
- 名前:
resource.name
- 説明:
resource.description
- ネットワーク:
resource.network
- IP CIDR 範囲:
resource.ipCidrRange
- セカンダリ IP アドレス範囲:
resource.secondaryIpRanges[]
- 範囲名:
resource.secondaryIpRanges[].rangeName
- IP CIDR 範囲:
resource.secondaryIpRanges[].ipCidrRange
- 範囲名:
- スタックタイプ:
resource.stackType
- IPv6 アクセスタイプ:
resource.ipv6AccessType
- 限定公開の Google アクセスの設定:
resource.privateIpGoogleAccess
- サブネットの目的:
resource.purpose
- ロール:
resource.role
- VPC Flow Logs:
- ロギング構成:
resource.logConfig.enable
- 集計間隔:
resource.logConfig.aggregationInterval
- サンプリング レート:
resource.logConfig.flowSampling
- メタデータ:
resource.logConfig.metadata
- メタデータのフィールド:
resource.logConfig.metadataFields[]
- フィルタ式:
resource.logConfig.filterExpr
- ロギング構成:
- 名前:
- ルート:
compute.googleapis.com/Route
- 名前:
resource.name
- 説明:
resource.description
- ネットワーク:
resource.network
- タグ:
resource.tags
- 送信先の範囲:
resource.destRange
- 優先度:
resource.priority
- ネクストホップのインスタンス:
resource.nextHopInstance
- ネクストホップの IP アドレス:
resource.nextHopIp
- ネクストホップのゲートウェイ:
resource.nextHopGateway
- ネクストホップの内部パススルー ネットワーク ロードバランサ:
resource.nextHopIlb
- ネクストホップ VPN トンネル:
resource.nextHopVpnTunnel
- 名前:
- Packet Mirroring:
compute.googleapis.com/PacketMirroring
- 名前:
resource.name
- 説明:
resource.description
- ネットワークの URL:
resource.network.url
- 優先度:
resource.priority
- コレクタ ILB URL:
resource.collectorIlb.url
- ミラーリング対象のリソース:
- サブネットワークの URL:
resource.mirroredResources.subnetworks[].url
- インスタンスの URL:
resource.mirroredResources.instances[].url
- タグ:
resource.mirroredResources.tags[]
- サブネットワークの URL:
- フィルタ:
- CIDR 範囲:
resource.filter.cidrRanges[]
- IP プロトコル:
resource.filter.IPProtocols[]
- 方向:
resource.filter.direction
- CIDR 範囲:
- 実現:
resource.enable
- 名前:
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、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.
-
組織リソースに対する組織のポリシー管理者(
roles/orgpolicy.policyAdmin
) -
制約をテストするには:
-
プロジェクトの Compute ネットワーク管理者(
roles/compute.networkAdmin
) -
プロジェクトのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)
-
プロジェクトの Compute ネットワーク管理者(
-
orgpolicy.constraints.list
-
orgpolicy.policies.create
-
orgpolicy.policies.delete
-
orgpolicy.policies.list
-
orgpolicy.policies.update
-
orgpolicy.policy.get
-
orgpolicy.policy.set
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
ページの上部にあるプロジェクト選択ツールを選択します。
プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。
[
カスタム制約] をクリックします。[表示名] ボックスに制約の名前を入力します。わかりやすい名前を入力してください。このフィールドの最大長は 200 文字です。エラー メッセージで漏えいする可能性があるため、制約名には PII や機密データを使用しないでください。
[制約 ID] ボックスに、新しいカスタム制約の名前を入力します。カスタム制約は
custom.
で始まる必要があり、大文字、小文字、数字のみを含めることができます(例:custom.createCustomNetworks
)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例:organizations/123456789/customConstraints/custom.
)。[説明] ボックスに、ポリシー違反が発生したときにエラー メッセージとして表示される制約の説明を入力します。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。
[リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む Google Cloud REST リソースの名前を選択します。例:
compute.googleapis.com/Network
[適用方法] で、REST
CREATE
メソッドに制約を適用するかどうかを選択します。条件を定義するには、[
条件を編集] をクリックします。[条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します。このフィールドの最大長は 1,000 文字です。
[保存] をクリックします。
[アクション] で、上記の条件が満たされた場合に評価された方法を許可するか拒否するかを選択します。
[制約を作成] をクリックします。
ORGANIZATION_ID
: 組織 ID(123456789
など)。CONSTRAINT_NAME
: 新しいカスタム制約に付ける名前。カスタム制約はcustom.
で始まる必要があり、大文字、小文字、数字のみを含めることができます(例:custom.createCustomNetworks
)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例:organizations/123456789/customConstraints/custom.
)。RESOURCE_NAME
: 制限するオブジェクトとフィールドを含む Compute Engine API REST リソースの名前(URI ではない)。例:Network
CONDITION
: サポート対象のサービス リソースの表現に対して書き込まれる CEL 条件。このフィールドの最大長は 1,000 文字です。条件の書き込み先として使用できるリソースの詳細については、サポート対象のリソースをご覧ください。ACTION
:condition
が満たされている場合に実行するアクション。ALLOW
またはDENY
になります。DISPLAY_NAME
: 制約の名前。わかりやすい名前を入力してください。このフィールドの最大長は 200 文字です。DESCRIPTION
: ポリシー違反時にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。- Google Cloud コンソールで、[組織のポリシー] ページに移動します。
- プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
- [組織のポリシー] ページのリストで制約を選択して、その制約の [ポリシーの詳細] ページを表示します。
- このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
- [ポリシーの編集] ページで、[Override parent's policy] を選択します。
- [ルールを追加] をクリックします。
- [適用] セクションで、この組織のポリシーの適用を有効にするかどうかを選択します。
- タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグ付きの組織のポリシーの設定をご覧ください。
- カスタム制約の場合は、[変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートできます。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
- 組織のポリシーを完成させて適用するには、[ポリシーを設定] をクリックします。ポリシーが有効になるまでに最大 15 分かかります。
-
PROJECT_ID
: 制約を適用するプロジェクト。 -
CONSTRAINT_NAME
: カスタム制約に定義した名前。たとえば、
のようにします。custom.createCustomNetworks
次の情報を含む
onlyCustomNetwork.yaml
制約ファイルを作成します。ORGANIZATION_ID
は、実際の組織 ID に置き換えます。name: organizations/ORGANIZATION_ID/customConstraints/custom.createOnlyCustomNetwork resourceTypes: compute.googleapis.com/Network condition: "resource.autoCreateSubnetworks == false" actionType: ALLOW methodTypes: CREATE displayName: Restrict creation of networks to custom mode networks description: Only custom mode networks allowed.
カスタム制約を設定します。
gcloud org-policies set-custom-constraint onlyCustomNetwork.yaml
次の情報を含む
onlyCustomNetwork-policy.yaml
ポリシー ファイルを作成します。この例では、この制約をプロジェクト レベルで適用しますが、組織レベルまたはフォルダレベルで設定することもできます。PROJECT_ID
は、実際のプロジェクト ID に置き換えます。name: projects/PROJECT_ID/policies/custom.onlyCustomNetwork spec: rules: – enforce: true
ポリシーを適用します。
gcloud org-policies set-policy onlyCustomNetwork-policy.yaml
自動モード VPC ネットワークを作成して、制約をテストします。
gcloud compute networks create vpc1 --project=PROJECT_ID \ --subnet-mode=auto
出力は次のようになります。
ERROR: (gcloud.compute.networks.create) Could not fetch resource: - Operation denied by custom org policy: [customConstraints/custom.createOnlyCustomNetwork] : Only custom mode networks allowed.
- カスタム制約は、VPC リソースの
CREATE
メソッドにのみ適用されます。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要なロール
VPC リソースの組織のポリシーを管理するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、VPC リソースの組織のポリシーを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
VPC リソースの組織のポリシーを管理するには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
カスタム制約を設定する
カスタム制約は、組織のポリシーを適用しているサービスでサポートされるリソース、メソッド、条件、アクションによって定義されます。カスタム制約の条件は、Common Expression Language(CEL)を使用して定義されます。CEL を使用してカスタム制約で条件を作成する方法については、カスタム制約の作成と管理の CEL セクションをご覧ください。
カスタム制約を作成し、Google Cloud コンソールまたは Google Cloud CLI を使用して組織のポリシーで使用するように設定できます。
コンソール
各フィールドに値を入力すると、このカスタム制約の YAML 構成が右側に表示されます。
gcloud
Google Cloud CLI を使用してカスタム制約を作成するには、カスタム制約の YAML ファイルを作成します。
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: compute.googleapis.com/RESOURCE_NAME methodTypes: - CREATE condition: "CONDITION" actionType: ACTION displayName: 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 リソースに適用します。コンソール
gcloud
ブール型制約を適用する組織のポリシーを作成するには、制約を参照するポリシー YAML ファイルを作成します。
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
次のように置き換えます。
制約を含む組織のポリシーを適用するには、次のコマンドを実行します。
gcloud org-policies set-policy POLICY_PATH
POLICY_PATH
は、組織のポリシーの YAML ファイルのパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。例: ネットワークをカスタムモードに制限する制約を作成する
gcloud
一般的なユースケースのカスタム制約の例
以下のセクションでは、役立つ可能性のあるカスタム制約の構文について説明します。
内部 IPv6 範囲のネットワークを要求する
name: organizations/ORGANIZATION_ID/customConstraints/custom.networkInternalIpv6Range resourceTypes: compute.googleapis.com/Network condition: "resource.enableUlaInternalIpv6 == true" actionType: ALLOW methodTypes: CREATE displayName: Require networks to have an internal IPv6 range description: Networks must have a ULA internal IPv6 range configured
10.0.0.0/8
の範囲を使用するサブネットを要求するname: organizations/ORGANIZATION_ID/customConstraints/custom.subnetRangeUse10Slash8 resourceTypes: compute.googleapis.com/Subnetwork condition: "resource.ipCidrRange.startsWith('10.')" actionType: ALLOW methodTypes: CREATE displayName: Require subnets to use ranges in 10.0.0.0/8 description: Subnetwork's primary IPv4 range must come from 10.0.0.0/8
IP アドレスで指定された
next-hop-ilb
ルートを要求する転送ルールのリソース名の代わりに IP アドレスを使用して指定される
next-hop-ilb
を使用するルートを要求します。name: organizations/ORGANIZATION_ID/customConstraints/custom.routeNextHopIlbByIpAddress resourceTypes: compute.googleapis.com/Route condition: "!resource.nextHopIlb.contains('forwardingRules')" actionType: ALLOW methodTypes: CREATE displayName: Require defining next-hop-ilb by IP address description: Next hops that are an internal load balancer must be specified by IP address instead of resource name.
Packet Mirroring で TCP トラフィックのみをミラーリングする
name: organizations/ORGANIZATION_ID/customConstraints/custom.packetMirroringTcpFilter resourceTypes: compute.googleapis.com/PacketMirroring condition: "resource.filter.IPProtocols.size() == 1 && resource.filter.IPProtocols[0] == 'tcp'" actionType: ALLOW methodTypes: - CREATE - UPDATE displayName: Require policies to mirror TCP protocol only. description: Packet mirroring must mirror all TCP traffic and no other protocols.
料金
事前定義の組織のポリシーやカスタムの組織のポリシーを含む組織のポリシー サービスは料金なしで利用できます。
制限事項
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-12-23 UTC。
-