Anthos Service Mesh 1.5 以降では、自動相互 TLS(自動 mTLS)がデフォルトで有効になっています。自動 mTLS の場合、クライアント サイドカー プロキシがサーバーにサイドカーがあるかどうかを自動的に検出します。クライアント サイドカーは、サイドカーを含むワークロードには mTLS を送信し、サイドカーを含まないワークロードには平文を送信します。ただし、サービスは平文と mTLS トラフィックの両方を受け入れます。Pod にサイドカー プロキシを挿入する場合、mTLS トラフィックのみを受け入れるようにサービスを構成することをおすすめします。
Anthos Service Mesh では、PeerAuthentication
ポリシーを適用して、mTLS のみを受け入れるようにサービスを構成できます。Anthos Service Mesh には、サービス メッシュ全体、名前空間、個々のワークロードにポリシーを適用できる柔軟性があります。特定のワークロードにポリシーを指定した場合、そのポリシーが優先されます。たとえば、ワークロード固有のポリシーは、名前空間固有のポリシーよりも優先されます。ワークロードにポリシーが指定されていない場合、名前空間またはメッシュからポリシーが継承されます。
名前空間ごとに相互 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
メッシュ全体の 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
PeerAuthentication
ポリシーの検索と削除
サービス メッシュ内のすべての PeerAuthentication
ポリシーの一覧を表示するには、次のコマンドを実行します。
kubectl get peerauthentication --all-namespaces
PeerAuthentication
ポリシーがすでに適用されている場合は、kubectl delete
を使用して削除できます。
kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME