전송 보안 구성

Anthos Service Mesh 1.5 이상에서는 자동 상호 TLS(자동 mTLS)가 기본적으로 사용 설정됩니다. 자동 mTLS를 사용하면 클라이언트 사이드카 프록시가 서버에 사이드카가 있는지 자동으로 감지합니다. 클라이언트 사이드카는 사이드카가 있는 워크로드에는 mTLS를 전송하고, 사이드카 없는 워크로드에는 일반 텍스트를 전송합니다. 하지만 서비스는 일반 텍스트와 mTLS 트래픽을 모두 수락합니다. Pod에 사이드카 프록시를 삽입할 때에도 mTLS 트래픽만 허용하도록 서비스를 구성하는 것이 좋습니다.

상호 mTLS

Anthos Service Mesh를 사용하면 단일 YAML 파일을 적용하여 애플리케이션 코드 외부에서 mTLS를 적용할 수 있습니다. Anthos Service Mesh는 전체 서비스 메시, 네임스페이스, 개별 워크로드에 인증 정책을 적용할 수 있는 유연성을 제공합니다.

메시 전체 mTLS 적용

메시의 모든 서비스가 일반 텍스트 트래픽을 수락하지 않도록 하려면 mTLS 모드를 STRICT(기본값은 PERMISSIVE)로 설정하여 메시 전체 PeerAuthentication 정책을 설정합니다. 메시 전체 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 트래픽에 대한 워크로드 수준 정책을 서비스로 집계할 수 없습니다. 이 동작을 관리하려면 대상 규칙을 구성해야 합니다.

  1. 네임스페이스의 특정 워크로드에 인증 정책을 적용합니다.

    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
  2. 일치하는 대상 규칙을 구성합니다.

    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

다음 단계