1.13. 보안
서비스 메시 애플리케이션이 복잡한 마이크로 서비스를 사용하여 구성된 경우 Red Hat OpenShift Service Mesh를 사용하여 해당 서비스 간 통신 보안을 사용자 지정할 수 있습니다. 서비스 메시의 트래픽 관리 기능과 함께 OpenShift Container Platform의 인프라는 애플리케이션의 복잡성을 관리하고 마이크로서비스를 보호하는데 도움이 됩니다.
시작하기 전
프로젝트가 있는 경우 ServiceMeshMemberRoll
리소스에 프로젝트를 추가합니다.
프로젝트가 없는 경우 Bookinfo 샘플 애플리케이션을 설치하고 ServiceMeshMemberRoll
리소스에 추가합니다. 샘플 애플리케이션은 보안 개념을 설명하는 데 도움이 됩니다.
1.13.1. mTLS(mutual Transport Layer Security) 정보
mTLS(mutual Transport Layer Security)은 두 당사자가 서로 인증할 수 있도록 하는 프로토콜입니다. 일부 프로토콜(IKE, SSH)에서는 기본 인증 모드이며, 다른 프로토콜(TLS)에서는 선택적입니다. 애플리케이션 또는 서비스 코드를 변경하지 않고 mTLS를 사용할 수 있습니다. TLS는 서비스 메시 인프라와 두 사이드카 프록시 사이에서 전적으로 처리됩니다.
기본적으로 Red Hat OpenShift Service Mesh의 mTLS가 활성화되고 허용 모드로 설정됩니다. 여기서 서비스 메시의 사이드카는 일반 텍스트 트래픽과 mTLS를 사용하여 암호화된 연결을 모두 허용합니다. 메시의 서비스가 메시 외부 서비스와 통신하는 경우 엄격한 mTLS가 해당 서비스 간의 통신을 중단할 수 있습니다. 워크로드를 서비스 메시로 마이그레이션하는 동안 허용 모드를 사용합니다. 그러면 메시, 네임스페이스 또는 애플리케이션 전반에서 엄격한 mTLS를 활성화할 수 있습니다.
서비스 메시 컨트롤 플레인 수준에서 메시 전체에 mTLS를 활성화하면 애플리케이션 및 워크로드를 다시 작성하지 않고도 서비스 메시의 모든 트래픽을 보호할 수 있습니다. ServiceMeshControlPlane
리소스의 데이터 플레인 수준에서 메시의 네임스페이스를 보호할 수 있습니다. 트래픽 암호화 연결을 사용자 지정하려면 PeerAuthentication
및 DestinationRule
리소스를 사용하여 애플리케이션 수준에서 네임스페이스를 구성합니다.
1.13.1.1. 서비스 메시에서 엄격한 mTLS 활성화
워크로드가 외부 서비스와 통신하지 않으면 통신 중단 없이 메시 전체에서 mTLS를 빠르게 활성화할 수 있습니다. ServiceMeshControlPlane
리소스에서 spec.security.dataPlane.mtls
를 true
로 설정하여 활성화할 수 있습니다. Operator는 필요한 리소스를 생성합니다.
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane spec: version: v2.2 security: dataPlane: mtls: true
또한 OpenShift Container Platform 웹 콘솔을 사용하여 mTLS를 활성화할 수 있습니다.
프로세스
- 웹 콘솔에 로그인합니다.
- 프로젝트 메뉴를 클릭하고 Service Mesh Control Plane을 설치한 프로젝트(예: istio-system )를 선택합니다.
-
Operators
설치된 Operators를 클릭합니다. - 제공된 API에서 Service Mesh Control Plane을 클릭합니다.
-
ServiceMeshControlPlane
리소스의 이름(예:production
)을 클릭합니다. - 세부 정보 페이지에서 데이터 플레인 보안의 보안 섹션에서 토글을 클릭합니다.
1.13.1.1.1. 특정 서비스의 수신 연결에 대해 사이드카 구성
정책을 생성하여 개별 서비스 또는 네임스페이스에 대해 mTLS를 구성할 수도 있습니다.
절차
다음 예제를 사용하여 YAML 파일을 생성합니다.
PeerAuthentication 정책 예 policy.yaml
apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: default namespace: <namespace> spec: mtls: mode: STRICT
-
<namespace>를
서비스가 있는 네임스페이스로 바꿉니다.
-
다음 명령을 실행하여 서비스가 있는 네임스페이스에 리소스를 생성합니다. 방금 생성한 정책 리소스의
namespace
필드와 일치해야 합니다.$ oc create -n <namespace> -f <policy.yaml>
자동 mTLS를 사용하지 않고 PeerAuthentication
을 STRICT으로 설정하는 경우 서비스에 대한 DestinationRule
리소스를 생성해야 합니다.
1.13.1.1.2. 발신 연결에 대한 사이드카 구성
메시에서 다른 서비스로 요청을 보낼 때 mTLS를 사용하도록 서비스 메시를 구성하는 대상 규칙을 생성합니다.
절차
다음 예제를 사용하여 YAML 파일을 생성합니다.
DestinationRule 예제 destination-rule.yaml
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: default namespace: <namespace> spec: host: "*.<namespace>.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL
-
<namespace>
를 서비스가 있는 네임스페이스로 바꿉니다.
-
다음 명령을 실행하여 서비스가 있는 네임스페이스에 리소스를 생성합니다. 방금 생성한
DestinationRule
리소스의namespace
필드와 일치해야 합니다.$ oc create -n <namespace> -f <destination-rule.yaml>
1.13.1.1.3. 최소 및 최대 프로토콜 버전 설정
사용자 환경에 서비스 메시의 암호화된 트래픽에 대한 특정 요구 사항이 있는 경우 ServiceMeshControlPlane
리소스에 spec.security.controlPlane.tls.minProtocolVersion
또는 spec.security.controlPlane.tls.maxProtocolVersion
을 설정하여 허용되는 암호화 기능을 제어할 수 있습니다. Service Mesh Control Plane 리소스에 구성된 해당 값은 TLS를 통해 안전하게 통신할 때 메시 구성 요소에서 사용하는 최소 및 최대 TLS 버전을 정의합니다.
기본값은 TLS_AUTO
이며 TLS 버전을 지정하지 않습니다.
값 | 설명 |
---|---|
| default |
| TLS 버전 1.0 |
| TLS 버전 1.1 |
| TLS 버전 1.2 |
| TLS 버전 1.3 |
절차
- 웹 콘솔에 로그인합니다.
- 프로젝트 메뉴를 클릭하고 Service Mesh Control Plane을 설치한 프로젝트(예: istio-system )를 선택합니다.
-
Operators
설치된 Operators를 클릭합니다. - 제공된 API에서 Service Mesh Control Plane을 클릭합니다.
-
ServiceMeshControlPlane
리소스의 이름(예:production
)을 클릭합니다. - YAML 탭을 클릭합니다.
YAML 편집기에 다음 코드 조각을 삽입합니다.
minProtocolVersion
의 값을 TLS 버전 값으로 바꿉니다. 이 예에서 최소 TLS 버전은TLSv1_2
로 설정됩니다.ServiceMeshControlPlane 스니펫
kind: ServiceMeshControlPlane spec: security: controlPlane: tls: minProtocolVersion: TLSv1_2
- 저장을 클릭합니다.
- 새로 고침을 클릭하여 변경 사항이 올바르게 업데이트되었는지 확인합니다.
1.13.1.2. Kiali를 사용하여 암호화 검증
Kiali 콘솔은 애플리케이션, 서비스 및 워크로드에 mTLS 암호화가 활성화되어 있는지 여부를 확인하는 여러 가지 방법을 제공합니다.
그림 1.5. 마스트 헤드 아이콘 메시 전체 mTLS 활성화
마스트 헤드 오른쪽에 있는 Kiali는 메시가 전체 서비스 메시에 대해 mTLS를 엄격하게 활성화한 경우 잠금 아이콘을 표시합니다. 이는 메시의 모든 통신이 mTLS를 사용한다는 것을 의미합니다.
그림 1.6. masthead 아이콘 메시 전체 mTLS가 부분적으로 활성화됨
메시가 PERMISSIVE
모드로 구성되거나 메시 전체 mTLS 구성에 오류가 있는 경우 Kiali는 hollow 잠금 아이콘을 표시합니다.
그림 1.7. 보안 배지
그래프 페이지에는 mTLS가 활성화되었음을 나타내기 위해 그래프 에지에 보안 배지를 표시하는 옵션이 있습니다. 그래프에서 보안 배지를 활성화하려면 표시 메뉴에서 Show badges 아래에서 보안 확인란을 선택합니다. 에지에 잠금 아이콘이 표시되면 mTLS가 활성화된 요청이 하나 이상 있음을 의미합니다. mTLS 및 비mTLS 요청이 모두 있는 경우 side-panel은 mTLS를 사용하는 요청의 백분율을 표시합니다.
애플리케이션 세부 정보 개요 페이지에는 mTLS가 활성화된 하나 이상의 요청이 있는 그래프 에지에 보안 아이콘이 표시됩니다.
워크로드 세부 정보 개요 페이지에는 mTLS가 활성화된 요청이 하나 이상 있는 그래프 에지에 보안 아이콘이 표시됩니다.
서비스 세부 정보 개요 페이지에는 mTLS가 활성화된 요청이 하나 이상 있는 그래프 에지에 보안 아이콘이 표시됩니다. 또한 Kiali는 mTLS에 대해 구성된 포트 옆에 네트워크 섹션에 잠금 아이콘을 표시합니다.