Amazon Web Services 한국 블로그

Amazon S3 신규 기본 암호화 및 보안 기능 업데이트

지난 2006년 S3를 발표했을 때, “각 블록은 ACL(액세스 제어 목록)로 보호되기 때문에 개발자가 원한다면 데이터를 프라이빗 데이터로 유지해도 되고, 읽을 수 있는 데이터로 공유해도 되고, 읽고 쓸 수 있는 데이터로 공유해도 된다”라고 알려드렸습니다.

접근 권한 부여를 위한 ACL과 프라이빗 버킷을 적용했던 바로 그 첫 번째 모델부터 우리는 필요에 따라 고객 및 파트너와 데이터를 공유하는 동시에 데이터를 안전하게 보호할 수 있는 도구를 제공하겠다는 목표를 가지고 버킷 정책, 서버 액세스 로깅, 버전 관리, API 로깅, 교차 리전 복제, 그리고 클라이언트서버 측 암호화 옵션 등의 지원을 추가해 왔습니다. 이와 함께 대규모 콘텐츠 검색, 분류 및 보호 도구인 Amazon Macie를 출시하여 인공 지능과 기계 학습의 장점도 가져왔습니다.

그리고 오늘, 드디어 S3에 다음 다섯 가지의 암호화 및 보안 기능을 새로 추가합니다.

  • 기본 암호화 – 이제 암호화되지 않은 객체를 거부하는 버킷 정책을 구성하지 않고도 버킷의 모든 객체를 암호화된 형식으로 저장하게 할 수 있습니다.
  • 권한 확인 – S3 콘솔에서는 공개 액세스가 가능한 각 S3 버킷 옆에 눈에 잘 띄는 표시가 나타납니다.
  • 교차 리전 복제 ACL 덮어쓰기 – AWS 계정 간에 객체를 복제할 때, 대상 계정에 대한 모든 액세스 권한을 제공하는 새 ACL을 해당 객체로 가져오도록 지정할 수 있습니다.
  • KMS를 사용한 교차 리전 복제 – 이제 AWS Key Management Service(KMS)로 관리하는 키를 사용해 암호화된 객체를 복제할 수 있습니다.
  • 세부 인벤토리 보고서 – 이제 S3 인벤토리 보고서에 각 객체의 암호화 상태도 표시됩니다. 또한 이 보고서 자체도 암호화가 가능합니다.

그럼 각 기능을 자세히 살펴보겠습니다.

기본 암호화
S3 객체를 위한 서버 측 암호화 옵션에는 S3 관리 키를 사용하는 SSE-S3, AWS KMS 관리 키를 사용하는 SSE-KMS, 사용자 관리 키를 사용하는 SSE-C, 이렇게 세 가지가 있습니다. 특히 유휴 상태에서도 반드시 암호화해야 한다는 규정 준수 요건을 충족해야 하는 고객을 비롯하여 일부 고객들은 새로 저장하는 모든 객체를 버킷 정책으로 암호화해 왔습니다. 이렇게 하면 요건을 준수하는 데 도움이 되기는 하지만, 암호화되지 않은 객체의 저장을 거부하는 것만으로는 완벽한 솔루션이라 할 수 없습니다.

이제 버킷 암호화 구성을 설치하여 버킷의 모든 객체를 암호화된 형태로 저장하도록 강제할 수 있습니다. 즉, 암호화되지 않은 객체가 S3에 입력되면 이 구성에 따라 암호화 사용을 지시하고, 해당 버킷에 지정된 암호화 옵션을 사용해 그 객체를 암호화하게 됩니다(PUT 요청으로 다른 옵션도 지정 가능).

다음은 버킷을 새로 만들 때 S3 콘솔을 사용하여 이 기능을 활성화하는 방법입니다. 평상시처럼 버킷의 이름을 입력하고 [Next]를 클릭합니다. 그런 다음 아래로 스크롤하여 [Default encryption]을 클릭합니다.

원하는 옵션을 선택하고 [Save]를 클릭합니다(AWS-KMS를 선택하면 KMS 키도 지정해야 함).

PUT 버킷 암호화 기능을 호출해서 이와 같이 변경할 수도 있습니다. 이 경우에는 SSE 알고리즘(SSE-S3 또는 SSE-KMS)을 지정해야 하고, 선택적으로 KMS 키를 참조할 수 있습니다.

이 기능을 구현할 때는 다음을 염두에 두십시오.

SigV4 – S3 REST API를 통해 버킷 정책에 액세스하려면 SigV4로 서명하고 SSL 연결을 이용해야 합니다.

버킷 정책 업데이트 – 암호화되지 않은 객체를 거부하는 기존의 버킷 정책을 살펴본 다음 주의해서 수정해야 합니다.

대량 사용 – SSE-KMS를 사용하고 초당 수백에서 수천 개의 객체를 업로드하는 경우, 암호화 및 암호 해독 작업에 대한 KMS 제한에 걸릴 수 있습니다. 이 경우 다음과 같이 지원 사례를 제출해 한도를 높여 달라고 요청하기만 하면 됩니다.

교차 리전 복제 – 암호화되지 않은 객체는 대상 버킷의 구성에 따라 암호화됩니다. 이렇게 암호화된 객체는 그 상태로 유지됩니다.

권한 확인
버킷 정책, 버킷 ACL 및 객체 ACL를 조합하면 버킷과 버킷 내 객체에 대한 액세스를 매우 세밀하게 제어할 수 있습니다. 사용자의 정책과 ACL을 합쳐 원하는 효과를 얻을 수 있도록 하기 위해, AWS는 최근 S3 버킷 보호를 위한 관리형 구성 규칙을 선보였습니다. 게시물에서 언급했듯이, 이러한 규칙에는 자동 형식 추론을 사용하기 위한 기술이 들어가 있습니다.

이제 바로 그 기본 기술을 사용하여 버킷 정책 및 ACL을 변경하자마자 그 효과를 확인할 수 있습니다. 퍼블릭 액세스를 위해 버킷을 여는 즉시 이러한 효과가 확인되기 때문에 자신 있게 변경할 수 있습니다.

다음은 S3 콘솔 기본 페이지의 모양입니다(편의상 액세스 열 기준으로 정렬).

버킷 중 하나로 들어가 살펴보면 퍼블릭 표시기도 나와 있습니다.

또한 어떤 권한 요소(ACL, 버킷 정책 또는 둘 다)가 퍼블릭 액세스를 지원하고 있는지도 확인할 수 있습니다.

교차 리전 복제 ACL 덮어쓰기
고객들은 흔히 미션 크리티컬 객체 및 데이터를 다른 AWS 계정의 대상 버킷으로 복사할 때 S3의 교차 리전 복제를 사용합니다. 이 복제 프로세스는 객체를 복사하는 한편 객체 ACL 및 그 객체와 연결된 모든 태그를 복사합니다.

여기에 전송 중 ACL를 교체하여 대상 버킷의 소유자에게 모든 액세스 권한을 부여할 수 있도록 함으로써 이 기능을 더욱 유용하게 만들었습니다. 이러한 변경 덕분에 소스 및 대상 데이터의 소유권을 AWS 계정 간에 나눌 수 있고, 이를 토대로 원본 객체와 그 복제본에 대한 소유권 스택을 별도로 관리할 수 있습니다.

복제 설정 시 이 기능을 활성화하려면 계정 ID 및 버킷 이름을 지정한 다음 [Save]를 클릭하여 다른 계정과 다른 리전에 있는 대상 버킷을 선택합니다.

그런 다음 [Change object ownership…]을 클릭합니다.

또한 대상 계정의 대상 버킷에 대한 키 정책을 보다 쉽게 설정할 수 있도록 했습니다. 따라서 계정에 로그인하여 원하는 버킷을 찾은 다음, [Management] 및 [Replication]을 차례로 클릭하고 [More] 메뉴에서 [Receive objects…]를 선택하기만 하면 됩니다.

소스 계정 ID를 입력하고, 버전 관리를 활성화하고, 정책을 살펴보고 적용한 다음 [Done]을 클릭합니다.

KMS를 사용한 교차 리전 복제
SSE-KMS로 암호화한 객체를 리전 간에 복제하는 데는 흥미로운 문제가 있는데, 오늘은 이 문제를 다루고자 합니다. KMS 키는 특정 리전에 고유한 키이기 때문에 암호화된 객체를 복제만 해서는 효과가 없습니다.

이제 교차 리전 복제를 설정할 때 대상 키를 선택할 수 있습니다. 복제 프로세스 중 암호화된 객체는 SSL 연결을 통해 대상으로 복제됩니다. 이어서 대상에서는 복제 구성에 지정된 KMS 마스터 키로 데이터 키를 암호화합니다. 이때 객체는 원래의 암호화된 형태를 끝까지 유지하며, 실제로 달라지는 것은 키가 들어 있는 봉투뿐입니다.

아래 그림은 복제 규칙을 설정할 때 이 기능을 활성화하는 방법을 보여줍니다.

단, 앞서 언급한 것처럼 이 기능을 많이 사용하려면 먼저 KMS 한도 증가를 요청해야 할 수 있습니다.

세부 인벤토리 보고서
마지막으로 역시 중요한 기능이라면, 이제 각 객체의 암호화 상태에 대한 정보를 담은 일별 또는 주별 S3 인벤토리 보고서를 요청할 수 있습니다.

보시다시피 보고서에 대한 SSE-S3 또는 SSE-KMS 암호화를 요청할 수도 있습니다.

정식 출시
모든 기능을 바로 사용할 수 있습니다! 이러한 기능은 무료로 제공되지만 KMS 호출, S3 스토리지, S3 요청 및 리전 간 데이터 전송에는 일반 요금이 청구됩니다.

Jeff;

이 글은 New Amazon S3 Encryption & Security Features의 한국어 버전입니다.