組織のポリシー サービスを使用すると、組織のリソースをプログラマティックに一元管理できます。組織のポリシー管理者は組織のポリシーを定義できます。組織のポリシーは、Google Cloud リソース階層内のGoogle Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。組織のポリシーは、組織レベル、フォルダレベル、またはプロジェクト レベルで適用できます。
組織のポリシーでは、さまざまなGoogle Cloud サービス用に事前定義された制約を利用できます。ただし、組織のポリシーで制限されている特定のフィールドをさらに細かく制御する必要がある場合は、カスタム制約を作成してカスタムの組織ポリシーで適用することもできます。
Cloud Next Generation Firewall では、次のファイアウォール ポリシーにカスタム制約を作成して適用できます。
カスタム制約は、ファイアウォール ポリシーの作成時に追加される事前定義ルールなど、ファイアウォール ポリシー内のすべてのルールに適用されます。事前定義のファイアウォール ポリシー ルールの詳細については、ファイアウォール ポリシーの事前定義ルールをご覧ください。
ポリシーの継承
デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、 Google Cloud ではそのフォルダ内のすべてのプロジェクトにそのポリシーが適用されます。この動作の詳細と変更方法については、階層評価ルールをご覧ください。
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 に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Google Cloud CLI をインストールします。インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Google Cloud CLI をインストールします。
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
- 組織 ID を確認します。
必要なロール
Cloud NGFW リソースの組織のポリシーを管理するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
- 組織リソースに対する組織のポリシー管理者(
roles/orgpolicy.policyAdmin) -
制約をテストするには:
- プロジェクトに対する Compute ネットワーク管理者 (
roles/compute.networkAdmin) - プロジェクトのサービス アカウント ユーザー(
roles/iam.serviceAccountUser)
- プロジェクトに対する Compute ネットワーク管理者 (
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、Cloud NGFW リソースの組織のポリシーを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
Cloud NGFW リソースの組織のポリシーを管理するには、次の権限が必要です。
-
orgpolicy.constraints.list -
orgpolicy.policies.create -
orgpolicy.policies.delete -
orgpolicy.policies.list -
orgpolicy.policies.update -
orgpolicy.policy.get -
orgpolicy.policy.set
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
カスタム制約を設定する
カスタム制約を作成し、 Google Cloud コンソールまたは Google Cloud CLI を使用して組織のポリシーで使用するように設定できます。
コンソール
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
ページの上部にあるプロジェクト選択ツールを選択します。
プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。
[ カスタム制約] をクリックします。
[表示名] ボックスに制約の名前を入力します。わかりやすい名前を入力してください。このフィールドの最大長は 200 文字です。エラー メッセージで漏えいする可能性があるため、制約名には個人情報(PII)やセンシティブ データを使用しないでください。
[制約 ID] ボックスに、新しいカスタム制約の名前を入力します。カスタム制約は
custom.で始まる必要があり、大文字、小文字、数字のみを含めることができます(例:custom.createFirewallPolicy)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例:organizations/123456789/customConstraints/custom.)。[説明] ボックスに、ポリシー違反が発生したときにエラー メッセージとして表示される制約の説明を入力します。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。
[リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む Google CloudREST リソースの名前を選択します。例:
compute.googleapis.com/FirewallPolicy。[適用方法] で、REST
CREATEメソッドのみに制約を適用するか、RESTCREATEメソッドとUPDATEメソッドの両方に制約を適用するかを選択します。条件を定義するには、[ 条件を編集] をクリックします。
[条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します。このフィールドの最大長は 1,000 文字です。
[保存] をクリックします。
[アクション] で、上記の条件が満たされた場合に評価された方法を許可するか拒否するかを選択します。
[制約を作成] をクリックします。
各フィールドに値を入力すると、このカスタム制約の 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
次のように置き換えます。
ORGANIZATION_ID: 組織 ID(123456789など)。CONSTRAINT_NAME: 新しいカスタム制約に付ける名前。カスタム制約はcustom.で始まる必要があり、大文字、小文字、数字のみを含めることができます(例:custom.createFirewallPolicy)。このフィールドの最大長は 70 文字です。接頭辞はカウントされません(例:organizations/123456789/customConstraints/custom)。RESOURCE_NAME: 制限するオブジェクトとフィールドを含む Compute Engine API REST リソースの名前(URI ではない)。例:FirewallPolicyMETHOD1,METHOD2,...: 制約を適用する RESTful メソッドのリスト。CREATE、CREATE、UPDATEのいずれかです。CONDITION: サポート対象のサービス リソースの表現に対して書き込まれる CEL 条件。このフィールドの最大長は 1,000 文字です。条件の書き込み先として使用できるリソースの詳細については、サポート対象のリソースをご覧ください。ACTION:conditionが満たされている場合に実行するアクション。ALLOWまたはDENYになります。DISPLAY_NAME: 制約の名前。わかりやすい名前を入力してください。このフィールドの最大長は 200 文字です。DESCRIPTION: ポリシー違反時にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。
カスタム制約の作成方法については、カスタム制約の定義をご覧ください。
コンソール
カスタム制約を作成する手順は次のとおりです。
- Google Cloud コンソールで [組織のポリシー] ページに移動します。
- プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
- [ カスタム制約] をクリックします。
- [表示名] ボックスに、人が読める形式で制約の名前を入力します。この名前はエラー メッセージで使用されるほか、識別やデバッグにも使用できます。エラー メッセージで公開される可能性があるため、表示名に個人を特定できる情報(PII)やセンシティブ データを使用しないでください。このフィールドには、最大 200 文字まで入力できます。
-
[制約 ID] ボックスに、新しいカスタム制約の ID を入力します。カスタム制約の名前に使用できるのは、英字(大文字と小文字)と数字のみです(例:
)。このフィールドには、接頭辞(custom.createFirewallPolicycustom.)を除き、最大 70 文字まで入力できます(例:organizations/123456789/customConstraints/custom)。エラー メッセージで公開される可能性があるため、制約 ID に個人情報(PII)や機密データを含めないでください。 - [説明] ボックスに、人が読める形式で制約の説明を入力します。この説明は、ポリシー違反の際にエラー メッセージとして使用されます。ポリシー違反が発生した理由と、ポリシー違反を解決する方法に関する詳細を含めてください。エラー メッセージで公開される可能性があるため、説明に個人情報(PII)や機密データを含めないでください。 このフィールドには、最大 2,000 文字まで入力できます。
-
[リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む Google Cloud REST リソースの名前を選択します(例:
container.googleapis.com/NodePool)。ほとんどの種類のリソースは、最大 20 個のカスタム制約をサポートしています。これより多くのカスタム制約を作成しようとすると、オペレーションは失敗します。 -
この制約は、REST
CREATEメソッドにのみ適用できます。 - 条件を定義するには、[ 条件を編集] をクリックします。
-
[条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します(例:
resource.management.autoUpgrade == false)。このフィールドには、最大 1,000 文字まで入力できます。CEL の使用方法の詳細については、Common Expression Language をご覧ください。 カスタム制約で使用できるサービス リソースの詳細については、カスタム制約のサポート サービスをご覧ください。 - [保存] をクリックします。
- [アクション] で、条件が満たされた場合に評価対象のメソッドを許可するか拒否するかを選択します。
- [制約を作成] をクリックします。
各サービスでサポートされているメソッドを確認するには、 カスタム制約をサポートするサービスをご覧ください。
拒否アクションは、条件が true と評価された場合に、リソースを作成または更新するオペレーションがブロックされることを意味します。
許可アクションは、条件が true と評価された場合にのみ、リソースを作成または更新するオペレーションが許可されることを意味します。条件に明記されているケースを除き、他のケースはすべてブロックされます。
各フィールドに値を入力すると、このカスタム制約に対応する YAML 構成が右側に表示されます。
gcloud
- カスタム制約を作成するには、次の形式で YAML ファイルを作成します。
-
ORGANIZATION_ID: 組織 ID(例:123456789)。 -
CONSTRAINT_NAME: 新しいカスタム制約の名前。カスタム制約の名前に使用できるのは、英字(大文字と小文字)と数字のみです(例:)。このフィールドには、接頭辞(custom.createFirewallPolicycustom.)を除き、最大 70 文字まで入力できます(例:organizations/123456789/customConstraints/custom)。エラー メッセージで公開される可能性があるため、制約 ID に個人情報(PII)やセンシティブ データを含めないでください。 -
RESOURCE_NAME: 制限するオブジェクトとフィールドを含む Google Cloudリソースの完全修飾名。たとえば、compute.googleapis.com/FirewallPolicyのようにします。ほとんどの種類のリソースは、最大 20 個のカスタム制約をサポートしています。これより多くのカスタム制約を作成しようとすると、オペレーションは失敗します。 -
methodTypes: 制約が適用される REST メソッド。CREATEのみです。 -
CONDITION: サポート対象のサービス リソースの表現に対して記述する CEL 条件。このフィールドには、最大 1,000 文字まで入力できます。例:。"resource.rules.all(rule, rule.action == 'goto_next')" -
ACTION:conditionが満たされている場合に実行するアクション。ALLOWのみを設定できます。 -
DISPLAY_NAME: 制約の名前。わかりやすい名前を入力してください。この名前はエラー メッセージで使用されるほか、識別やデバッグにも使用できます。エラー メッセージで公開される可能性があるため、表示名に個人情報(PII)やセンシティブ データを使用しないでください。このフィールドには、最大 200 文字まで入力できます。 -
DESCRIPTION: ポリシー違反の際にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。このフィールドには、最大 2,000 文字まで入力できます。 -
新しいカスタム制約の YAML ファイルを作成したら、組織内で組織のポリシーとして使用できるように設定する必要があります。カスタム制約を設定するには、
gcloud org-policies set-custom-constraintコマンドを使用します。 -
カスタム制約が存在することを確認するには、
gcloud org-policies list-custom-constraintsコマンドを使用します。
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: RESOURCE_NAME methodTypes: - CREATE condition: "CONDITION" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
次のように置き換えます。
各サービスでサポートされているメソッドを確認するには、 カスタム制約をサポートするサービスをご覧ください。
条件を記述できるリソースの詳細については、サポートされているリソースをご覧ください。
許可アクションは、条件が true と評価された場合に、リソースを作成または更新するオペレーションが許可されることを意味します。つまり、条件に明記されているケース以外はすべてブロックされます。
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH は、カスタム制約ファイルのフルパスに置き換えます。例: /home/user/customconstraint.yaml。
この操作が完了すると、カスタム制約が Google Cloud の組織ポリシーのリストに表示され、組織のポリシーとして使用できるようになります。
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID は組織リソースの ID に置き換えます。
詳細については、組織のポリシーの表示をご覧ください。
カスタム制約を適用する
制約を適用するには、それを参照する組織のポリシーを作成し、その組織のポリシーを Google Cloud リソースに適用します。コンソール
- Google Cloud コンソールで [組織のポリシー] ページに移動します。
- プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
- [組織のポリシー] ページのリストで制約を選択して、その制約の [ポリシーの詳細] ページを表示します。
- このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
- [ポリシーの編集] ページで、[Override parent's policy] を選択します。
- [ルールを追加] をクリックします。
- [適用] セクションで、この組織のポリシーを適用するかどうかを選択します。
- 省略可: タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、 タグを使用して組織のポリシーのスコープを設定するをご覧ください。
- [変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートします。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
- ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。詳細については、 組織のポリシーをテストするをご覧ください。
- ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、[ポリシーを設定] をクリックして有効なポリシーを設定します。
gcloud
- ブール値のルールを含む組織のポリシーを作成するには、制約を参照するポリシーの YAML ファイルを作成します。
-
PROJECT_ID: 制約を適用するプロジェクト。 -
CONSTRAINT_NAME: カスタム制約に定義した名前。例:。custom.createFirewallPolicy -
ドライラン モードで組織のポリシーを適用するには、
dryRunSpecフラグを指定して次のコマンドを実行します。 -
ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、
org-policies set-policyコマンドとspecフラグを使用して有効なポリシーを設定します。
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true dryRunSpec: rules: - enforce: true
次のように置き換えます。
gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
POLICY_PATH は、組織のポリシーの YAML ファイルのフルパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。
gcloud org-policies set-policy POLICY_PATH --update-mask=spec
POLICY_PATH は、組織のポリシーの YAML ファイルのフルパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。
例: すべてのファイアウォール ルールでロギングを有効にする制約を作成する
このセクションで説明する制約により、ロギングを有効にせずにファイアウォール ポリシールールを作成できなくなります。goto_next アクションを含むファイアウォール ポリシー ルールは、ロギングをサポートしていないため除外されます。
gcloud
次の情報を含む
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
次に、上り(内向き)TCP トラフィックを許可するルールをポリシーに作成します。
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
例: すべての上り(内向き)SSH ファイアウォール ルールに特定の送信元範囲を適用する制約を作成する
このセクションで説明する制約により、上り(内向き)SSH トラフィックを許可するファイアウォール ポリシー ルールの送信元 IP 範囲が 192.168. ブロックで始まるようになります。
gcloud
次の情報を含む
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
次に、SSH 上り(内向き)トラフィックを許可するルールをポリシーに作成します。
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
例: すべての上り(内向き)SSH ファイアウォール ルールで特定のアドレス グループを使用するように強制する制約を作成する
このセクションで説明する制約では、上り(内向き)SSH トラフィックを許可するファイアウォール ポリシー ルールで、指定された組織スコープのアドレス グループのみを使用する必要があります。アドレス グループの詳細については、ファイアウォール ポリシーのアドレス グループをご覧ください。
gcloud
次の情報を含む
restrictFirewallPolicyRulesSshAddressGroups.yaml制約ファイルを作成します。name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictFirewallPolicyRulesSshAddressGroups resource_types: compute.googleapis.com/FirewallPolicy condition: "!resource.rules.all(rule, rule.priority >= 2147483644 || rule.match.srcAddressGroups.exists(group, ['ADDRESS_GROUP_1','ADDRESS_GROUP_2', ... , 'ADDRESS_GROUP_N'].exists(value, value == group) ) )" 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 address groups.
ORGANIZATION_IDは、実際の組織 ID に置き換えます。'<code><var>ADDRESS_GROUP_1</var></code>'、'<code><var>ADDRESS_GROUP_2</var></code>'、...、'<code><var>ADDRESS_GROUP_N</var></code>'は、許可するアドレス グループの一意の URL 識別子('organizations/my-org/locations/europe-west1/addressGroups/my-address-group'など)に置き換えます。カスタム制約を設定します。
gcloud org-policies set-custom-constraint restrictFirewallPolicyRulesSshAddressGroups.yaml
次の例を使用して
restrictFirewallPolicyRulesSshAddressGroups-policy.yamlポリシー ファイルを作成します。次に、プロジェクト レベルで制約を適用します。この制約は、組織レベルで設定することも、フォルダレベルで設定することもできます。name: projects/PROJECT_ID/policies/custom.restrictFirewallPolicyRulesSshAddressGroups spec: rules: – enforce: true
PROJECT_IDは、実際のプロジェクト ID に置き換えます。ポリシーを適用します。
gcloud org-policies set-policy restrictFirewallPolicyRulesSshAddressGroups-policy.yaml
制約をテストするには、送信元アドレス グループが
test-address-groupのポート22で SSH 上り(内向き)TCP トラフィックを許可するファイアウォール ポリシー ルールを作成します。次のコマンドを使用して、ファイアウォール ポリシーを作成します。
gcloud compute network-firewall-policies create test-fw-policy --global
次に、SSH 上り(内向き)トラフィックを許可するルールをポリシーに作成します。
gcloud compute network-firewall-policies rules create 1000 \ --action ALLOW \ --direction INGRESS \ --firewall-policy test-fw-policy \ --src-address-groups organizations/my-org/locations/europe-west1/addressGroups/test-address-group \ --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.restrictFirewallPolicyRulesSshAddressGroups]: Firewall policy rules that allow ingress SSH traffic can only be created with allowed address groups.
前の手順で作成したファイアウォール ポリシーを削除します。
gcloud compute network-firewall-policies delete test-fw-policy --global
同様に、特定プロジェクト スコープのアドレス グループのみを使用するように、すべての上り(内向き)SSH ファイアウォール ルールを適用できます。