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 であり、Deployment は Authorization Policy と同じ Namespace に存在する必要があります。
すべてのリクエストを拒否する認可ポリシー
cron ジョブなど、発信のみを行うワークロードがある場合は、そのワークロードへの受信 HTTP リクエストを拒否する認可ポリシーを構成できます。次の例では、ワークロード whereami
への受信 HTTP リクエストを拒否します。
この認可ポリシーを作成して適用する手順は次のとおりです。
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: whereami httpRules: - to: operations: - paths: - type: Prefix value: "/" action: DENY EOF
ポリシーを適用します。
kubectl apply -f deny-all-authz-policy.yaml
リクエストを許可する認可ポリシー
特定の条件に一致するリクエストのみを許可して残りを拒否する許可ポリシーを構成することもできます。次の例では、whereami
に対する認可ポリシーを構成し、HTTP ヘッダー x-user-role:admin
が存在する GET
リクエストのみを許可します。
この認可ポリシーを作成して適用する手順は次のとおりです。このポリシーを追加して結果を確認する前に、前に作成した拒否ポリシーを削除してください。
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
ポリシーを適用します。
kubectl apply -f allow-authz-policy.yaml
ルールに基づいてリクエストを拒否する認可ポリシー
次の例では、ワークロード whereami
がパス /admin
にある場合、そのワークロードへの受信 HTTP GET
リクエストを拒否します。
次のステップを実行して、拒否認可ポリシーを作成して適用します。
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
ポリシーを適用します。
kubectl apply -f deny-path-authz-policy.yaml