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 リクエストを拒否します。
次のステップを実行して、拒否認可ポリシーを作成して適用します。
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
ポリシーを適用します。
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
ルールに基づいてリクエストを拒否する認可ポリシー
次の例では、パス /admin
にあるワークロード whereami
への受信 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