サービス アカウントを使用してポリシーを作成する

サービス アカウントは、アプリケーション、 自動プロセス、コンピューティング ワークロード(Compute Engine インスタンスなど)が 承認された API 呼び出しを 行うために使用する、人間以外の特別な Google アカウントです。 ユーザー アカウントとは異なり、サービス アカウントは一意のメールアドレスでのみ識別されます。

アプリケーションはサービス アカウントを使用して認証を行い、 Google Cloud リソースへのアクセス権を取得します。アプリケーションがサービス アカウントを使用して認証を行うと、サービス アカウントに明示的な Identity and Access Management 権限が割り当てられているリソースにアクセスできるようになります。これにより、マシン間認証のための安全で監査可能な一元化された方法が提供されます。

Secure Web Proxy では、サービス アカウントは認可とポリシー適用において重要な役割を果たします。サービス アカウントを使用してワークロードのトラフィック ソースを識別することで、IP アドレスだけでなくアプリケーションの ID に基づいてウェブ トラフィックを明示的に許可または拒否する、きめ細かい Secure Web Proxy ポリシーを作成できます。

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

始める前に

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

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

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

コンソール

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

    [SWP ポリシー] に移動

  2. [ポリシーを作成] をクリックします。

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

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

  5. [**リージョン**] で、ポリシーを作成する リージョン(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. コンソールで、[ウェブプロキシ] ページに移動します。 Google Cloud

    [ウェブプロキシ] に移動

  2. [add_box**セキュア ウェブプロキシを作成**] をクリックします。

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

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

  5. [**ルーティング モード**] で、次のいずれかのオプションを選択します。

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

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

  8. [**サブネットワーク**] で、初期設定時に作成した VPC サブネットを選択します。

  9. 省略可: [ウェブプロキシの IP アドレス] フィールドに、Secure Web Proxy の IP アドレスを入力します。

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

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

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

  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
    

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

    • 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 インスタンスが正常にデプロイされ、トラフィックをアクティブに受信している。

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

サービス アカウントを作成して IAM ロールを付与する

  1. サービス アカウントを作成する: gcloud iam service-accounts create コマンド を使用して、 Google Cloud プロジェクトに my-swp-sa という名前のサービス アカウントを作成します。

    gcloud iam service-accounts create my-swp-sa \
        --display-name="Secure Web Proxy service account" \
        --description="Service account for Secure Web Proxy instances"
  2. サービス アカウントに IAM ロールを付与する: gcloud projects add-iam-policy-binding コマンド を使用して、サービス アカウントに必要な IAM ロールを付与し、プロジェクト内のリソースを管理または使用できるようにします。 Google Cloud

    たとえば、サービス アカウントがネットワーク リソースを使用できるようにするには、 Compute ネットワーク ユーザー ロールroles/compute.networkUser)を付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:my-swp-sa@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/compute.networkUser"

    PROJECT_ID は、 Google Cloud プロジェクトの ID に置き換えます。

Secure Web Proxy ルールを作成する

コンソール

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

    [SWP ポリシー] に移動

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

  3. [add_box**ルールを追加**] をクリックします。

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

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

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

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

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

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

      • 有効: Secure Web Proxy インスタンスにルールを適用します。
      • 無効: Secure Web Proxy インスタンスにルールを適用しません。
    6. [セッションの一致] セクションで、以前に作成したサービス アカウントのメールアドレスを指定します。次に例を示します。

        sessionMatcher: "source.matchServiceAccount(SERVICE_ACCOUNT) && host() == 'example.com'"
      

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

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

    8. [ルールを追加] をクリックします。

  5. 別のルールを追加するには、[ルールを追加] をクリックします。

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 ファイルに以下を追加します。

    ```yaml
    sessionMatcher: "source.matchServiceAccount('SERVICE_ACCOUNT') && host() == 'example.com'"
    ```
    

    SERVICE_ACCOUNT は、許可するサービス アカウントに置き換えます。これはサービス アカウントのメールアドレスである必要があります。

  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
    

接続をテストする

接続を再度テストして、サービス アカウント、セキュリティ ポリシー ルール、ゲートウェイなど、Secure Web Proxy 構成全体が意図したとおりに動作していることを確認できます。

接続をテストするには、アタッチされた SERVICE_ACCOUNT を使用して、リソース(VM インスタンスなど)から curl コマンドを使用します。

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

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

すべてが正常に動作すると、200 OK ステータスコードが返されます。このステータスコードは、次の重要な結果を確認します。

  • 認可の成功: リソースから発信されたトラフィックが、割り当てられたサービス アカウントによって正しく識別され、この ID がセキュリティ ポリシーに追加した allow ルールと正常に一致していることを証明します。

  • エンドツーエンドの機能: トラフィックが構成されたパス(リソース > Secure Web Proxy インスタンス > セキュリティ ポリシーの通過 > 外部宛先への到達)を正しく流れていることを検証します。

次のステップ