기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon EKS의 AWS 프라이빗 CA를 사용하여 AWS App Mesh에서 MTL 활성화
Omar Kahil, Emmanuel Saliu, Muhammad Shahzad, Andy Wong, Amazon Web Services
요약
이 패턴은 AWS App Mesh에서 AWS 사설 인증 기관(AWS 사설 CA)의 인증서를 사용하여 Amazon Web Services(AWS)에서 상호 전송 계층 보안(MTL)을 구현하는 방법을 보여줍니다. 모두를 위한 보안 프로덕션 ID 프레임워크(SPIFE)를 통해 Envoy 비밀 검색 서비스(SDS) API를 사용합니다. SPIFE는 세분화되고 동적인 워크로드 ID 관리를 제공하는 광범위한 커뮤니티 지원이 포함된 클라우드 네이티브 컴퓨팅 재단(CNCF) 오픈 소스 프로젝트입니다. SPIFE 표준을 구현하려면 SPIRE SPIFE 런타임 환경을 사용하세요.
App Mesh에서 mTLS를 사용하면 TLS를 통한 보안 계층이 추가되고 메시의 서비스가 연결을 설정하는 클라이언트를 확인할 수 있기 때문에 양방향 피어 인증을 제공합니다. 클라이언트-서버 관계에 있는 클라이언트도 세션 협상 프로세스 중에 X.509 인증서를 제공합니다. 서버는 이 인증서를 사용하여 클라이언트를 식별하고 인증합니다. 이를 통해 신뢰할 수 있는 인증 기관(CA) 서 발급한 인증서와 유효한 인증서인지 확인할 수 있습니다.
사전 조건 및 제한 사항
사전 조건
자체 관리형 또는 관리형 노드 그룹이 있는 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터
SDS가 활성화된 상태로 클러스터에 배포된 App Mesh 컨트롤러
AWS Certificate Manager(ACM)의 프라이빗 인증서로, AWS 프라이빗 CA에서 발행
제한 사항
SPIRE 에이전트는 Kubernetes DaemonSet으로 실행되어야 하므로 SPIRE를 AWS Fargate에 설치할 수 없습니다.
제품 버전
AWS App Mesh Controller 차트 1.3.0 이상
아키텍처
다음 다이어그램은 VPC에서 App Mesh를 사용하는 EKS 클러스터를 보여줍니다. 한 워커 노드의 SPIRE 서버는 다른 워커 노드의 SPIRE 에이전트 및 AWS 사설 CA와 통신합니다. Envoy는 SPIRE 에이전트 워커 노드 간의 mTLS 통신에 사용됩니다.

다이어그램은 다음 단계들을 보여줍니다.
인증서가 발급됩니다.
인증서 서명 및 인증서를 요청합니다.
도구
서비스
AWS Private CA – AWS Private Certificate Authority(AWS Private CA)를 사용하면 온프레미스 CA를 운영하는 데 드는 투자 및 유지 관리 비용 없이 루트 및 하위 CA를 비롯한 사설 CA 계층을 생성할 수 있습니다.
AWS App Mesh – AWS App Mesh는 서비스를 손쉽게 모니터링하고 제어할 수 있는 서비스 메시입니다. App Mesh는 서비스 통신 방식을 표준화하여 애플리케이션의 모든 서비스에 대해 일관된 가시성과 네트워크 트래픽 제어를 제공합니다.
Amazon EKS – Amazon Elastic Kubernetes Service(Amazon EKS)는 Kubernetes 컨트롤 플레인 또는 노드를 설치, 작동 및 유지 관리할 필요 없이 AWS에서 Kubernetes를 실행하는 데 사용할 수 있는 관리형 서비스입니다.
기타 도구
Helm
– Kubernetes용 Helm 패키지 관리자는 Kubernetes 클러스터에서 애플리케이션을 설치하고 관리하는 데 도움이 됩니다. 이 패턴은 Helm을 사용하여 AWS App Mesh Controller를 배포합니다. AWS App Mesh 컨트롤러 차트
- 이 패턴은 AWS App Mesh 컨트롤러 차트를 사용하여 Amazon EKS에서 AWS App Mesh를 활성화합니다.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
Amazon EKS에서 App Mesh를 설정합니다. | 리포지토리 | DevOps 엔지니어 |
SPIRE를 설치합니다. | spire_setup.yaml | DevOps 엔지니어 |
AWS 프라이빗 CA 인증서를 설치합니다. | AWS 설명서의 지침에 따라 프라이빗 루트 CA용 인증서를 생성하고 설치합니다. | DevOps 엔지니어 |
클러스터 노드 인스턴스 역할에 권한을 부여합니다. | 클러스터 노드 인스턴스 역할에 정책을 연결하려면 추가 정보 섹션에 있는 코드를 사용하세요. | DevOps 엔지니어 |
AWS 프라이빗 CA용 SPIRE 플러그인을 추가합니다. | SPIRE 서버 구성에 플러그인을 추가하려면 추가 정보 섹션에 있는 코드를 사용하세요. 플러그인에 대한 자세한 내용은 서버 플러그인: UpstreamAuthority "aws_pca" | DevOps 엔지니어 |
bundle.cert를 업데이트합니다. | SPIRE 서버를 생성하면 | DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
SPIRE에 노드 및 워크로드 항목을 등록합니다. | SPIRE 서버에 노드 및 워크로드(서비스)를 등록하려면 리포지토리 | DevOps 엔지니어 |
mTL이 활성화된 상태로 App Mesh에서 메시를 생성합니다. | App Mesh에서 마이크로서비스 애플리케이션의 모든 구성 요소(예: 가상 서비스, 가상 라우터, 가상 노드)를 사용하여 새 메시를 생성합니다. | DevOps 엔지니어 |
등록된 항목을 검사합니다. | 다음 명령을 실행하여 노드와 워크로드에 대해 등록된 항목을 검사할 수 있습니다.
그러면 SPIRE Agent의 항목이 표시됩니다. | DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
mTLS 트래픽을 검증합니다. |
| DevOps 엔지니어 |
인증서가 AWS 사설 CA에서 발급되고 있는지 검증합니다. | SPIRE 서버의 로그를 보면 업스트림 사설 CA에서 플러그인이 올바르게 구성되었고 인증서가 발급되었는지 확인할 수 있습니다. 다음 명령을 실행합니다.
그런 다음 생성된 로그를 확인합니다. 이 코드는 서버의 이름이 | DevOps 엔지니어 |
관련 리소스
추가 정보
클러스터 노드 인스턴스 역할에 권한 연결
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ACMPCASigning", "Effect": "Allow", "Action": [ "acm-pca:DescribeCertificateAuthority", "acm-pca:IssueCertificate", "acm-pca:GetCertificate", "acm:ExportCertificate" ], "Resource": "*" } ] } AWS Managed Policy: "AWSAppMeshEnvoyAccess"
ACM용 SPIRE 플러그인 추가
Add the SPIRE plugin for ACM Change certificate_authority_arn to your PCA ARN. The signing algorithm used must be the same as the signing algorithm on the PCA. Change your_region to the appropriate AWS Region. UpstreamAuthority "aws_pca" { plugin_data { region = "your_region" certificate_authority_arn = "arn:aws:acm-pca:...." signing_algorithm = "your_signing_algorithm" } }