GKE で Envoy サイドカー サービス メッシュに Service Security を設定する

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

前提条件

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

GKE のサイドカーで認可ポリシーを設定する

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

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

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

認可ポリシーを使用すると、Envoy サイドカーに進入するトラフィックにアクセス制御を適用できます。ポリシーは Kubernetes デプロイメントに適用できます。Deployment は Authorization Policy と同じ Namespace に存在する必要があります。

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

cron ジョブなど、アウトバウンド呼び出しのみを行うワークロードがある場合は、ワークロードへの受信 HTTP リクエストを拒否するように認可ポリシーを構成できます。次の例では、ワークロード whereami への受信 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: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: wherami
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/"
    action: DENY
    EOF
    
  2. ポリシーを適用します。

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

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

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

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

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

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

    kubectl apply -f allow-authz-policy.yaml
    

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

次の例では、パス /admin にあるワークロード whereami への受信 HTTP GET リクエストを拒否します。

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

  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: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: whereami
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/admin"
          methods: ["GET"]
    action: DENY
    EOF
    
  2. ポリシーを適用します。

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