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

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

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

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

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

始める前に

  • 初期設定の手順を完了します。

  • 組織管理者にサービス アカウントへのアクセス権の付与をリクエストします。

  • 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. Google Cloud コンソールで、[SWP ポリシー] ページに移動します。

    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. [セキュア ウェブプロキシを作成] をクリックします。

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

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

  5. [ルーティング モード] で、[明示的] オプションを選択します。

  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
    addresses: [GATEWAY_IP_ADDRESS]
    scope: samplescope
    

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

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

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

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

    • SUBNETWORK: 初期設定の手順の一部として以前に作成した VPC サブネット

    • 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 ルールを定義するまで、すべてのトラフィックを拒否するというデフォルトのセキュリティ ポスチャーを正しく適用しています。

サービス アカウントの作成と 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 コマンドを使用して、 Google Cloud プロジェクト内のリソースを管理または使用できるように、必要な IAM ロールをサービス アカウントに付与します。

    たとえば、サービス アカウントがネットワーク リソースを使用できるようにするには、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. Google Cloud コンソールで、[SWP ポリシー] ページに移動します。

    SWP ポリシーに移動

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

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

  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 インスタンス > セキュリティ ポリシーの通過 > 外部宛先)をトラフィックが正しく流れていることを検証します。

次のステップ