マネージド Anthos Service Mesh の VPC Service Controls

マネージド Anthos Service Mesh では、1.22.1-gke.100 以上のリリースを使用した GKE クラスタにおいて、すべての Anthos Service Mesh チャネルで VPC Service Controls(VPC-SC)のプレビュー版がサポートされています。

始める前に

VPC-SC の組織ポリシーとサービス境界は、組織レベルで構成されます。作業を行うユーザーに VPC-SC の管理に必要なロールが付与されていることを確認してください。

組織ポリシーを構成する

  1. 組織管理者は、このセクションの説明に従って組織ポリシーを構成する必要があります。そうしないと、VPC-SC は適用されません。組織または個々のプロジェクトの組織ポリシーを編集し、Console または以下の gcloud コマンドを使用して「ASM マネージド コントロール プレーンで許可される VPC-SC モード」の制約を「COMPATIBLE」に設定します。

    gcloud resource-manager org-policies allow \
      meshconfig.allowedVpcscModes COMPATIBLE \
      --project=PROJECT_ID

    ここで

    • PROJECT_ID は、更新するプロジェクトの ID です。

    または

    gcloud resource-manager org-policies allow \
      meshconfig.allowedVpcscModes COMPATIBLE \
      --organization=ORGANIZATION_ID

    ここで

    • ORGANIZATION_ID は、更新する組織の ID です。

VPC-SC サービス境界を設定する

以下の手順に沿ってサービス境界を作成または更新します。

  1. プロジェクトをサービス境界に追加します。複数のプロジェクトがある場合は、各プロジェクトをサービス境界に含めることができます。

  2. 制限付きサービスをサービス境界に追加します。

    サービス境界の許可されたサービスのリストと制限付きサービスのリストに特定のサービスを追加する必要があります。そうすることで、Anthos Service Mesh クラスタがそれらのサービスにアクセスできます。これらのサービスへのアクセスは、クラスタの Virtual Private Cloud(VPC)ネットワーク内でも制限されます。

    これらのサービスを追加しないと、Anthos Service Mesh でエラーが発生するか、Anthos Service Mesh が適切に機能しない場合があります。たとえば、Mesh Configuration API をサービス境界に追加しておかないと、Anthos Service Mesh でエラーが発生し、ワークロードは Envoy の構成をマネージド コントロール プレーンから受信できません。

    Console

    1. サービス境界の更新の手順に沿って境界を編集します。
    2. [VPC サービス境界の編集] ページをクリックします。
    3. [制限付きサービス] の [保護するサービス] で、[サービスを追加] をクリックします。
    4. [制限するサービスの指定] ダイアログで [サービスをフィルタ] をクリックし、「Mesh Configuration API」と入力します。
    5. サービスのチェックボックスをオンにします。
    6. [Mesh Configuration API を追加] をクリックします。
    7. 手順 3~6 を繰り返して、次のサービスを追加します。Cloud Service Mesh Certificate Authority APIGKE Hub APICloud IAM APIStackdriver Logging APICloud Trace APICloud Monitoring APIGoogle Cloud Resource Manager APICloud Run APIGoogle Compute Engine APIGoogle Container Registry APIArtifact Registry APIGoogle Cloud Storage API
    8. [保存] をクリックします。

    gcloud

    制限付きサービスのリストを更新するには、update コマンドを使用して、追加するサービスをカンマ区切りリストとして指定します。

    gcloud access-context-manager perimeters update PERIMETER_NAME \
      --add-restricted-services=meshconfig.googleapis.com,meshca.googleapis.com,gkehub.googleapis.com,iam.googleapis.com,monitoring.googleapis.com,cloudtrace.googleapis.com,monitoring.googleapis.com,cloudresourcemanager.googleapis.com,run.googleapis.com,compute.googleapis.com,containerregistry.googleapis.com,artifactregistry.googleapis.com,storage.googleapis.com \
      --policy=POLICY_NAME

    ここで

    • PERIMETER_NAME は、更新するサービス境界の名前です。

    • POLICY_NAME は組織のアクセス ポリシーの名前です。例: 330193482019

  3. [VPC のアクセス可能なサービス] をクリックして「すべての制限付きサービス」に設定し、上記の手順で制限したサービスに VPC-SC 境界内から引き続きアクセスできるようにします。

  4. asmcli コマンドを実行している ID にサービス境界へのアクセスを許可する上り(内向き)ルールを追加します。

    詳細については、サービス境界の更新をご覧ください。

VPC-SC 境界にマネージド ASM をインストールする

このセクションでは組織の管理者権限は必要ありませんが、VPC-SC ポリシーを遵守する必要があります。つまり、インストール中に追加のフラグ --use-vpcsc を使用する必要があります。そうしないと、セキュリティ制御が正常に機能しません。

マネージド Anthos Service Mesh を構成するの手順に沿って操作します。続いて、コントロール プレーンが正常にプロビジョニングされていることを確認し、VPC-SC 関連のエラーがないことを確かめます。

トラブルシューティング

最新の GKE 1.22 イメージでクラスタを作成できない

VPC-SC の制限された環境で最新の 1.22 イメージを使用してクラスタを作成できないという既知の問題があります。この問題を回避するには、次のように、まずデフォルトの GKE チャンネル イメージでこのクラスタを作成してから、イメージをアップグレードします。

gcloud container clusters create CLUSTER \
  --region REGION \
  --release-channel=rapid \
  --workload-pool=PROJECT_ID.svc.id.goog \
  --project PROJECT_ID
gcloud container clusters upgrade CLUSTER \
  --region REGION \
  --master --cluster-version 1.22 \
  --project PROJECT_ID

コンテナがコンテナ イメージをダウンロードできない

これは、イメージがサービス境界の外側にある場合に発生することがあります。ダウンロードするイメージを境界内にあるバケットに移動するか、境界を更新して下り(外向き)ルールを追加します。通常、下り(外向き)ルールでは、選択した ID に Container Registry APIArtifact Registry APICloud Storage API へのアクセスを許可できます。

ControlPlaneRevision CRD のステータス フィールドに VPC-SC エラーが表示される

これは、インストール時に「--use-vpcsc」フラグを指定しなかった場合に発生することがあります。その場合は再実行して問題ありません。

それ以外の場合は、次のコマンドを実行してエラーの詳細情報を取得します。

gcloud logging read --project=PROJECT_ID \
'protoPayload.metadata.@type=type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata'

ここで

  • PROJECT_ID は、エラーが発生したプロジェクトのプロジェクト ID です。