GKE でプロキシレス gRPC サービス メッシュにサービス セキュリティを設定する

このページでは、GKE でプロキシレス gRPC サービス メッシュにセキュリティ機能を設定する方法について説明します。

前提条件

このガイドは、以下がすでに行われていることを前提としています。

プロキシレス gRPC サービスに認可ポリシーを設定する。

このセクションでは、GKE の Cloud Service Mesh プロキシレス gRPC サービスにさまざまな種類の認可ポリシーを設定する方法について説明します。

認可ポリシーを作成する前に、GCPAuthzPolicy CustomResourceDefinition(CRD)をインストールする必要があります。

curl https://github.com/GoogleCloudPlatform/gke-networking-recipes/blob/main/gateway-api/config/mesh/crd/experimental/gcpauthzpolicy.yaml \
| kubectl apply -f -

認可ポリシーを使用すると、プロキシレス gRPC サービスに送信されるトラフィックにアクセス制御を適用できます。ポリシーは Kubernetes の Deployment に適用できます。Deployment は Authorization Policy と同じ名前空間に存在する必要があります。

すべてのリクエストを拒否する認可ポリシー

cron ジョブなど、発信のみを行うワークロードがある場合は、ワークロードへの受信 HTTP リクエストを拒否するように認可ポリシーを構成できます。次の例では、gRPC サービス psm-grpc-server への受信 HTTP リクエストを拒否します。

次のステップを実行して、拒否認可ポリシーを作成して適用します。

  1. deny-all-authz-policy.yaml という名前のファイルを作成して拒否ポリシーを作成します。

    cat >deny-all-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: default
    spec:
    targetRefs:
    - kind: Deployment
      name: psm-grpc-server
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/"
    action: DENY
    EOF
    
  2. ポリシーを適用します。

    kubectl apply -f deny-all-authz-policy.yaml
    

リクエストを許可する認可ポリシー

特定の条件に一致するリクエストのみを許可し、残りを拒否する許可ポリシーを構成することもできます。次の例では、psm-grpc-server に認可ポリシーを構成します。そこでは、リクエストに http ヘッダー x-user-role:admin が存在する POST リクエストのみが許可されます。

次の手順で許可認可ポリシーを作成して適用します。このポリシーを追加する前に、先に作成した拒否ポリシーを削除してから結果を確認します。

  1. allow-authz-policy.yaml という名前のファイルを作成してカスタム ポリシーを作成します。

    cat >allow-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: default
    spec:
    targetRefs:
    - kind: Deployment
      name: psm-grpc-server
    httpRules:
    - to:
        operations:
        - methods: ["POST"]
      when: "request.headers['x-user-role'] == 'admin'
    action: ALLOW
    EOF
    
  2. ポリシーを適用します。

    kubectl apply -f allow-authz-policy.yaml
    

ルールに基づいてリクエストを拒否する認可ポリシー

次の例では、ワークロード psm-grpc-server がパス /admin にある場合、そのワークロードへの受信 HTTP POST リクエストを拒否します。

次のステップを実行して、拒否認可ポリシーを作成して適用します。

  1. deny-path-authz-policy.yaml という名前のファイルを作成して拒否ポリシーを作成します。

    cat >deny-path-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: default
    spec:
    targetRefs:
    - kind: Deployment
      name: psm-grpc-server
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/admin"
          methods: ["GET"]
    action: DENY
    EOF
    
  2. ポリシーを適用します。

    kubectl apply -f deny-path-authz-policy.yaml