サービス アカウントは、アプリケーション、 自動プロセス、コンピューティング ワークロード(Compute Engine インスタンスなど)が 承認された API 呼び出しを 行うために使用する、人間以外の特別な Google アカウントです。 ユーザー アカウントとは異なり、サービス アカウントは一意のメールアドレスでのみ識別されます。
アプリケーションはサービス アカウントを使用して認証を行い、 Google Cloud リソースへのアクセス権を取得します。アプリケーションがサービス アカウントを使用して認証を行うと、サービス アカウントに明示的な Identity and Access Management 権限が割り当てられているリソースにアクセスできるようになります。これにより、マシン間認証のための安全で監査可能な一元化された方法が提供されます。
Secure Web Proxy では、サービス アカウントは認可とポリシー適用において重要な役割を果たします。サービス アカウントを使用してワークロードのトラフィック ソースを識別することで、IP アドレスだけでなくアプリケーションの ID に基づいてウェブ トラフィックを明示的に許可または拒否する、きめ細かい Secure Web Proxy ポリシーを作成できます。
このページでは、次の方法について説明します。
- 空のポリシーを使用して Secure Web Proxy インスタンスを作成する
- サービス アカウントを作成して IAM ロールを付与する
- Secure Web Proxy ルールを作成する
- 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 インスタンスを作成するには、まず空のセキュリティ ポリシーを作成し、そのポリシーを使用するウェブプロキシを作成する必要があります。
空のセキュリティ ポリシーを作成する
コンソール
コンソールで、[SWP ポリシー] ページに移動します。 Google Cloud
[ポリシーを作成] をクリックします。
[**名前**] フィールドに、ポリシーの名前( `
myswppolicy` など)を入力します。[説明] フィールドに、ポリシーの説明(
My new swp policyなど)を入力します。[**リージョン**] で、ポリシーを作成する リージョン(
us-central1など)を選択します。[作成] をクリックします。
Cloud Shell
任意のテキスト エディタを使用して、
policy.yamlファイルを作成します。作成した
policy.yamlファイルに以下を追加します。name: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME description: POLICY_DESCRIPTION次のように置き換えます。
PROJECT_NAME: プロジェクトの名前REGION: ポリシーが作成されるリージョン(us-central1など)POLICY_NAME: ポリシーの名前POLICY_DESCRIPTION: ポリシーの説明
gcloud network-security gateway-security-policies importコマンドを使用して、セキュリティ ポリシーをインポートします。gcloud network-security gateway-security-policies import POLICY_NAME \ --source=POLICY_FILE.yaml \ --location=REGION
ウェブプロキシを作成する
コンソール
コンソールで、[ウェブプロキシ] ページに移動します。 Google Cloud
[add_box**セキュア ウェブプロキシを作成**] をクリックします。
[名前] フィールドに、ウェブプロキシの名前(
myswpなど)を入力します。[説明] フィールドに、ウェブプロキシの説明(
My new swpなど)を入力します。[**ルーティング モード**] で、次のいずれかのオプションを選択します。
- 明示的: Secure Web Proxy インスタンスを明示的なプロキシ モードでデプロイします。
- ネクストホップ: Secure Web Proxy インスタンスをネクストホップ モードでデプロイします。
[**リージョン**] で、ウェブプロキシを作成するリージョン(
us-central1など)を選択します。[**ネットワーク**] で、 ウェブプロキシを作成するネットワークを選択します。
省略可: [ウェブプロキシの IP アドレス] フィールドに、Secure Web Proxy の IP アドレスを入力します。
前の手順で作成したサブネットワークに存在する Secure Web Proxy の IP アドレス範囲から IP アドレスを入力できます。 IP アドレスを入力しない場合、Secure Web Proxy インスタンスは選択したサブネットワークから IP アドレスを自動的に選択します。
[証明書] で、ウェブプロキシの作成に使用する証明書を選択します。
[**ポリシー**] で、ウェブプロキシに関連付けるために作成したポリシーを選択します。
[作成] をクリックします。
Cloud Shell
任意のテキスト エディタを使用して、
gateway.yamlファイルを作成します。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 のリストROUTING_MODE: 必要なウェブプロキシ ルーティング モードを指定します。EXPLICIT_ROUTING_MODE: Secure Web Proxy インスタンスを明示的なプロキシ モードでデプロイします。NEXT_HOP_ROUTING_MODE: Secure Web Proxy インスタンスをネクストホップ モードでデプロイします。
GATEWAY_IP_ADDRESS: 初期設定手順で以前に作成したプロキシ サブネット内の Secure Web Proxy インスタンスの IP アドレスのオプションのリストIP アドレスを一覧参照しない場合、フィールドを省略して、ウェブプロキシによって IP アドレスが選択されるようにします。
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 ロールを付与する
サービス アカウントを作成する:
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"
サービス アカウントに 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 ルールを作成する
コンソール
コンソールで、[SWP ポリシー] ページに移動します。 Google Cloud
以前に作成したポリシーの名前(
myswppolicyなど)をクリックします。[add_box**ルールを追加**] をクリックします。
ルールごとに、次の操作を行います。
[優先度] フィールドに、ルールの評価順序を数値で入力します。ルールは、最も高い優先度から順番に評価されます(最も高い優先度は
0)。[名前] フィールドに、ルールの名前を入力します。
[説明] フィールドに、ルールの説明を入力します。
[アクション] で、次のいずれかのオプションを選択します。
- 許可: ルールに一致する接続リクエストを許可します。
- 拒否: ルールに一致する接続リクエストを拒否します。
[ステータス] フィールドで、ルールの適用について次のいずれかのオプションを選択します。
- 有効: Secure Web Proxy インスタンスにルールを適用します。
- 無効: Secure Web Proxy インスタンスにルールを適用しません。
[セッションの一致] セクションで、以前に作成したサービス アカウントのメールアドレスを指定します。次に例を示します。
sessionMatcher: "source.matchServiceAccount(SERVICE_ACCOUNT) && host() == 'example.com'"SessionMatcherの構文の詳細については、CEL マッチャーの言語リファレンスをご覧ください。[アプリケーションの一致] セクションで、リクエストの一致条件を指定します。
[ルールを追加] をクリックします。
別のルールを追加するには、[ルールを追加] をクリックします。
Cloud Shell
任意のテキスト エディタを使用して、
rule.yamlファイルを作成します。適切なサービス アカウントから 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は、許可するサービス アカウントに置き換えます。これはサービス アカウントのメールアドレスである必要があります。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 インスタンス > セキュリティ ポリシーの通過 > 外部宛先への到達)を正しく流れていることを検証します。