SEC02-BP03 안전하게 보안 암호 저장 및 사용
워크로드에는 데이터베이스, 리소스 및 서드파티 서비스에 대한 자격 증명을 증명하는 자동화된 기능이 필요합니다. 이는 API 액세스 키, 암호, OAuth 토큰과 같은 보안 암호 액세스 자격 증명을 사용하여 수행됩니다. 특별 제작된 서비스를 사용하여 이러한 자격 증명을 저장, 관리 및 교체하면 해당 자격 증명이 손상될 가능성을 줄이는 데 도움이 됩니다.
원하는 성과: 다음 목표를 달성하는 애플리케이션 자격 증명을 안전하게 관리하기 위한 메커니즘을 구현합니다.
-
워크로드에 필요한 보안 암호를 식별합니다.
-
가능한 경우 장기 자격 증명을 단기 자격 증명으로 대체하여 필요한 장기 자격 증명의 수를 줄입니다.
-
나머지 장기 자격 증명의 안전한 저장 및 자동 교체를 설정합니다.
-
워크로드에 존재하는 보안 암호에 대한 액세스 권한을 감사합니다.
-
개발 프로세스 중에 소스 코드에 보안 암호가 포함되어 있지 않은지 확인하기 위해 지속적으로 모니터링합니다.
-
자격 증명이 의도치 않게 공개될 가능성을 줄입니다.
일반적인 안티 패턴:
-
자격 증명을 교체하지 않습니다.
-
소스 코드 또는 구성 파일에 장기 자격 증명을 저장합니다.
-
자격 증명을 저장 시 암호화되지 않은 상태로 저장합니다.
이 모범 사례 확립의 이점:
-
보안 암호는 저장 시 및 전송 중 암호화된 상태로 저장됩니다.
-
자격 증명에 대한 액세스 권한은 API를 통해 제한됩니다(자격 증명 자판기와 같음).
-
자격 증명에 대한 액세스 권한(읽기 및 쓰기 모두)은 감사되고 로깅됩니다.
-
우려 사항 분리: 자격 증명 교체는 아키텍처의 나머지 부분과 분리될 수 있는 별도의 구성 요소에 의해 수행됩니다.
-
보안 암호는 필요에 따라 소프트웨어 구성 요소에 자동으로 배포되며 중앙 위치에서 교체가 수행됩니다.
-
자격 증명에 대한 액세스 권한은 세분화된 방식으로 제어할 수 있습니다.
이 모범 사례가 확립되지 않을 경우 노출되는 위험 수준: 높음
구현 가이드
과거에는 데이터베이스, 서드파티 API, 토큰 및 기타 보안 암호에 인증하는 데 사용되는 자격 증명이 소스 코드나 환경 파일에 포함되었을 수 있습니다. AWS는 이러한 자격 증명을 안전하게 저장하고 자동으로 교체하며 사용을 감사하는 여러 메커니즘을 제공합니다.
보안 암호 관리에 접근하는 가장 좋은 방법은 제거, 대체 및 교체 지침을 따르는 것입니다. 가장 안전한 자격 증명은 저장, 관리 또는 처리할 필요가 없는 자격 증명입니다. 안전하게 제거할 수 있는 워크로드 기능에 더 이상 필요하지 않은 자격 증명이 있을 수 있습니다.
워크로드의 적절한 기능을 위해 여전히 필요한 자격 증명의 경우 장기 자격 증명을 임시 또는 단기 자격 증명으로 대체할 기회가 있을 수 있습니다. 예를 들어 AWS 비밀 액세스 키를 하드 코딩하는 대신 IAM 역할을 사용하여 해당 장기 자격 증명을 임시 자격 증명으로 대체하는 것이 좋습니다.
일부 장기 보안 암호는 제거하거나 대체하지 못할 수 있습니다. 이러한 보안 암호는 AWS Secrets Manager와 같은 서비스에 저장될 수 있습니다. 이를 통해 중앙에서 저장 및 관리되고 정기적으로 교체될 수 있습니다.
워크로드의 소스 코드 및 구성 파일을 감사하면 여러 유형의 자격 증명을 확인할 수 있습니다. 다음 표에는 일반적인 유형의 자격 증명을 처리하기 위한 전략이 요약되어 있습니다.
자격 증명 유형 | 설명 | 제안된 전략 |
---|---|---|
IAM 액세스 키 | 워크로드 내에서 IAM 역할을 수임하는 데 사용되는 AWS IAM 액세스 및 비밀 키 | 교체: 대신 컴퓨팅 인스턴스에 할당된 IAM 역할을 사용합니다(예: Amazon EC2 또는 AWS Lambda). AWS 계정의 리소스에 대한 액세스가 필요한 서드파티와의 상호 운용성을 위해 AWS 크로스 계정 액세스를 지원하는지 문의합니다. 모바일 앱의 경우 Amazon Cognito 자격 증명 풀(페더레이션 자격 증명)을 통한 임시 자격 증명 사용을 고려하세요. AWS 외부에서 실행되는 워크로드의 경우 IAM Roles Anywhere 또는 AWS Systems Manager 하이브리드 정품 인증을 고려하세요. 컨테이너는 Amazon ECS 작업 IAM 역할 또는 Amazon EKS node IAM role을 참조하세요. |
SSH 키 | 수동으로 또는 자동화된 프로세스의 일부로 Linux EC2 인스턴스에 로그인하는 데 사용되는 Secure Shell 프라이빗 키 | 교체: AWS Systems Manager |
애플리케이션 및 데이터베이스 자격 증명 | 암호 - 일반 텍스트 문자열 | 교체: AWS Secrets Manager에 자격 증명을 저장하고 가능하면 자동 교체를 설정합니다. |
Amazon RDS 및 Aurora 관리자 데이터베이스 자격 증명 | 암호 - 일반 텍스트 문자열 | 교체: Amazon RDS와의 Secrets Manager 통합 또는 Amazon Aurora를 사용합니다. 또한 일부 RDS 데이터베이스 유형은 일부 사용 사례에서 암호 대신 IAM 역할을 사용할 수 있습니다(자세한 내용은 IAM 데이터베이스 인증 참조). |
OAuth 토큰 | 보안 암호 토큰 - 일반 텍스트 문자열 | 교체: AWS Secrets Manager에 토큰을 저장하고 자동 교체를 구성합니다. |
API 토큰 및 키 | 보안 암호 토큰 - 일반 텍스트 문자열 | 교체: AWS Secrets Manager에 저장하고 가능하면 자동 교체를 설정합니다. |
일반적인 안티 패턴은 소스 코드, 구성 파일 또는 모바일 앱 내부에 IAM 액세스 키를 포함하는 것입니다. AWS 서비스와 통신하는 데 IAM 액세스 키가 필요한 경우 임시 (단기) 보안 자격 증명을 사용합니다. 이러한 단기 자격 증명은 EC2 인스턴스의 경우 IAM 역할, Lambda 함수의 경우 실행 역할, 모바일 사용자 액세스의 경우 Cognito IAM 역할, IoT 기기의 경우 IoT Core 정책을 통해 제공할 수 있습니다. 서드파티와 연결할 때 IAM 사용자를 구성하고 서드파티에 해당 사용자의 비밀 액세스 키를 보내는 것보다 계정 리소스에 필수 액세스 권한이 있는 IAM 역할에 대한 액세스 권한을 위임하는 것이 좋습니다.
워크로드에 다른 서비스 및 리소스와 상호 운용하는 데 필요한 보안 암호를 저장해야 하는 경우가 많습니다. AWS Secrets Manager는 이러한 자격 증명은 물론, API 토큰, 암호 및 기타 자격 증명의 저장, 사용 및 교체를 안전하게 관리하기 위해 특별히 제작되었습니다.
AWS Secrets Manager는 민감한 자격 증명의 안전한 저장 및 처리를 보장하는 5가지 주요 기능, 즉 저장 시 암호화, 전송 중 암호화, 종합적 감사, 세분화된 액세스 제어, 확장 가능한 자격 증명 교체를 제공합니다. AWS 파트너의 기타 보안 암호 관리 서비스 또는 유사한 기능과 보증을 제공하는 현지 개발 솔루션도 허용됩니다.
보안 암호를 검색할 때 Secret Manager 클라이언트 측 캐싱 구성 요소를 사용하여 나중에 사용할 수 있도록 캐싱할 수 있습니다. 캐싱된 보안 암호를 검색하는 것이 Secret Manager에서 검색하는 것보다 빠릅니다. 또한 Secrets Manager API를 호출하는 데는 비용이 발생하므로 캐시를 사용하면 비용을 줄일 수 있습니다. 암호를 검색할 수 있는 모든 방법은 Get secrets을 참조하세요.
참고
일부 언어에서는 클라이언트 측 캐싱을 위해 자체 메모리 내 암호화를 구현해야 할 수 있습니다.
구현 단계
-
Amazon CodeGuru
와 같은 자동화된 도구를 사용하여 하드 코딩된 자격 증명이 포함된 코드 경로를 식별합니다. -
Amazon CodeGuru를 사용하여 코드 리포지토리를 스캔합니다. 검토가 완료되면 CodeGuru에서 유형=보안 암호를 필터링하여 문제가 있는 코드 줄을 찾습니다.
-
-
제거하거나 대체할 수 있는 자격 증명을 식별합니다.
-
더 이상 필요하지 않은 자격 증명을 식별하고 제거하도록 표시합니다.
-
소스 코드에 포함된 AWS 보안 암호 키의 경우 필요한 리소스와 연결된 IAM 역할로 대체합니다. 워크로드의 일부가 AWS 외부에 있지만 AWS 리소스에 액세스하기 위해 IAM 자격 증명이 필요한 경우 IAM Roles Anywhere
또는 AWS Systems Manager Hybrid Activations을 고려합니다.
-
-
교체 전략을 사용해야 하는 서드파티의 장기 보안 암호의 경우 Secrets Manager를 코드에 통합하여 런타임 시 서드파티 보안 암호를 검색합니다.
-
CodeGuru 콘솔은 검색된 자격 증명을 사용하여 Secrets Manager에서 보안 암호를 자동으로 생성
할 수 있습니다. -
Secrets Manager의 보안 암호 검색을 애플리케이션 코드에 통합합니다.
-
서버리스 Lambda 함수는 언어에 구애받지 않는 Lambda 확장을 사용할 수 있습니다.
-
EC2 인스턴스 또는 컨테이너의 경우 AWS는 널리 사용되는 여러 프로그래밍 언어로 Secrets Manager에서 보안 암호를 검색하기 위한 클라이언트 측 코드 예제를 제공합니다.
-
-
-
주기적으로 코드 베이스를 검토하고 다시 스캔하여 코드에 추가된 새 보안 암호가 없는지 확인합니다.
-
소스 코드 리포지토리에 새로운 보안 암호가 커밋되지 않도록 git-secrets
와 같은 도구 사용을 고려하세요.
-
-
예상치 못한 사용, 부적절한 보안 암호 액세스 또는 보안 암호 삭제 시도가 있는지 Secrets Manager 활동을 모니터링합니다.
-
자격 증명에 대한 인적 노출을 줄입니다. 자격 증명을 읽고 쓰고 수정할 수 있는 액세스 권한을 이 목적을 위한 전용 IAM 역할로 제한하고, 해당 역할을 수임할 수 있는 액세스 권한을 일부 운영 사용자에게만 제공합니다.
리소스
관련 모범 사례:
관련 문서:
관련 비디오:
관련 워크숍: