Anthos Service Mesh 1.5 以降では、自動相互 TLS(自動 mTLS)がデフォルトで有効になっています。自動 mTLS の場合、クライアント サイドカー プロキシがサーバーにサイドカーがあるかどうかを自動的に検出します。クライアント サイドカーは、サイドカーを含むワークロードには mTLS を送信し、サイドカーを含まないワークロードには書式なしテキストを送信します。ただし、サービスは書式なしテキストと mTLS トラフィックの両方を受け入れます。Pod にサイドカー プロキシを挿入する場合、mTLS トラフィックのみを受け入れるようにサービスを構成することをおすすめします。
Anthos Service Mesh では、単一の YAML ファイルを適用することで、アプリケーション コードの外部で mTLS を適用できます。Anthos Service Mesh には、サービス メッシュ全体、名前空間、個々のワークロードに認証ポリシーを適用できる柔軟性があります。
メッシュ全体の mTLS を適用する
メッシュ内のすべてのサービスが書式なしテキストのトラフィックを受け入れないようにするには、mTLS モードを STRICT
に設定してメッシュ全体の PeerAuthentication
ポリシーを設定します(デフォルトは PERMISSIVE
)。メッシュ全体の PeerAuthentication
ポリシーにはセレクタがないため、このポリシーはルート名前空間 istio-system
に適用する必要があります。ポリシーをデプロイすると、コントロール プレーンが TLS 証明書を自動的にプロビジョニングし、ワークロードの相互認証を可能にします。
メッシュ全体の mTLS を適用するには:
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
EOF
予想される出力:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
名前空間ごとに相互 TLS を有効にする
特定の名前空間内のすべてのワークロードで mTLS を有効にするには、名前空間全体の認証ポリシーを使用します。ポリシーの仕様はメッシュ全体のポリシーと同じですが、適用する名前空間を metadata
で指定します。
kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "AUTH_POLICY_NAME"
namespace: "NAMESPACE"
spec:
mtls:
mode: STRICT
EOF
予想される出力:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
ワークロードごとに相互 TLS を有効にする
特定のワークロードに PeerAuthentication
ポリシーを設定するには、selector
セクションを構成し、目的のワークロードに一致するラベルを指定する必要があります。ただし、Anthos Service Mesh は、サービスへの送信 mTLS トラフィックのワークロード レベルのポリシーを集計できません。この動作を管理するには、宛先ルールを構成する必要があります。
名前空間の特定のワークロードに認証ポリシーを適用します。
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "AUTH_POLICY_NAME" namespace: "NAMESPACE" spec: selector: matchLabels: app: WORKLOAD mtls: mode: STRICT EOF
予想される出力:
peerauthentication.security.istio.io/AUTH_POLICY_NAME created
一致する宛先ルールを構成します。
cat <<EOF | kubectl apply -n NAMESPACE -f - apiVersion: "networking.istio.io/v1alpha3" kind: "DestinationRule" metadata: name: "DEST_RULE_NAME" spec: host: "WORKLOAD.NAMESPACE.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL EOF
予想される出力:
destinationrule.networking.istio.io/WORKLOAD created
PeerAuthentication
ポリシーの検索と削除
サービス メッシュ内のすべての PeerAuthentication
ポリシーの一覧を表示するには、次のコマンドを実行します。
kubectl get peerauthentication --all-namespaces
PeerAuthentication
ポリシーがすでに適用されている場合は、kubectl delete
を使用して削除できます。
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME