다음과 같은 모범 사례를 통해 Amazon DynamoDB에서 보안 사고를 예측하고 방지할 수 있습니다.
- 유휴 시 암호화
-
DynamoDB는 유휴 시 테이블, 인덱스, 스트림 및 백업에 저장된 모든 사용자 데이터를 AWS Key Management Service(AWS KMS)
에 저장된 암호화 키를 사용해 암호화합니다. 이를 통해 기본 스토리지에 대한 무단 액세스로부터 데이터를 보호하여 데이터 보호 계층을 추가로 제공합니다. DynamoDB가 AWS 소유 키(기본 암호화 유형)와 AWS 관리형 키 또는 고객 관리형 키 중에서 어떤 것을 사용해 사용자 데이터를 암호화하도록 할지 지정할 수 있습니다. 자세한 내용은 미사용 Amazon DynamoDB 암호화를 참조하세요.
- IAM 역할을 사용해 DynamoDB에 대한 액세스 인증하기
-
사용자, 애플리케이션, 기타 AWS 서비스는 DynamoDB에 액세스하려면 AWS API 요청에 유효한 AWS 자격 증명이 있어야 합니다. AWS 자격 증명을 애플리케이션이나 EC2 인스턴스에 직접 저장해서는 안 됩니다. 이러한 보안 인증은 자동으로 교체되지 않기 때문에 손상된 경우 비즈니스에 큰 영향을 줄 수 있는 장기 보안 인증입니다. IAM 역할을 사용하면 AWS 서비스 및 리소스에 액세스하는 데 사용할 수 있는 임시 액세스 키를 얻을 수 있습니다.
자세한 내용은 Amazon DynamoDB의 Identity and Access Management 단원을 참조하십시오.
- IAM 정책을 사용한 DynamoDB 기본 인증
-
권한을 부여하려면 권한을 부여받을 사용자, 권한을 행사할 수 있는 대상이 되는 DynamoDB API, 해당 리소스에 허용하고자 하는 특정 작업을 결정합니다. 최소 권한을 구현하는 것이 오류 또는 악의적인 의도로 인해 발생할 수 있는 보안 위험과 영향을 줄일 수 있는 비결입니다.
IAM 자격 증명(즉 사용자, 그룹 및 역할)에 권한 정책을 연결함으로써 DynamoDB 리소스에서 작업을 수행할 수 있는 권한을 부여합니다.
이를 위해 다음 정책을 사용할 수 있습니다.
- IAM 정책 조건을 사용하여 세분화된 액세스 제어 구현
-
DynamoDB에서 권한을 부여할 때 권한 정책이 적용되는 방식을 결정하는 조건을 지정할 수 있습니다. 최소 권한을 구현하는 것이 오류 또는 악의적인 의도로 인해 발생할 수 있는 보안 위험과 영향을 줄일 수 있는 비결입니다.
IAM 정책을 사용해 권한을 부여할 때 조건을 지정할 수 있습니다. 예를 들어 다음을 수행할 수 있습니다.
-
사용자에게 테이블 또는 보조 인덱스의 특정 항목 및 속성에 대한 읽기 전용 액세스를 허용하는 권한을 부여할 수 있습니다.
-
사용자 ID를 기준으로 테이블의 특정 속성에 대한 쓰기 전용 액세스 권한을 해당 사용자에게 부여할 수 있습니다.
자세한 내용은 세분화된 액세스 제어를 위한 IAM 정책을 참조하세요.
-
- VPC 엔드포인트 및 정책을 사용해 DynamoDB에 액세스
-
Virtual Private Cloud(VPC)에서 DynamoDB에 액세스하는 권한만 필요한 경우에는 VPC 엔드포인트를 사용해 필요한 VPC에서만 액세스할 수 있도록 제한해야 합니다. 이를 통해 해당 트래픽이 개방형 인터넷을 통과하여 이 환경에 종속되는 것을 방지할 수 있습니다.
DynamoDB에 VPC 엔드포인트를 사용하면 다음 정책을 사용해 액세스를 제어 및 제한할 수 있습니다.
-
VPC 엔드포인트 정책 - 이 정책은 DynamoDB VPC 종단점에서 적용됩니다. 이 정책을 통해 DynamoDB 테이블에 대한 API 액세스를 제어 및 제한할 수 있습니다.
-
IAM 정책 - 사용자, 그룹 또는 역할에 연결된 정책의
aws:sourceVpce
조건을 사용해 DynamoDB 테이블에 대한 모든 액세스가 지정된 VPC 엔드포인트를 통해 이루어지도록 강제할 수 있습니다.
자세한 내용은 Amazon DynamoDB용 엔드포인트를 참조하세요.
-
- 클라이언트 측 암호화 참조
-
DynamoDB에서 테이블을 구현하기 전에 암호화 전략을 계획하는 것이 좋습니다. 민감한 데이터나 기밀 데이터를 DynamoDB에 저장하는 경우 계획에 클라이언트측 암호화를 포함하는 것을 고려해 보세요. 이렇게 하면 데이터를 원본에 최대한 가깝게 암호화하고 전체 수명 주기 동안 데이터를 보호할 수 있습니다. 전송 중 및 유휴 상태의 중요 데이터를 암호화하면 일반 텍스트 데이터를 제3자가 사용할 수 없게 하는 데 도움이 됩니다.
AWS Database Encryption SDK for DynamoDB는 DynamoDB에 보낼 테이블 데이터를 보호하는 데 도움이 되는 소프트웨어 라이브러리입니다. DynamoDB 테이블 항목을 암호화, 서명, 확인 및 복호화합니다. 암호화 및 서명되는 속성을 제어할 수 있습니다.
- 프라이머리 키 관련 고려 사항
-
테이블과 글로벌 보조 인덱스의 프라이머리 키에 민감한 이름이나 민감한 일반 텍스트 데이터를 사용하지 마세요. 키 이름은 테이블 정의에 표시됩니다. 예를 들어 DescribeTable을 직접적으로 호출할 권한이 있는 사람은 누구나 프라이머리 키 이름에 액세스할 수 있습니다. 키 값은 AWS CloudTrail 및 기타 로그에 표시될 수 있습니다. 또한 DynamoDB는 키 값을 사용하여 데이터를 배포하고 요청을 라우팅하며 AWS 관리자는 이 값을 관찰하여 서비스 상태를 유지할 수 있습니다.
테이블 또는 GSI 키 값의 민감한 데이터를 사용해야 하는 경우 종단 간 클라이언트 암호화를 사용하는 것이 좋습니다. 이렇게 하면 데이터에 대한 키-값 참조를 수행할 수 있으며 데이터가 DynamoDB 관련 로그에 암호화되지 않은 상태로 표시되지 않습니다. 이 작업을 수행하는 한 가지 방법은 AWS Database Encryption SDK for DynamoDB를 사용하는 것이지만 이것이 필수는 아닙니다. 자체 솔루션을 사용하는 경우 항상 충분히 안전한 암호화 알고리즘을 사용해야 합니다. 해시와 같은 비암호화 옵션은 대부분의 상황에서 충분히 안전하지 않은 것으로 간주되므로 사용해서는 안 됩니다.
프라이머리 키의 키 이름이 민감한 경우
`pk`
및`sk`
를 대신 사용하는 것이 좋습니다. 이는 파티션 키 설계를 유연하게 만드는 일반적인 모범 사례입니다.무엇이 올바른 선택인지 고민된다면 언제든지 보안 전문가나 AWS 계정 팀에 문의하세요.