Amazon ECS 컨테이너에 민감한 데이터 전달하기
Amazon ECS 컨테이너에 민감한 데이터 전달하기
데이터베이스 자격 증명 같은 민감한 데이터를 컨테이너에 안전하게 전달할 수 있어요. API 키와 데이터베이스 자격 증명 같은 시크릿(secret)은 애플리케이션이 다른 시스템에 액세스하는 데 자주 사용돼요.
출처: 문서
본문
데이터베이스 자격 증명 같은 민감한 데이터를 컨테이너에 안전하게 전달할 수 있어요. API 키와 데이터베이스 자격 증명 같은 시크릿은 애플리케이션이 다른 시스템에 액세스하는 데 자주 사용돼요. 시크릿은 보통 사용자 이름과 비밀번호, 인증서 또는 API 키로 구성돼요. 이러한 시크릿에 대한 액세스는 IAM을 사용하는 특정 IAM 보안 주체(principal)로 제한하고 런타임에 컨테이너에 주입해야 해요.
시크릿은 AWS Secrets Manager와 Amazon EC2 Systems Manager Parameter Store에서 컨테이너로 원활하게 주입될 수 있어요. 이러한 시크릿은 태스크에서 다음 중 하나로 참조할 수 있어요.
secrets컨테이너 정의 파라미터를 사용하는 환경 변수로 참조.- 로깅 플랫폼에 인증이 필요한 경우
secretOptions로 참조. 자세한 내용은 logging configuration options 를 참고해 주세요. - 컨테이너를 가져오는 레지스트리에 인증이 필요한 경우
repositoryCredentials컨테이너 정의 파라미터를 사용하는 이미지로 가져온 시크릿으로 참조. Amazon ECR Public Gallery에서 이미지를 가져올 때 이 방법을 사용해 주세요. 자세한 내용은 Private registry authentication for tasks 를 참고해 주세요.
시크릿 관리를 설정할 때 다음을 수행할 것을 권장해요.
시크릿 자료 저장에 AWS Secrets Manager 또는 AWS Systems Manager Parameter Store 사용하기 API 키, 데이터베이스 자격 증명 및 기타 시크릿 자료를 Secrets Manager에 안전하게 저장하거나 Systems Manager Parameter Store의 암호화된 파라미터로 저장해야 해요. 이 두 서비스는 AWS KMS를 사용해 민감한 데이터를 암호화하는 관리형 키-값 저장소이므로 유사해요. 그러나 Secrets Manager는 시크릿을 자동으로 순환(rotate)하고, 임의의 시크릿을 생성하며, 계정 간에 시크릿을 공유하는 기능도 포함해요. 이러한 기능을 활용하려면 Secrets Manager를 사용해 주세요. 그렇지 않으면 Systems Manager Parameter Store의 암호화된 파라미터를 사용해 주세요.
중요 시크릿이 변경되면 최신 시크릿 값을 검색하려면 새 배포를 강제하거나 새 태스크를 시작해야 해요. 자세한 내용은 다음 주제를 참고해 주세요.
- 태스크 - 태스크를 중지한 다음 시작해 주세요. 자세한 내용은 Stopping an Amazon ECS task 와 Running an application as an Amazon ECS task 를 참고해 주세요.
- 서비스 - 서비스를 업데이트하고 force new deployment 옵션을 사용해 주세요. 자세한 내용은 Updating an Amazon ECS service 를 참고해 주세요.
암호화된 Amazon S3 버킷에서 데이터 검색하기
시크릿을 암호화된 Amazon S3 버킷에 저장하고 태스크 역할을 사용해 해당 시크릿에 대한 액세스를 제한해야 해요. 이렇게 하면 환경 변수의 값이 로그에 실수로 유출되거나 docker inspect 를 실행할 때 드러나는 것을 방지할 수 있어요. 이렇게 하면 애플리케이션은 Amazon S3 버킷에서 시크릿을 읽도록 작성되어야 해요. 지침은 Setting default server-side encryption behavior for Amazon S3 buckets 를 참고해 주세요.
사이드카 컨테이너를 사용해 볼륨에 시크릿 마운트하기 환경 변수는 데이터 유출 위험이 높으므로 AWS Secrets Manager에서 시크릿을 읽어 공유 볼륨에 쓰는 사이드카 컨테이너를 실행해야 해요. 이 컨테이너는 Amazon ECS container ordering 을 사용해 애플리케이션 컨테이너보다 먼저 실행되고 종료될 수 있어요. 이렇게 하면 애플리케이션 컨테이너는 이후에 시크릿이 쓰인 볼륨을 마운트해요. Amazon S3 버킷 방식과 마찬가지로 애플리케이션은 공유 볼륨에서 시크릿을 읽도록 작성되어야 해요. 볼륨이 태스크로 범위가 지정되므로 태스크가 중지된 후 볼륨은 자동으로 삭제돼요. 예시는 task-def.json 프로젝트를 참고해 주세요. Amazon EC2에서 시크릿이 쓰이는 볼륨은 AWS KMS 고객 관리 키로 암호화할 수 있어요. AWS Fargate에서 볼륨 스토리지는 서비스 관리 키를 사용해 자동으로 암호화돼요.