SEC02-BP03 안전하게 보안 암호 저장 및 사용 - 보안 원칙

SEC02-BP03 안전하게 보안 암호 저장 및 사용

워크로드에는 데이터베이스, 리소스 및 타사 서비스에 대한 아이덴티티를 증명하는 자동화된 기능이 필요합니다. 이는 API 액세스 키, 암호, OAuth 토큰과 같은 보안 암호 액세스 보안 인증 정보를 사용하여 수행됩니다. 특별 제작된 서비스를 사용하여 이러한 보안 인증 정보를 저장, 관리 및 교체하면 해당 보안 인증 정보가 손상될 가능성을 줄이는 데 도움이 됩니다.

원하는 결과: 다음 목표를 달성하는 애플리케이션 보안 인증 정보를 안전하게 관리하기 위한 메커니즘을 구현합니다.

  • 워크로드에 필요한 보안 암호를 식별합니다.

  • 가능한 경우 장기 보안 인증 정보를 단기 보안 인증 정보로 대체하여 필요한 장기 보안 인증 정보의 수를 줄입니다.

  • 나머지 장기 보안 인증 정보의 안전한 저장 및 자동 교체를 설정합니다.

  • 워크로드에 존재하는 보안 암호에 대한 액세스 권한을 감사합니다.

  • 개발 프로세스 중에 소스 코드에 보안 암호가 포함되어 있지 않은지 확인하기 위해 지속적으로 모니터링합니다.

  • 보안 인증 정보가 의도치 않게 공개될 가능성을 줄입니다.

일반적인 안티 패턴:

  • 자격 증명을 교체하지 않습니다.

  • 소스 코드 또는 구성 파일에 장기 보안 인증 정보를 저장합니다.

  • 보안 인증 정보를 저장 시 암호화되지 않은 상태로 저장합니다.

이 모범 사례 확립의 이점:

  • 보안 암호는 저장 시 및 전송 중 암호화된 상태로 저장됩니다.

  • 보안 인증 정보에 대한 액세스 권한은 API를 통해 제한됩니다(보안 인증 정보 벤딩 머신으로 간주).

  • 보안 인증 정보에 대한 액세스 권한(읽기 및 쓰기 모두)은 감사되고 로깅됩니다.

  • 우려 사항 분리: 보안 인증 정보 교체는 아키텍처의 나머지 부분과 분리될 수 있는 별도의 구성 요소에 의해 수행됩니다.

  • 보안 암호는 필요에 따라 소프트웨어 구성 요소에 자동으로 배포되며 중앙 위치에서 교체가 수행됩니다.

  • 보안 인증 정보에 대한 액세스 권한은 세분화된 방식으로 제어할 수 있습니다.

이 모범 사례를 따르지 않을 경우 노출 위험도: 높음

구현 가이드

과거에는 데이터베이스, 타사 API, 토큰 및 기타 보안 암호에 인증하는 데 사용되는 보안 인증 정보가 소스 코드나 환경 파일에 포함되었을 수 있습니다. AWS는 이러한 보안 인증 정보를 안전하게 저장하고 자동으로 교체하며 사용을 감사하는 여러 메커니즘을 제공합니다.

보안 암호 관리에 접근하는 가장 좋은 방법은 제거, 대체 및 교체 지침을 따르는 것입니다. 가장 안전한 보안 인증 정보는 저장, 관리 또는 처리할 필요가 없는 보안 인증 정보입니다. 안전하게 제거할 수 있는 워크로드 기능에 더 이상 필요하지 않은 보안 인증 정보가 있을 수 있습니다.

워크로드의 적절한 기능을 위해 여전히 필요한 보안 인증 정보의 경우 장기 보안 인증 정보를 임시 또는 단기 보안 인증 정보로 대체할 기회가 있을 수 있습니다. 예를 들어 AWS 비밀 액세스 키를 하드 코딩하는 대신 IAM 역할을 사용하여 해당 장기 보안 인증 정보를 임시 보안 인증 정보로 대체하는 것이 좋습니다.

일부 수명이 긴 보안 암호는 제거하거나 대체하지 못할 수 있습니다. 이러한 보안 암호는 AWS Secrets Manager와 같은 서비스에 저장될 수 있으며 정기적으로 중앙에서 저장, 관리 및 교체할 수 있습니다.

워크로드의 소스 코드 및 구성 파일을 감사하면 여러 유형의 보안 인증 정보를 확인할 수 있습니다. 다음 표에는 일반적인 유형의 보안 인증 정보를 처리하기 위한 전략이 요약되어 있습니다.

Credential type Description Suggested strategy
IAM access keys AWS IAM access and secret keys used to assume IAM roles inside of a workload Replace: Use IAM 역할 assigned to the compute instances (such as Amazon EC2 or AWS Lambda) instead. For interoperability with third parties that require access to resources in your AWS 계정, ask if they support AWS 크로스 계정 액세스. For mobile apps, consider using temporary credentials through Amazon Cognito 자격 증명 풀(페더레이션 자격 증명). For workloads running outside of AWS, consider IAM Roles Anywhere or AWS Systems Manager 하이브리드 활성화.
SSH keys Secure Shell private keys used to log into Linux EC2 instances, manually or as part of an automated process Replace: Use AWS Systems Manager or EC2 Instance Connect to provide programmatic and human access to EC2 instances using IAM roles.
Application and database credentials Passwords – plain text string Rotate: Store credentials in AWS Secrets Manager and establish automated rotation if possible.
Amazon RDS and Aurora Admin Database credentials Passwords – plain text string Replace: Use the Amazon RDS와 Secrets Manager 통합 or Amazon Aurora. In addition, some RDS database types can use IAM roles instead of passwords for some use cases (for more detail, see IAM 데이터베이스 인증).
OAuth tokens Secret tokens – plain text string Rotate: Store tokens in AWS Secrets Manager and configure automated rotation.
API tokens and keys Secret tokens – plain text string Rotate: Store in AWS Secrets Manager and establish automated rotation if possible.

일반적인 안티 패턴은 소스 코드, 구성 파일 또는 모바일 앱 내부에 IAM 액세스 키를 포함하는 것입니다. AWS 서비스와 통신하기 위해 IAM 액세스 키가 필요한 경우 임시(단기) 보안 인증 정보를 사용합니다. 이러한 단기 보안 인증 정보는 EC2 인스턴스의 경우 IAM 역할, Lambda 함수의 경우 실행 역할, 모바일 사용자 액세스의 경우 Cognito IAM 역할 및 IoT 기기의 경우 IoT Core 정책을 통해 제공할 수 있습니다. 타사와 인터페이스할 때 IAM 사용자를 구성하고 타사에 해당 사용자의 비밀 액세스 키를 보내는 것보다 계정 리소스에 필수 액세스 권한이 있는 IAM 역할에 대한 액세스 권한을 위임하는 것이 좋습니다.

워크로드에 다른 서비스 및 리소스와 상호 운용하는 데 필요한 보안 암호를 저장해야 하는 경우가 많습니다. AWS Secrets Manager는 이러한 보안 인증 정보는 물론 API 토큰, 암호 및 기타 보안 인증 정보의 저장, 사용 및 교체를 안전하게 관리하기 위해 특별히 제작되었습니다.

AWS Secrets Manager는 민감한 보안 인증 정보의 안전한 저장 및 처리를 보장하는 5가지 주요 기능, 즉 저장 시 암호화, 전송 중 암호화, 종합적 감사, 세분화된 액세스 제어, 확장 가능한 보안 인증 정보 교체를 제공합니다. AWS 파트너의 기타 보안 암호 관리 서비스 또는 유사한 기능과 보증을 제공하는 현지 개발 솔루션도 허용됩니다.

구현 단계

  1. Amazon CodeGuru 같은 자동화 도구를 사용하여 하드 코딩된 보안 인증 정보가 포함된 코드 경로를 식별합니다.

    • Amazon CodeGuru를 사용하여 코드 리포지토리를 스캔합니다. 검토가 완료되면 CodeGuru에서 Type=Secrets를 필터링하여 문제가 있는 코드 줄을 찾습니다.

  2. 제거하거나 대체할 수 있는 보안 인증 정보를 식별합니다.

    1. 더 이상 필요하지 않은 보안 인증 정보를 식별하고 제거하도록 표시합니다.

    2. 소스 코드에 포함된 AWS 보안 암호 키의 경우 필요한 리소스와 연결된 IAM 역할로 대체합니다. 워크로드의 일부가 AWS 외부에 있지만 AWS 리소스에 액세스하기 위해 IAM 보안 인증 정보가 필요한 경우 IAM Roles Anywhere 또는 AWS Systems Manager 하이브리드 활성화를 고려합니다.

  3. 교체 전략을 사용해야 하는 타사의 수명이 긴 보안 암호의 경우 Secrets Manager를 코드에 통합하여 런타임 시 타사 보안 암호를 검색합니다.

    1. CodeGuru 콘솔은 검색된 보안 인증 정보를 사용하여 자동으로 Secrets Manager에 보안 암호를 생성할 수 있습니다.

    2. Secrets Manager의 보안 암호 검색을 애플리케이션 코드에 통합합니다.

  4. 주기적으로 코드 베이스를 검토하고 다시 스캔하여 코드에 추가된 새 보안 암호가 없는지 확인합니다.

    • git-secrets와 같은 도구를 사용하여 소스 코드 리포지토리에 새 보안 암호를 커밋되지 않도록 하는 것이 좋습니다.

  5. Secrets Manager 활동을 모니터링하여 예상치 못한 사용, 부적절한 보안 암호 액세스 또는 보안 암호 삭제 시도가 있는지 확인합니다.

  6. 보안 인증 정보에 대한 인적 노출을 줄입니다. 보안 인증 정보를 읽고 쓰고 수정할 수 있는 액세스 권한을 이 목적을 위한 전용 IAM 역할로 제한하고, 해당 역할을 수임할 수 있는 액세스 권한을 일부 운영 사용자에게만 제공합니다.

리소스

관련 모범 사례:

관련 문서:

관련 동영상:

관련 워크숍: