Apigee mTLS 기능은 프라이빗 클라우드 클러스터의 Edge에 있는 구성요소 간 통신에 보안을 추가합니다. 서비스 메시를 구성하고 설치하는 업계 표준 방법을 제공합니다. 패키지 관리 및 구성 자동화를 지원합니다.
아키텍처 개요
Apigee mTLS는 구성요소 간의 안전한 통신을 제공하기 위해 구성요소 간에 상호 인증된 안전한 TLS 연결을 설정하는 서비스 메시를 사용합니다.
다음 이미지는 Apigee mTLS가 보호하는 Apigee 구성요소 (in red) 간의 연결을 보여줍니다. 이미지에 표시된 포트는 예시입니다. 각 구성요소가 사용할 수 있는 범위 목록은 포트 사용량을 참조하세요.
'M'으로 표시된 포트는 구성요소를 관리하는 데 사용되며 관리 서버가 액세스할 수 있도록 구성요소에서 열려 있어야 합니다.
위 다이어그램에서 볼 수 있듯이 Apigee mTLS는 다음을 포함한 대부분의 클러스터 구성요소 간 연결에 보안을 추가합니다.
소스 | 대상 | |
---|---|---|
관리 서버 | Router, MP, QPid, LDAP, Postgres, Jokeeper, Cassandra 노드 | |
라우터 | 루프백, Qpid, 주키퍼, Cassandra 노드 | |
메시지 프로세서 | 루프백, Qpid, 주키퍼, Cassandra 노드 | |
JoKeeper 및 Cassandra | 기타 동물원키퍼 및 Cassandra 노드 | |
Edge UI | SMTP (외부 IDP만 해당) | |
Postgres | 기타 Postgres, 동물원키퍼, Cassandra 노드 |
메일 암호화/복호화
Apigee mTLS 서비스 메시는 클러스터의 각 JoKeeper 노드에서 실행되는 Consul 서버와 클러스터의 모든 노드에서 다음 Consul 서비스로 구성됩니다.
- 호스트 노드의 발신 메시지를 가로채는 이그레스 프록시 이 서비스는 발신 메시지를 대상 위치로 보내기 전에 암호화합니다.
- 호스트 노드에서 수신 메시지를 가로채는 인그레스 프록시 이 서비스는 수신 메시지를 최종 대상으로 보내기 전에 복호화합니다.
예를 들어 관리 서버가 라우터에 메시지를 보내면 이그레스 프록시 서비스는 발신 메시지를 가로채서 암호화한 후 라우터로 보냅니다. 라우터의 노드가 메시지를 수신하면 인그레스 프록시 서비스는 메시지를 복호화한 다음 처리를 위해 라우터 구성요소에 전달합니다.
이 모든 작업은 Edge 구성요소에 투명하게 발생하며, Consul 프록시 서비스에서 수행되는 암호화 및 복호화 프로세스를 인식하지 못합니다.
또한 Apigee mTLS는 트래픽 리디렉션을 관리하는 Linux 방화벽 서비스인 iptables
유틸리티를 사용합니다.
요구사항
Apigee mTLS를 설치하려면 환경이 다음 요구사항을 충족해야 합니다.
다음 섹션에서는 이러한 각 요구사항을 자세히 설명합니다.
버전, 플랫폼, 토폴로지
다음 표에는 mTLS 요구사항이 나와 있습니다.
요구사항 | 설명 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
버전 |
|
||||||||||||
토폴로지 | 주키퍼 노드를 3개 이상 포함해야 합니다. 따라서 5, 9, 12 (멀티 데이터 센터) 또는 13개의 노드를 사용하는 토폴로지에만 Apigee mTLS를 설치할 수 있습니다. 자세한 내용은 설치 토폴로지를 참조하세요. | ||||||||||||
플랫폼/운영체제 | 다음 값을 사용하여 Apigee mTLS가 특정 OS에서 지원되는지 확인합니다.
Apigee mTLS는 실행 중인 프라이빗 클라우드용 Apigee Edge의 해당 버전에서 지원되는 모든 OS를 지원하지 않을 수도 있습니다. 예를 들어 v4.19.06이 CentOS x 및 y를 지원한다고 해서 v4.19.06의 CentOS x 및 y에서 Apigee mTLS가 지원되는 것은 아닙니다. |
유틸리티/패키지
Apigee mTLS를 사용하려면 설치 프로세스를 시작하기 전에 관리 머신을 포함하여 클러스터의 각 머신에 다음 패키지를 설치하고 사용 설정해야 합니다.
유틸리티/패키지 | 설명 | 설치 후 삭제하시겠습니까? |
---|---|---|
base64 |
설치 스크립트 내의 데이터를 확인합니다. | |
gnu-bash gnu-sed gnu-grep |
설치 스크립트 및 기타 일반적인 도구에서 사용됩니다. | |
iptables |
기본 방화벽 firewalld 를 대체합니다. |
|
iptables-services |
iptables 유틸리티에 기능을 제공합니다. |
|
lsof |
설치 스크립트에서 사용됩니다. | |
nc |
iptables 경로를 확인합니다. |
|
openssl |
초기 부트스트랩 프로세스 중에 로컬에서 인증서에 서명합니다. |
설치하는 동안 사용자 인증 정보와 암호화 키를 생성할 수 있도록 관리 머신에 Consul 패키지를 설치합니다.
apigee-mtls
패키지는 클러스터의 JoKeeper 노드에 인그레스 및 이그레스 프록시를 포함한 Consul 서버를 설치하고 구성합니다.
사용자 계정 권한
설치하기 전에 새 사용자 계정을 만들거나 승격된 권한이 있는 계정에 액세스할 수 있는지 확인합니다.
클러스터의 각 노드에서 Apigee mTLS 설치를 실행하는 계정은 다음 작업을 할 수 있어야 합니다.
- Apigee 구성요소 시작, 중지, 다시 시작, 초기화
- 방화벽 규칙 설정
- 새 OS/시스템 사용자 계정 만들기
systemctl
로 서비스 사용 설정, 중지, 시작, 중지, 마스킹
관리 시스템 (권장)
Apigee에서는 클러스터 내에 다음을 포함하여 이 문서에 설명된 다양한 관리 태스크를 수행할 수 있는 노드를 권장합니다.
- HashiCorp Consul 1.6.2를 설치합니다.
- 인증서/키 쌍과 가십 암호화 키를 생성하고 배포합니다.
- 구성 파일을 업데이트하고 배포합니다.
관리 머신을 설정할 때 다음을 수행합니다.
- 루트 액세스 권한이 있는지 확인하세요.
- Edge Apigee-setup 유틸리티 설치에 설명된 대로
apigee-service
및apigee-setup
유틸리티를 다운로드하여 설치합니다. scp/ssh
를 사용하여 관리 머신에서 클러스터의 모든 노드에 액세스할 수 있는지 확인합니다. 이렇게 해야 구성 파일과 사용자 인증 정보를 배포할 수 있습니다.
포트 사용 및 할당
이 섹션에서는 Apigee mTLS와의 Consul 통신을 지원하기 위한 포트 사용량과 포트 할당을 설명합니다.
포트 사용량: apigee-mtls를 실행하는 모든 노드
apigee-mtls
서비스를 사용하는 클러스터의 모든 노드는 localhost (127.0.0.1)의 서비스 연결을 허용해야 합니다. 이렇게 하면 Consul 프록시가 수신 및 발신 메시지를 처리할 때 다른 서비스와 통신할 수 있습니다.
포트 사용량: Consul 서버 노드 (ZooKeeper를 실행하는 노드)
클러스터에 있는 모든 노드의 요청을 수락하려면 Consul 서버 노드 (ZooKeeper를 실행하는 노드)에서 다음 포트 대부분을 열어야 합니다.
노드 | Consul 서버 포트 | 설명 | 프로토콜 | 외부 mtls-agent 허용 * |
---|---|---|---|---|
Consul Server (ZooKeeper 노드) | 8300 |
클러스터의 모든 Consul 서버를 연결합니다. | RPC | |
8301 |
클러스터 내의 멤버십 및 브로드캐스트 메시지를 처리합니다. | TCP/UDP | ||
8302 |
멀티 데이터 센터 구성에서 멤버십 및 브로드캐스트 메시지를 처리하는 WAN 포트 | TCP/UDP | ||
8500 |
같은 노드의 프로세스에서 Consul Server API로의 HTTP 연결을 처리합니다.
이 포트는 원격 통신이나 조정에 사용되지 않으며 localhost에서만 리슨합니다. |
HTTP | ||
8502 |
클러스터의 다른 노드에서 Consul Server API로의 gRPC+HTTPS 연결을 처리합니다. | gRPC+HTTPS | ||
8503 |
클러스터의 다른 노드에서 Consul Server API로의 HTTPS 연결을 처리합니다. | HTTPS | ||
8600 |
Consul 서버의 DNS를 처리합니다. | TCP/UDP | ||
* Apigee에서는 인바운드 요청을 클러스터 구성원(교차 데이터 스토어 포함)으로만 제한하는 것이 좋습니다. iptables 를 사용하면 됩니다.
|
이 표에서 볼 수 있듯이 consul-server
구성요소를 실행하는 노드 (ZooKeeper 노드)는 데이터 센터에서도 apigee-mtls
서비스를 실행하는 클러스터의 모든 구성원에 대해 포트 8301, 8302, 8502, 8503을 열어야 합니다. JoKeeper를 실행하지 않는 노드는 이러한 포트를 열 필요가 없습니다.
모든 Consul 노드의 포트 할당 (ZooKeeper를 실행하는 노드 포함)
Consul 통신을 지원하려면 다음 Apigee 구성요소를 실행하는 노드가 다음 범위 내의 포트에 대한 외부 연결을 허용해야 합니다.
Apigee 구성요소 | 범위 | 노드당 필요한 포트 수 |
---|---|---|
Apigee mTLS | 10,700~10,799개 | 1 |
Cassandra | 10100~10199개 | 2 |
메시지 프로세서 | 10,500~10,599개 | 2 |
OpenLDAP | 10,200~10,299개 | 1 |
Postgres | 10,300~10,399개 | 3 |
QPID | 10,400~10,499개 | 2 |
라우터 | 10,600~10,699개 | 2 |
ZooKeeper | 10,001~10,099개 | 3 |
Consul은 단순한 선형 방식으로 포트를 할당합니다. 예를 들어 클러스터에 Postgres 노드가 2개 있는 경우 첫 번째 노드는 두 개의 포트를 사용하므로 Consul은 여기에 포트 10300과 10301을 할당합니다. 두 번째 노드도 두 개의 포트를 사용하므로 Consol은 해당 노드에 10302 및 10303을 할당합니다. 이는 모든 구성요소 유형에 적용됩니다.
위에서 볼 수 있듯이 실제 포트 수는 토폴로지에 따라 다릅니다. 클러스터에 Postgres 노드가 2개 있는 경우 포트 4개를 열어야 합니다 (노드 2개 x 포트 2개).
다음에 유의하세요.
- Consul 프록시는 Apigee 서비스와 동일한 포트에서 리슨할 수 없습니다.
- Consul에는 포트 주소 공간이 하나만 있습니다. Consul 프록시 포트 할당은 데이터 센터를 포함한 클러스터 전체에서 고유해야 합니다. 즉, 호스트 A의 프록시 A가 포트 15000에서 수신 대기하는 경우 호스트 B의 프록시 B는 포트 15000에서 수신 대기할 수 없습니다.
- 사용되는 포트 수는 앞에서 설명한 것처럼 토폴로지에 따라 다릅니다.
멀티 데이터 센터 구성에서 mTLS를 실행하는 모든 호스트는 포트 8302도 열어야 합니다.
Apigee mTLS에서 사용하는 기본 포트를 맞춤설정할 수 있습니다. 방법에 대한 자세한 내용은 프록시 포트 범위 맞춤설정을 참고하세요.
제한사항
Apigee mTLS에는 다음과 같은 제한사항이 있습니다.
- 노드 간 Cassandra 통신은 암호화하지 않음 (포트 7000)
- 구성과 설정은 멱등성이 아닙니다. 즉, 한 노드에서 한 가지를 변경하면 모든 노드에서 동일하게 변경해야 합니다. 시스템은 해당 변경사항을 다른 노드에 적용하지 않습니다. 자세한 내용은 기존 apigee-mtls 구성 변경을 참조하세요.
용어
이 섹션에서는 다음과 같은 용어를 사용합니다.
용어 | 정의 |
---|---|
cluster | Private Cloud 설치용 Edge를 구성하는 머신 그룹입니다. |
영사 | Apigee mTLS에서 사용하는 서비스 메시입니다. Consul이 프라이빗 클라우드 통신을 보호하는 방법에 대한 자세한 내용은 Consul의 보안 모델을 참조하세요. |
mTLS | 상호 인증 TLS입니다. |
서비스 메시 | 오버레이 네트워크 (또는 네트워크 내의 네트워크) |
TLS | 트랜잭션 계층 보안. 보안 통신을 위한 업계 표준 인증 프로토콜입니다. |