Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

Amazon S3 보안 모범 사례

Amazon S3은 자체 보안 정책을 개발하고 구현할 때 고려해야 할 여러 가지 보안 기능을 제공합니다. 다음 모범 사례는 일반적인 지침이며 완벽한 보안 솔루션을 나타내지는 않습니다. 이러한 모범 사례는 환경에 적절하지 않거나 충분하지 않을 수 있으므로 참고용으로만 사용해 주십시오.

Amazon S3 예방 보안 모범 사례

다음과 같은 Amazon S3 모범 사례를 통해 보안 사고를 예방할 수 있습니다.

Amazon S3 버킷이 올바른 정책을 사용하게 하고 이 버킷에 대한 퍼블릭 액세스 방지

인터넷의 누군가에게 S3 버킷을 읽거나 이 버킷에 쓰도록 명시적으로 요구하지 않을 경우 S3 버킷이 공개되지 않도록 해야 합니다. 다음과 같이 몇 가지 단계를 수행할 수 있습니다.

  • Amazon S3 퍼블릭 액세스 차단을 사용합니다. Amazon S3 퍼블릭 액세스 차단을 사용하면 계정 관리자와 버킷 소유자가 리소스 생성 방식에 관계없이 적용되는 Amazon S3 리소스에 대한 퍼블릭 액세스를 제한하는 중앙 집중식 제어를 쉽게 설정할 수 있습니다. 자세한 내용은 Amazon S3 퍼블릭 액세스 차단 사용 단원을 참조하십시오.

  • 보안 주체 “*”(“아무나”를 효과적으로 표현)와 같은 와일드카드 자격 증명을 허용하거나 와일드카드 작업 “*”(Amazon S3 버킷에서 아무 작업이나 수행하도록 사용자에게 효과적으로 허용)를 허용하는 Amazon S3 버킷 정책을 식별합니다.

  • 마찬가지로 “모든 사람”이나 “인증된 모든 AWS 사용자”에게 읽기, 쓰기 또는 모든 액세스 권한을 제공하는 Amazon S3 버킷 ACL(액세스 제어 목록)을 메모합니다.

  • ListBuckets API를 사용하여 Amazon S3 버킷을 모두 스캔합니다. 그런 다음 GetBucketAcl, GetBucketWebsiteGetBucketPolicy를 사용하여 버킷에 규정에 맞는 액세스 제어와 구성이 있는지 확인합니다.

  • AWS Trusted Advisor를 사용하여 Amazon S3 구현을 조사합니다.

  • s3-bucket-public-read-prohibiteds3-bucket-public-write-prohibited 관리형 AWS Config 규칙를 사용하여 지속적인 탐지 제어를 구현해 보십시오.

자세한 내용은 Amazon Simple Storage Service 콘솔 사용 설명서버킷 및 객체 액세스 권한 설정을 참조하십시오.

최소 권한 액세스 구현

권한을 부여할 때 누가 어떤 Amazon S3 리소스에 대해 어떤 권한을 갖는지 결정합니다. 해당 리소스에서 허용할 작업을 활성화합니다. 따라서 작업을 수행하는 데 필요한 권한만 부여해야 합니다. 최소 권한 액세스를 구현하는 것이 오류 또는 악의적인 의도로 인해 발생할 수 있는 보안 위험과 영향을 최소화할 수 있는 근본적인 방법입니다.

다음과 같은 도구를 사용하여 최소 권한 액세스를 구현할 수 있습니다.

앞에 나온 메커니즘 중 하나 이상을 선택할 때 고려할 내용은 Amazon S3 리소스에 대한 액세스 권한 관리 소개 단원을 참조하십시오.

Amazon S3 액세스를 요구하는 애플리케이션 및 AWS 제품에 IAM 역할 사용

Amazon EC2나 다른 AWS 제품의 애플리케이션이 Amazon S3 리소스에 액세스하기 위해서는 AWS API 요청에 유효한 AWS 자격 증명이 있어야 합니다. AWS 자격 증명을 애플리케이션이나 Amazon EC2 인스턴스에 직접 저장하면 안 됩니다. 이러한 자격 증명은 자동으로 교체되지 않으며 손상된 경우 비즈니스에 큰 영향을 줄 수 있는 장기 자격 증명입니다.

대신 IAM 역할을 사용하여 Amazon S3에 액세스해야 하는 애플리케이션이나 서비스의 임시 자격 증명을 관리해야 합니다. 역할을 사용할 때 Amazon EC2 인스턴스나 AWS 제품(예: AWS Lambda)에 장기 자격 증명(예: 사용자 이름과 암호 또는 액세스 키)을 배포할 필요가 없습니다. 애플리케이션에서 다른 AWS 리소스를 호출할 때 사용할 수 있는 임시 권한을 역할이 제공합니다.

자세한 정보는 IAM 사용 설명서에서 다음 주제를 참조하십시오.

Multi-Factor Authentication(MFA) 삭제 활성화

MFA 삭제를 사용하면 잘못해서 버킷을 삭제하는 일을 방지할 수 있습니다. MFA 삭제를 활성화하지 않으면 권한이 충분한 루트 또는 IAM 사용자의 암호를 가진 사용자는 누구든지 Amazon S3 객체를 영구히 삭제할 수 있습니다.

MFA 삭제를 사용하려면 다음 작업 중 하나를 위한 추가 인증이 필요합니다.

  • 버킷의 버전 관리 상태 변경

  • 객체 버전 영구 삭제

자세한 내용은 MFA Delete 단원을 참조하십시오.

유휴 데이터의 암호화 고려

Amazon S3에서 유휴 데이터를 보호하는 다음과 같은 옵션이 있습니다.

  • 서버 측 암호화 – 데이터 센터의 디스크에 저장하기 전에 객체를 암호화하고 객체를 다운로드할 때 이를 해독하도록 Amazon S3에 요청합니다. 서버 측 암호화를 사용하면 데이터 자체를 저장하는 것과는 다른 메커니즘으로 저장되는 키로 데이터를 암호화하여 데이터에 가해지는 위험을 줄일 수 있습니다.

    Amazon S3에서는 여러 가지 서버 측 암호화 옵션을 제공합니다. 자세한 내용은 서버 측 암호화를 사용하여 데이터 보호 단원을 참조하십시오.

  • 클라이언트 측 암호화 – 클라이언트 측 데이터를 암호화하여 암호화된 데이터를 Amazon S3에 업로드합니다. 이 경우 사용자가 암호화 프로세스, 암호화 키 및 관련 도구를 관리합니다. 서버 측 암호화를 사용할 때처럼, 클라이언트 측 암호화를 사용하면 데이터 자체를 저장하는 것과는 다른 메커니즘으로 저장되는 키로 데이터를 암호화하여 위험을 줄일 수 있습니다.

    Amazon S3에서는 여러 가지 클라이언트 측 암호화 옵션을 제공합니다. 자세한 내용은 클라이언트측 암호화를 사용하여 데이터 보호 단원을 참조하십시오.

전송 중 데이터의 암호화 적용

HTTPS(TLS)를 사용하여 잠재적 공격자가 네트워크 트래픽을 염탐하거나 중간자 또는 그와 유사한 공격을 사용하여 네트워크 트래픽을 조작하지 못하게 할 수 있습니다. Amazon S3 버킷 정책에 aws:SecureTransport 조건을 사용하여 HTTPS(TLS)를 통해 암호화된 연결만 허용해야 합니다.

s3-bucket-ssl-requests-only 관리형 AWS Config 규칙을 사용하여 지속적 탐지 제어를 구현하는 것도 고려해 보십시오.

Amazon S3 객체 잠금 고려

Amazon S3 객체 잠금을 사용하면 WORM("Write Once Read Many) 모델을 사용하여 객체를 저장할 수 있습니다. Amazon S3 객체 잠금은 부적절하거나 실수로 인한 데이터 삭제를 예방하는 데 도움이 됩니다. 예를 들어 Amazon S3 객체 잠금을 사용하여 AWS CloudTrail 로그를 보호할 수 있습니다.

버전 관리 사용

버전 관리는 동일 버킷 내에 여러 개의 객체 변형을 보유하는 것을 의미합니다. 버전 관리를 사용하면 Amazon S3 버킷에 저장된 모든 버전의 모든 객체를 보존, 검색 및 복원할 수 있습니다. 또한 의도치 않은 사용자 작업 및 애플리케이션 장애로부터 쉽게 복구할 수 있습니다.

s3-bucket-versioning-enabled 관리형 AWS Config 규칙을 사용하여 지속적 탐지 제어를 구현하는 것도 고려해 보십시오.

자세한 내용은 버전 관리 사용 단원을 참조하십시오.

Amazon S3 교차 리전 복제 고려

Amazon S3이 기본적으로 여러 지역에 있는 다양한 가용 영역에 데이터를 저장하지만, 규정 준수 요구 사항에 따라 훨씬 먼 거리에 데이터를 저장해야 할 수도 있습니다. CRR(교차 리전 복제)을 사용하면 멀리 있는 AWS 리전 간에 데이터를 복제하여 이 요구 사항을 충족할 수 있습니다. CRR은 여러 AWS 리전에 있는 버킷 간에 객체를 비동기식으로 자동 복제할 수 있게 합니다. 자세한 내용은 복제 단원을 참조하십시오.

참고

CRR을 사용할 경우 원본 및 대상 S3 버킷 둘 다 버전 관리가 활성화되어야 합니다.

s3-bucket-replication-enabled 관리형 AWS Config 규칙을 사용하여 지속적 탐지 제어를 구현하는 것도 고려해 보십시오.

Amazon S3 액세스의 VPC 엔드포인트 고려

Amazon S3의 VPC 엔드포인트는 Amazon S3에만 연결을 허용하는 Amazon Virtual Private Cloud(Amazon VPC) 내 논리적 개체입니다. Amazon S3 버킷 정책을 사용하여 특정 Amazon VPC 엔드포인트나 특정 VPC에서 버킷에 대한 액세스를 제어할 수 있습니다. VPC 엔드포인트는 트래픽이 공개된 인터넷을 잠재적으로 통과하고 공개된 인터넷 환경에 있게 되는 것을 방지해 줍니다.

Amazon S3의 VPC 엔드포인트는 Amazon S3 데이터에 대한 액세스를 제어하는 두 가지 방법을 제공합니다.

  • 사용자는 특정 VPC 종단점을 통해 허용되는 요청, 사용자 또는 그룹을 제어할 수 있습니다.

  • S3 버킷 정책을 사용하여 S3 버킷에 대한 액세스를 갖게되는 VPC 또는 VPC 종단점을 제어할 수 있습니다.

  • 인터넷 게이트웨이가 없는 VPC를 사용하여 데이터 유출을 방지할 수 있습니다.

자세한 내용은 Amazon S3의 VPC 엔드포인트에 대한 예제 버킷 정책 단원을 참조하십시오.

Amazon S3 모니터링 및 감사 모범 사례

다음과 같은 Amazon S3 모범 사례가 잠재적 보안 약점과 사고를 탐지하는 데 도움이 됩니다.

모든 Amazon S3 버킷 식별 및 감사

IT 자산 식별은 거버넌스와 보안의 중요한 측면입니다. 모든 Amazon S3 리소스를 파악하여 보안 태세를 평가하고 약점이 될 수 있는 부분에 조치를 취해야 합니다.

Tag Editor를 사용하여 보안이나 감사에 민감한 리소스를 식별한 후, 이 리소스를 검색해야 할 때 태그를 이용하십시오. 자세한 내용은 태그를 지정할 리소스 검색을 참조하십시오.

Amazon S3 인벤토리를 사용하여 비즈니스, 규정 준수 및 규제 요건에 대한 객체의 복제 및 암호화 상태를 감사하고 보고합니다. 자세한 내용은 Amazon S3 인벤토리 단원을 참조하십시오.

Amazon S3 리소스의 리소스 그룹을 만드십시오. 자세한 내용은 AWS 리소스 그룹이란 무엇입니까?를 참조하십시오.

AWS 모니터링 도구를 사용하여 모니터링 구현

모니터링은 Amazon S3과 AWS 솔루션의 안정성, 보안, 가용성 및 성능을 유지하는 데 중요한 부분입니다. AWS에서는 Amazon S3과 다른 AWS 제품을 모니터링할 수 있는 여러 가지 도구와 서비스를 제공합니다. 예를 들어 Amazon S3을 위한 CloudWatch 지표, 특히 PutRequests, GetRequests, 4xxErrorsDeleteRequests를 모니터링할 수 있습니다. 자세한 내용은 Amazon CloudWatch로 지표 모니터링 단원을 참조하십시오. 자세한 내용은 Amazon S3 모니터링 단원을 참조하십시오.

두 번째 예는 예제: Amazon S3 버킷 작업을 참조하십시오. 이 예에서는 버킷 정책, 버킷 수명 주기 또는 버킷 복제를 PUT 또는 DELETE하거나 버킷 ACL을 PUT하기 위해 Amazon S3 API가 호출될 때 트리거되는 Amazon CloudWatch 경보를 생성하는 방법을 설명합니다.

Amazon S3 서버 액세스 로깅 활성화

서버 액세스 로깅은 버킷에 대해 이루어진 요청의 상세 레코드를 제공합니다. 서버 액세스 로그는 보안 및 액세스 감사에 도움이 되고, 고객 기반을 파악하고 Amazon S3 청구서를 이해하는 데 유용합니다. 서버 액세스 로깅 활성화에 대한 자세한 내용은 Amazon S3 서버 액세스 로깅 단원을 참조하십시오.

s3-bucket-logging-enabled AWS Config 관리형 규칙을 사용하여 지속적 탐지 제어를 구현하는 것도 고려해 보십시오.

AWS CloudTrail 사용

AWS CloudTrail에서는 Amazon S3의 사용자, 역할 또는 AWS 제품에서 수행한 작업의 레코드를 제공합니다. CloudTrail에서 수집한 정보를 사용하여 Amazon S3에 수행된 요청, 요청이 수행된 IP 주소, 요청을 수행한 사람, 요청이 수행된 시간 및 추가 세부 정보를 확인할 수 있습니다. 예를 들어, 데이터 액세스에 영향을 주는 Put 작업(특히 PutBucketAcl, PutObjectAcl, PutBucketPolicy, PutBucketWebsite)의 CloudTrail 항목을 식별할 수 있습니다. 자세한 내용은 AWS CloudTrail을 사용하여 Amazon S3 API 호출 로깅 단원을 참조하십시오.

CloudTrail을 Amazon S3 서버 액세스 로깅과 함께 사용할 수도 있습니다. Amazon S3 서버 액세스 로깅은 버킷에 대해 이루어진 요청의 액세스 로그를 제공하지만, 객체 수준에서 API 작업에 대해 알려주지는 않습니다. CloudTrail은 Amazon S3 객체 수준 API 작업(예: GetObject, DeleteObject, PutObject)을 지원합니다. 데이터 이벤트라고 하는 이 이벤트를 모니터링하면 Amazon S3 객체 관련 작업에 대해 중요한 정보를 얻을 수 있습니다. 자세한 내용은 AWS CloudTrail User Guide데이터 이벤트를 참조하십시오.

AWS Config 활성화

이 주제에 나오는 여러 가지 모범 사례는 AWS Config 규칙 생성을 제안합니다. AWS Config를 사용하면 AWS 리소스의 구성을 평가, 감사 및 측정할 수 있습니다. AWS Config는 리소스 구성을 모니터링하여 원하는 보안 구성을 기준으로 기록된 구성을 평가할 수 있게 해줍니다. AWS Config를 사용하면 AWS 리소스 간 구성 및 관계 변화를 검토하고, 자세한 리소스 구성 기록을 조사하고, 내부 지침에 지정되어 있는 구성을 기준으로 전반적인 규정 준수 여부를 확인할 수 있습니다. 이를 사용하면 규정 준수 감사, 보안 분석, 변경 관리 및 운영 문제 해결 작업을 간소화할 수 있습니다. 자세한 내용은 AWS Config 개발자 안내서콘솔을 통해 AWS Config 설정을 참조하십시오. 기록할 리소스 유형을 지정할 때 Amazon S3 리소스를 포함해야 합니다.

AWS Config를 사용하여, 퍼블릭 액세스를 허용하는 Amazon S3 버킷을 모니터링하고 이에 응답하는 방법의 예를 보려면 AWS 보안 블로그How to Use AWS Config to Monitor for and Respond to Amazon S3 Buckets Allowing Public Access를 참조하십시오.

Amazon S3와 함께 Amazon Macie 사용 고려

Macie는 기계 학습을 사용하여 AWS에서 민감한 데이터를 자동으로 검색, 분류 및 보호합니다. Macie는 PII(개인 식별 정보) 또는 지적 재산과 같은 민감한 데이터를 인식합니다. 이 데이터에 대한 액세스와 이동이 어떻게 이루어지는지 알 수 있는 대시보드와 알림을 제공합니다. 자세한 내용은 Amazon Macie란 무엇입니까?를 참조하십시오.

AWS 보안 권고 사항 모니터링

AWS 계정의 Trusted Advisor에 게시되는 보안 권고 사항을 정기적으로 확인해야 합니다. 특히 “공개 액세스 권한”이 있는 Amazon S3 버킷에 대한 경고에 유의하십시오. 프로그래밍 방식으로 describe-trusted-advisor-checks를 사용하면 됩니다.

뿐만 아니라, 각 AWS 계정에 등록된 기본 이메일 주소를 적극 모니터링하십시오. 사용자에게 영향을 줄 수 있는 보안 문제가 생기면 AWS에서 이 이메일 주소를 사용하여 연락해 드립니다.

널리 영향을 미치는 AWS 운영 문제는 AWS 서비스 상태 대시보드에 게시됩니다. Personal Health Dashboard를 통해 개별 계정에도 운영 문제가 게시됩니다. 자세한 내용은 AWS Health 설명서를 참조하십시오.