タグを使用してポリシーを作成する

このページでは、 Resource Manager タグを Secure Web Proxy ポリシーに適用する方法について説明します。Resource Manager タグは、仮想マシン(VM)インスタンスなどのさまざまな リソース Google Cloud に適用できるラベルです。タグを使用すると、既存の組織ラベルを使用して、ネットワーク全体に条件付きアクセス制御を適用できます。

これらのタグを使用すると、次の操作を行うことができます。

  • ワークロードのセグメント化: productiondevelopment などのさまざまな環境や、frontenddatabase などのサービスタイプを一意に識別できます。

  • アクセス制御の一元化: これらのタグに基づいて Secure Web Proxy ポリシーを 作成できます。たとえば、「tag segment=production タグを持つリソースから発信されたトラフィックのみが、特定の URL セットにアクセスできる」というポリシー ルールを作成できます。

このページでは、次の方法について説明します。

始める前に

  • 初期設定の手順を構成します。

  • タグの作成と更新に必要なロールを組織管理者に付与してもらいます 。

  • Google Cloud CLI バージョン 406.0.0 以降がインストールされていることを確認します。

    gcloud version | head -n1
    

    以前のバージョンの gcloud CLI がインストールされている場合は、バージョンを更新します。

    gcloud components update --version=406.0.0
    

空のポリシーを使用して Secure Web Proxy インスタンスを作成する

Secure Web Proxy インスタンスを作成するには、まず空のセキュリティ ポリシーを作成し、そのポリシーを使用するウェブプロキシを作成する必要があります。

空のセキュリティ ポリシーを作成する

コンソール

  1. コンソールで、[SWP Policies] ページに移動します。 Google Cloud

    [SWP Policies] に移動

  2. [Create a policy] をクリックします。

  3. [Name] フィールドに、ポリシーの名前( myswppolicy など)を入力します。

  4. [Description] フィールドに、ポリシーの説明( My new swp policy など)を入力します。

  5. [Regions] で、ポリシーを作成する リージョン(us-central1 など)を選択します。

  6. [作成] をクリックします。

Cloud Shell

  1. テキスト エディタを使用して policy.yaml ファイルを作成します。

  2. policy.yaml ファイルに次のコードを追加します。

    name: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME
    description: POLICY_DESCRIPTION
    

    次のように置き換えます。

    • PROJECT_NAME: プロジェクトの名前

    • REGION: ポリシーが作成されるリージョン(us-central1 など)

    • POLICY_NAME: ポリシーの名前

    • POLICY_DESCRIPTION: ポリシーの説明

  3. gcloud network-security gateway-security-policies import コマンドを使用して、セキュリティ ポリシーをインポートします。

    gcloud network-security gateway-security-policies import POLICY_NAME \
        --source=POLICY_FILE.yaml \
        --location=REGION
    

ウェブプロキシを作成する

コンソール

  1. コンソールで、[Web Proxies] ページに移動します。 Google Cloud

    [Web Proxies] に移動

  2. [add_box**Create a secure web proxy**] をクリックします。

  3. [Name] フィールドに、ウェブプロキシの名前(myswp など)を入力します。

  4. [Description] フィールドに、ウェブプロキシの説明(My new swp など)を入力します。

  5. [Routing mode] で、次のいずれかのオプションを選択します。

    • Explicit: Secure Web Proxy インスタンスを明示的なプロキシ モードでデプロイします。
    • ネクストホップ: Secure Web Proxy インスタンスをネクストホップ モードでデプロイします。
  6. [Regions] で、 ウェブプロキシを作成するリージョン(us-central1 など)を選択します。

  7. [Network] で、 ウェブプロキシを作成するネットワークを選択します。

  8. [Subnetwork] で、初期設定時に作成した [VPC subnet] を選択します。

  9. 省略可: [Web proxy IP address] フィールドに、Secure Web Proxy の IP アドレスを入力します。

    前の手順で作成したサブネットワークに存在する Secure Web Proxy IP アドレスの範囲から IP アドレスを入力できます。 IP アドレスを入力しない場合、Secure Web Proxy インスタンスは、選択したサブネットワークから IP アドレスを自動的に選択します。

  10. [Certificate] で、ウェブプロキシの作成に使用する証明書を選択します。

  11. [Policy] で、ウェブプロキシに関連付けるために作成したポリシーを選択します。

  12. [作成] をクリックします。

Cloud Shell

  1. テキスト エディタを使用して gateway.yaml ファイルを作成します。

  2. gateway.yaml ファイルに次のコードを追加します。

    name: projects/PROJECT_NAME/locations/REGION/gateways/GATEWAY_NAME
    type: SECURE_WEB_GATEWAY
    ports: [GATEWAY_PORT_NUMBERS]
    certificateUrls: [CERTIFICATE_URLS]
    gatewaySecurityPolicy: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME
    network: projects/PROJECT_NAME/global/networks/NETWORK_NAME
    subnetwork: projects/PROJECT_NAME/regions/REGION/subnetworks/SUBNETWORK
    routingMode: ROUTING_MODE
    addresses: [GATEWAY_IP_ADDRESS]
    scope: samplescope
    

    省略可: 他の Google Cloud リージョンのクライアント アプリケーションがプロキシに接続できるようにするには、Secure Web Proxy インスタンスの作成時にグローバル アクセスを有効にします。

    gateway.yaml ファイルに allow_global_access フィールドを追加して、true に設定します。

    重要: allow_global_access は、Secure Web Proxy インスタンスを作成するときにのみ有効にできます。この設定は後で構成できません。

    name: projects/PROJECT_NAME/locations/REGION/gateways/GATEWAY_NAME
    type: SECURE_WEB_GATEWAY
    ports: [GATEWAY_PORT_NUMBERS]
    certificateUrls: [CERTIFICATE_URLS]
    gatewaySecurityPolicy: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME
    network: projects/PROJECT_NAME/global/networks/NETWORK_NAME
    subnetwork: projects/PROJECT_NAME/regions/REGION/subnetworks/SUBNETWORK
    addresses: [GATEWAY_IP_ADDRESS]
    scope: samplescope
    allow_global_access: true
    

    次のように置き換えます。

    • GATEWAY_NAME: この Secure Web Proxy インスタンスの名前

    • GATEWAY_PORT_NUMBERS: このゲートウェイのポート番号のリスト([80,443] など)

    • CERTIFICATE_URLS: SSL 証明書の URL のリスト

    • SUBNETWORK: 初期設定時に作成した VPC サブネット

    • ROUTING_MODE: 必要なウェブプロキシ ルーティング モードを指定します。

      • EXPLICIT_ROUTING_MODE: Secure Web Proxy インスタンスを明示的なプロキシ モードでデプロイします。
      • NEXT_HOP_ROUTING_MODE: Secure Web Proxy インスタンスをネクストホップ モードでデプロイします。
    • GATEWAY_IP_ADDRESS: 初期設定手順で以前に作成したプロキシ サブネット内の Secure Web Proxy インスタンスの IP アドレスのオプションのリスト

      IP アドレスを一覧参照しない場合、フィールドを省略して、ウェブプロキシによって IP アドレスが選択されるようにします。

  3. gcloud network-services gateways import コマンドを使用して、Secure Web Proxy インスタンスを作成します。

    gcloud network-services gateways import GATEWAY_NAME \
        --source=gateway.yaml \
        --location=REGION
    

接続をテストする

接続をテストするには、Virtual Private Cloud(VPC)ネットワーク内の任意の仮想マシン(VM)インスタンスから curl コマンドを使用します。

  curl -x https://GATEWAY_IP_ADDRESS:PORT_NUMBER https://www.example.com --proxy-insecure
  

すべてが正常に機能している場合、Secure Web Proxy インスタンスは 403 Forbidden ステータス コードを返します。このエラーは、次のことを確認します。

  • Secure Web Proxy インスタンスが正常にデプロイされ、トラフィックをアクティブに受信している。

  • Secure Web Proxy ポリシーは、次のセクションで特定の allow ルールを定義するまで、すべてのトラフィックを拒否するデフォルトのセキュリティ体制を正しく適用している。

Resource Manager タグを作成して適用する

  1. セキュアタグのキーと値を作成する

    : 制限付き環境のタグを作成する手順は次の とおりです。

    1. タグキー(access-level)を gcloud resource-manager tags keys create コマンド を使用して、目的を GCE_FIREWALL に設定して作成します。

    2. 作成コマンドの出力から、または gcloud resource-manager tags keys list コマンドを使用して、タグキー ID を取得します。 この ID は、タグ値を特定のタグキーにリンクするために必要です。

    3. gcloud resource-manager tags values create コマンドを使用してタグ値(restricted)を作成し、タグキー ID を親として指定します。

    # Create the tag key
    # The output provides a unique ID, such as "tagKeys/1234567890"
    
    gcloud resource-manager tags keys create "access-level" \
        --parent="organizations/1234567890" \
        --purpose="GCE_FIREWALL" \
        --purpose-values="execution_env=ANS"
    
    # Create the tag value and connect it to the key
    # The "--parent" flag identifies to which key this value belongs
    
    gcloud resource-manager tags values create "restricted" \
        --parent="tagKeys/1234567890"
    
  2. タグを VM インスタンスに適用する

    これらのタグを適用すると、VM インスタンスからの下り(外向き)トラフィックが特定のタグ ID に関連付けられます。これにより、プロキシはワークロードを認識し、セキュリティ ポリシー ルールを適用できます。

    : internal-tool という名前の VM インスタンスがあるとします。 gcloud resource-manager tags bindings create コマンドを使用して、restricted タグ値を internal-tool に適用できます。 このタグ割り当てにより、プロキシは internal-tool VM インスタンスから発信されたトラフィックを識別できます。

    # Attach the "restricted" tag to a specific VM instance
    
    
    gcloud resource-manager tags bindings create \
        --parent="//[compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/internal-tool](https://compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/internal-tool)" \
        --tag-value="tagValues/987654321"
    

Secure Web Proxy ルールを作成する

コンソール

  1. コンソールで、[SWP Policies] ページに移動します。 Google Cloud

    [SWP Policies] に移動

  2. ポリシーの名前(myswppolicy など)をクリックします。

  3. [Add rule] をクリックします。

  4. ルールごとに、次の操作を行います。

    1. [**Priority**] に、ルールの数値評価順序を入力します。 ルールは、最も高い優先度から順番に評価されます(最も高い優先度は 0)。

    2. [Name] フィールドに、ルールの名前を入力します。

    3. [Description] フィールドに、ルールの説明を入力します。

    4. [Action] で、次のいずれかのオプションを選択します。

      • 許可: ルールに一致する接続リクエストを許可します。
      • 拒否: ルールに一致する接続リクエストを拒否します。
    5. [Status] フィールドで、ルールの適用について次のいずれかのオプションを選択します。

      • 有効: Secure Web Proxy インスタンスにルールを適用します。
      • 無効: Secure Web Proxy インスタンスにルールを適用しません。
    6. [Session match] セクションで、前のセクションで作成したタグの一意の ID を指定します。次に例を示します。

      sessionMatcher: "source.matchTag('TAG&&_VALUE')  host() == 'example.com'"
      

      SessionMatcher の構文の詳細については、CEL マッチャーの言語リファレンスをご覧ください。

    7. [Application match] セクションで、リクエストの一致条件を指定します。

    8. [Add rule] をクリックします。

Cloud Shell

  1. テキスト エディタを使用して rule.yaml ファイルを作成します。

  2. 必要なタグから URL へのアクセスを許可するには、次のコードを rule.yaml ファイルに追加します。

    name: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME/rules/RULE_NAME
    description: RULE_DESCRIPTION
    enabled: true
    priority: RULE_PRIORITY
    sessionMatcher: CEL_EXPRESSION
    basicProfile: ALLOW
    

    次のように置き換えます。

    • RULE_NAME: このルールの名前
    • RULE_DESCRIPTION: ルールの説明
    • RULE_PRIORITY: このルールの優先度。数値が小さいほど優先度が高くなります
    • CEL_EXPRESSION: Common Expression Language(CEL)式。詳細については、 CEL マッチャーの言語リファレンスをご覧ください。

    たとえば、必要なタグから example.com へのアクセスを許可するには、次の sessionMatcher 行を YAML ファイルに追加します。

    sessionMatcher: "source.matchTag('TAG&&_VALUE')  host() == 'example.com'"
    

    TAG_VALUE は、許可するタグに置き換えます。タグが数値リソース識別子の形式(tagValues/567890123456 など)に従っていることを確認します。

  3. gcloud network-security gateway-security-policies rules import コマンドを使用して、作成したルールをインポートします。

    gcloud network-security gateway-security-policies rules import RULE_NAME \
        --source=RULE_FILE.yaml \
        --location=REGION \
        --gateway-security-policy=POLICY_NAME
    

ポリシー構成をテストする

接続を再度テストして、ID に Resource Manager タグを使用する Secure Web Proxy ポリシーが意図したとおりに機能していることを確認できます。

接続をテストするには、適切な TAG_VALUE タグに関連付けられている任意の VM から curl コマンドを使用します。

curl -x https://IPv4_ADDRESS:443 http://example.com
--proxy-insecure

IPv4_ADDRESS は、Secure Web Proxy インスタンスの IPv4 アドレスに置き換えます。

すべてが正常に機能している場合、200 OK または 403 Forbidden ステータス コードが返されます。これらのレスポンスは、次の主な結果を確認します。

  • タグベースの成功: 200 OK ステータス コードは、正しい Resource Manager タグが適用された VM からのトラフィックがポリシー ルールに一致し、プロキシを通過できることを検証します。この検証済みの一致により、接続が成功します。

  • タグベースの拒否: 403 Forbidden ステータス コードは、指定されたタグがない VM または誤ったタグを持つ VM からのトラフィックがポリシーによって正しくアクセスを拒否されていることを確認します。この適用により、タグベースのセグメンテーションと適用が意図したとおりに機能していることが証明されます。

次のステップ