組織のポリシー サービスを使用すると、組織のリソースをプログラマティックに一元管理できます。組織のポリシー管理者は組織のポリシーを定義できます。組織のポリシーは、Google Cloud のリソース階層内の Google Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。組織のポリシーは、組織レベル、フォルダレベル、またはプロジェクト レベルで適用できます。
組織のポリシーは、さまざまな Google Cloud サービスに事前に定義された制約を提供します。ただし、組織のポリシーで制限されている特定のフィールドをきめ細かく制御する必要がある場合は、カスタム制約を作成して、カスタム組織ポリシーでそれらのカスタム制約を適用することもできます。
Cloud Next Generation Firewall では、次のファイアウォール ポリシーにカスタム制約を作成して適用できます。
カスタム制約は、ファイアウォール ポリシーの作成時に追加される事前定義ルールなど、ファイアウォール ポリシー内のすべてのルールに適用されます。事前定義のファイアウォール ポリシー ルールの詳細については、事前定義ルールをご覧ください。
ポリシーの継承
デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、そのフォルダ内のすべてのプロジェクトにそのポリシーが適用されます。この動作の詳細と変更方法については、階層評価ルールをご覧ください。
Cloud NGFW でサポートされているリソース
ファイアウォール ポリシーでは、次のリソースとフィールドにカスタム制約を設定できます。
- ファイアウォール ポリシー:
compute.googleapis.com/FirewallPolicy
- ルール名:
resource.rules[].ruleName
- 説明:
resource.rules[].description
- 優先度:
resource.rules[].priority
- 操作:
resource.rules[].action
- 方向:
resource.rules[].direction
- ロギングが有効になっているかどうか:
resource.rules[].enableLogging
- 無効かどうか:
resource.rules[].disabled
- セキュリティ プロファイル グループ:
resource.rules[].securityProfileGroup
- TLS インスペクションが有効かどうか:
resource.rules[].tlsInspect
- ターゲット サービス アカウント:
resource.rules[].targetServiceAccounts[]
- ターゲット セキュアタグ:
resource.rules[].targetSecureTags[]
- 名前:
resource.rules[].targetSecureTags[].name
- 名前:
- ターゲット リソース:
resource.rules[].targetResources
- ソース IP の範囲:
resource.rules[].match.srcIpRanges[]
- 送信先 IP 範囲:
resource.rules[].match.destIpRanges[]
- Layer4Config:
resource.rules[].match.layer4Configs[]
- IP プロトコル:
match.layer4Configs[].ipProtocol
- ポート:
resource.rules[].match.layer4Configs[].ports[]
- IP プロトコル:
- ソース セキュアタグ:
resource.rules[].match.srcSecureTags[]
- 名前:
resource.rules[].match.srcSecureTags[].name
- 名前:
- 送信元アドレス グループ:
resource.rules[].match.srcAddressGroups[]
- 宛先アドレス グループ:
resource.rules[].match.destAddressGroups[]
- 送信元 FQDN:
resource.rules[].match.srcFqdns[]
- 宛先 FQDN:
resource.rules[].match.destFqdns[]
- 送信元リージョン コード:
resource.rules[].match.srcReigonCodes[]
- 宛先リージョン コード:
resource.rules[].match.destReigonCodes[]
- 送信元ネットワークの脅威インテリジェンス リスト:
resource.rules[].match.srcThreatIntelligences[]
- 宛先ネットワークの脅威インテリジェンス リスト:
resource.rules[].match.destThreatIntelligences[]
- ルール名:
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、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 ネットワーク管理者(
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.createFirewallPolicy
)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例:organizations/123456789/customConstraints/custom.
)。[説明] ボックスに、ポリシー違反が発生したときにエラー メッセージとして表示される制約の説明を入力します。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。
[リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む Google Cloud REST リソースの名前を選択します。例:
compute.googleapis.com/FirewallPolicy
[適用方法] で、REST
CREATE
メソッドのみに制約を適用するか、RESTCREATE
メソッドとUPDATE
メソッドの両方に制約を適用するかを選択します。条件を定義するには、[
条件を編集] をクリックします。[条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します。このフィールドの最大長は 1,000 文字です。
[保存] をクリックします。
[アクション] で、上記の条件が満たされた場合に評価された方法を許可するか拒否するかを選択します。
[制約を作成] をクリックします。
ORGANIZATION_ID
: 組織 ID(123456789
など)。CONSTRAINT_NAME
: 新しいカスタム制約に付ける名前。カスタム制約はcustom.
で始まる必要があり、大文字、小文字、数字のみを含めることができます(例:custom.createFirewallPolicy
)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例:organizations/123456789/customConstraints/custom
)。RESOURCE_NAME
: 制限するオブジェクトとフィールドを含む Compute Engine API REST リソースの名前(URI ではない)。例:FirewallPolicy
METHOD1,METHOD2,...
: 制約を適用する RESTful メソッドのリスト。CREATE
、CREATE
、UPDATE
のいずれかです。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.createFirewallPolicy
次の情報を含む
enforceLoggingEnabled.yaml
制約ファイルを作成します。name: organizations/ORGANIZATION_ID/customConstraints/custom.enforceLoggingEnabled resource_types: compute.googleapis.com/FirewallPolicy condition: "resource.rules.exists(rule, rule.action != 'goto_next' && rule.enableLogging == false)" action_type: DENY method_types: [CREATE, UPDATE] display_name: Enforce that all rules have logging enabled description: Firewall policy rules with action other than goto_next can only be created when firewall rules logging is enabled.
ORGANIZATION_ID
は、実際の組織 ID に置き換えます。カスタム制約を設定します。
gcloud org-policies set-custom-constraint enforceLoggingEnabled.yaml
次の例の情報を含む
enforceLoggingEnabled-policy.yaml
ポリシー ファイルを作成し、制約をプロジェクト レベルで適用します。この制約は、組織レベルで設定することも、フォルダレベルで設定することもできます。name: projects/PROJECT_ID/policies/custom.enforceLoggingEnabled spec: rules: – enforce: true
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。ポリシーを適用します。
gcloud org-policies set-policy enforceLoggingEnabled-policy.yaml
制約をテストするには、ロギングを無効にしてポート
22
で上り(内向き)の TCP トラフィックを許可するファイアウォール ポリシー ルールを作成します。gcloud compute network-firewall-policies create test-fw-policy --global
gcloud compute network-firewall-policies rules create 1000 \ --action ALLOW \ --direction INGRESS \ --firewall-policy test-fw-policy \ --src-ip-ranges 0.0.0.0/0 \ --layer4-configs tcp:22 \ --no-enable-logging \ --global-firewall-policy
出力は次のようになります。
ERROR: (gcloud.compute.network-firewall-policies.create) Could not fetch resource: - Operation denied by custom org policy: [customConstraints/custom.enforceLoggingEnabled] :Firewall policy rules with action other than goto_next can only be created when firewall rules logging is enabled.
前の手順で作成したファイアウォール ポリシーを削除します。
gcloud compute network-firewall-policies delete test-fw-policy --global
次の情報を含む
restrictFirewallPolicyRulesSshRanges.yaml
制約ファイルを作成します。name: organizations/$ORGANIZATION_ID/customConstraints/custom.restrictFirewallPolicyRulesSshRanges resource_types: compute.googleapis.com/FirewallPolicy condition: "resource.rules.exists(rule, rule.priority < 2147483644 && (rule.direction == 'INGRESS') && !rule.match.srcIpRanges.all(ipRange, ipRange.startsWith('192.168.')) && rule.match.layer4Configs.all(l4config, l4config.ipProtocol == 'tcp' && l4config.ports.all(port, port == '22')) )" action_type: DENY method_types: [CREATE, UPDATE] display_name: Limit firewall policy rules that allow ingress SSH traffic description: Firewall Policy rules that allow ingress SSH traffic can only be created with allowed source ranges.
ORGANIZATION_ID
は、実際の組織 ID に置き換えます。カスタム制約を設定します。
gcloud org-policies set-custom-constraint restrictFirewallPolicyRulesSshRanges.yaml
次の例の情報を含む
restrictFirewallPolicyRulesSshRanges-policy.yaml
ポリシー ファイルを作成し、制約をプロジェクト レベルで適用します。この制約は、組織レベルで設定することも、フォルダレベルで設定することもできます。name: projects/PROJECT_ID/policies/custom.restrictFirewallPolicyRulesSshRanges spec: rules: – enforce: true
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。ポリシーを適用します。
gcloud org-policies set-policy restrictFirewallPolicyRulesSshRanges-policy.yaml
制約をテストするには、送信元 IP 範囲が
10.0.0.0/0
のポート22
で SSH 上り(内向き)TCP トラフィックを許可するファイアウォール ポリシー ルールを作成します。gcloud compute network-firewall-policies create test-fw-policy --global
gcloud compute network-firewall-policies rules create 1000 \ --action ALLOW \ --direction INGRESS \ --firewall-policy test-fw-policy \ --src-ip-ranges 10.0.0.0/8 \ --layer4-configs tcp:22 \ --global-firewall-policy
出力は次のようになります。
ERROR: (gcloud.compute.network-firewall-policies.create) Could not fetch resource: - Operation denied by custom org policy: [customConstraints/custom.restrictFirewallPolicyRulesSshRanges]: Firewall Policy rules that allow ingress SSH traffic can only be created with allowed source ranges.
前の手順で作成したファイアウォール ポリシーを削除します。
gcloud compute network-firewall-policies delete test-fw-policy --global
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要なロール
Cloud NGFW リソースの組織のポリシーを管理するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、Cloud NGFW リソースの組織のポリシーを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
Cloud NGFW リソースの組織のポリシーを管理するには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
カスタム制約を設定する
カスタム制約を作成し、Google Cloud コンソールまたは Google Cloud CLI を使用して組織のポリシーで使用するように設定できます。
コンソール
各フィールドに値を入力すると、このカスタム制約の YAML 構成が右側に表示されます。
gcloud
Google Cloud CLI を使用してカスタム制約を作成するには、カスタム制約の YAML ファイルを作成します。
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resource_types: compute.googleapis.com/RESOURCE_NAME method_types: – METHOD1 – METHOD2 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 リソースに適用します。コンソール
ブール型制約を適用するには、次のようにします。
gcloud
ブール型制約を適用する組織のポリシーを作成するには、制約を参照するポリシー YAML ファイルを作成します。
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
次のように置き換えます。
制約を含む組織のポリシーを適用するには、次のコマンドを実行します。
gcloud org-policies set-policy POLICY_PATH
POLICY_PATH
は、組織のポリシーの YAML ファイルのパスに置き換えます。ポリシーが有効になるまでに最長 15 分かかります。例: すべてのファイアウォール ルールでロギングを有効にする制約を作成する
この制約により、ロギングを有効にせずにファイアウォール ポリシー ルールを作成できなくなります。
goto_next
アクションを含むファイアウォール ポリシー ルールは、ロギングをサポートしていないため除外されます。gcloud
例: すべての上り(内向き)SSH ファイアウォール ルールに特定の送信元範囲を適用する制約を作成する
この制約により、上り(内向き)SSH トラフィックを許可するファイアウォール ポリシー ルールの送信元 IP 範囲が
192.168.
ブロックで始まるようになります。gcloud
料金
事前定義の組織のポリシーやカスタムの組織のポリシーを含め、組織のポリシー サービスは無料です。
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-11-19 UTC。
-