메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

고객 제공 암호화 키(SSE-C)로 서버 측 암호화를 사용하여 데이터 보호

서버 측 암호화는 저장된 데이터를 보호하기 위한 것입니다. 고객 제공 암호화 키(SSE-C)로 서버 측 암호화를 사용하여 자체 암호화 키를 설정할 수 있습니다. 요청의 일부로 제공한 암호화 키를 사용하여 Amazon S3는 디스크에 쓸 때, 암호를 해독할 때, 객체에 액세스할 때의 모든 암호화를 관리합니다. 따라서 데이터 암호화 및 암호 해독을 수행하기 위해 어떠한 코드도 사용할 필요가 없으며, 제공한 암호화 키를 관리하기만 하면 됩니다.

객체를 업로드하면 Amazon S3는 제공된 암호화 키를 사용하여 AES-256 암호화를 데이터에 적용하고 메모리에서 암호화 키를 삭제합니다.

중요

Amazon S3는 제공된 암호화 키를 저장하지 않습니다. 대신에 임의로 암호화 키의 솔트 HMAC 값을 저장하여 향후 요청을 검증합니다. 솔트 HMAC 값은 암호화 키의 값을 파생하거나 암호화된 객체의 콘텐츠를 해독하기 위해 사용할 수 없습니다. 즉, 암호화 키를 손실하면 객체도 손실하는 것입니다.

객체를 검색할 경우 요청에 포함된 것과 동일한 암호화 키를 제공해야 합니다. Amazon S3는 제공된 암호화 키가 일치하는지 확인한 후 객체 데이터를 반환하기 전에 객체의 암호화를 해독합니다.

SSE-C의 주요 기능은 다음과 같습니다.

  • https를 사용해야 합니다.

    중요

    Amazon S3는 SSE-C를 사용할 경우, http를 통해 생성된 요청을 거절합니다. 보안상의 이유로 인해, 보안에 취약할 수 있는 http를 사용하면 키를 보내면 오류가 발생할 수 있음을 유의하십시오. 키를 취소하고 적절하게 교체해야 합니다.

  • 응답의 ETag는 객체 데이터의 MD5가 아닙니다.

  • 암호화 키가 사용되는 매핑을 관리하여 객체를 암호화합니다. Amazon S3는 암호화 키를 저장하지 않습니다. 객체에 대해 제공한 암호화 키는 직접 추적해야 합니다.

    • 버전 관리가 활성화된 버킷의 경우, 이 기능을 사용하여 업로드 한 각 객체의 버전에는 자체 암호화 키가 있습니다. 어떤 객체 버전에 어떤 암호화 키가 사용되었는지는 직접 추적해야 합니다.

    • 암호화 키는 클라이언트 측에서 관리하기 때문에 클라이언트 측에서 키 교체와 같은 추가적인 보안 조치를 관리합니다.

    주의

    암호화 키가 분실한 경우 암호화 키 없이 객체에 대한 GET 요청을 하면 실패하며 객체도 손실됩니다.

SSE-C 사용

고객 제공 암호화 키(SSE-C)로 서버 측 암호화를 사용하는 경우, 다음 요청 헤더를 통해 암호화 키 정보를 제공해야 합니다.

이름 설명
x-amz-server-side​-encryption​-customer-algorithm

헤더를 사용하여 암호화 알고리즘을 지정합니다. 헤더 값은 "AES256"이어야 합니다.

x-amz-server-side​-encryption​-customer-key

이 헤더를 사용하여 256비트의 base64 인코딩 암호화 키를 Amazon S3에 제공하여 데이터를 암호화하거나 암호 해독합니다.

x-amz-server-side​-encryption​-customer-key-MD5

이 헤더를 사용하여 RFC 1321에 따라 암호화 키의 128비트 base64 인코딩 MD5 다이제스트를 제공합니다. Amazon S3는 메시지 무결성 검사에 이 헤더를 사용하여 암호화 키가 오류 없이 전송되었음을 확인합니다.

AWS SDK 래퍼 라이브러리를 사용하여 이러한 헤더를 요청에 추가할 수 있습니다. 필요한 경우 애플리케이션에서 직접 Amazon S3 REST API를 호출할 수 있습니다.

참고

Amazon S3 콘솔을 사용하여 객체 및 요청 SSE-C를 업로드할 수 없습니다. 또한 SSE-C를 사용하여 저장된 기존 객체를 업데이트할 수 도 없습니다(예: 스토리지 클래스 변경 또는 메타데이터 추가).

다음 Amazon S3 API는 이러한 헤더를 지원합니다.

  • GET 작업 - GET API(객체 GET 참조)를 사용하여 객체를 검색할 때 요청 헤더를 지정할 수 있습니다. Torrents는 SSE-C를 사용한 객체 암호화를 지원하지 않습니다.

  • HEAD 작업 - HEAD API(객체 HEAD 참조)를 사용하여 객체 메타데이터를 검색하려면 이러한 요청 헤더를 지정하면 됩니다.

  • PUT 작업 - PUT API(PUT Object 참조)를 사용하여 데이터를 업로드할 때 이러한 요청 헤더를 지정할 수 있습니다.

  • 멀티파트 업로드 - 멀티파트 업로드 API를 사용하여 대형 객체를 업로드할 때 이 헤더를 지정할 수 있습니다. 시작 요청에서 이 헤더를 지정하고(멀티파트 업로드 시작 참조) 각각의 후속 부분은 요청(파트 업로드)을 업로드합니다. 각 파트 업로드 요청에서 암호화 정보는 시작 멀티파트 업로드 요청의 시작에서 제공한 내용과 동일해야 합니다.

  • POST 작업 - POST 작업(POST Object 참조)을 사용하여 객체를 업로드할 경우에는 요청 헤더 대신 양식 필드에 동일한 정보를 제공합니다.

  • COPY 작업 - 객체를 복사(PUT Object - Copy 참조)하려면 원본 객체 및 대상 객체가 있어야 합니다. 따라서 다음 사항을 고려해야 합니다.

    • AWS 관리형 키로 서버 측 암호를 사용하여 대상 객체를 암호화하려는 경우, x-amz-server-side​-encryption 요청 헤더를 제공해야 합니다.

    • SSE-C를 사용하여 대상 객체를 암호화하려는 경우, 앞의 표에서 설명한 3개의 헤더를 사용하여 암호화 정보를 제공해야 합니다.

    • SSE-C를 사용하여 원본 객체가 암호화된 경우, 다음 헤더를 사용하여 암호화 키 정보를 제공해야만 Amazon S3가 객체 복사를 위해 객체의 암호화를 해독할 수 있습니다.

      이름 설명
      x-amz-copy-source​-server-side​-encryption​-customer-algorithm

      이 헤더를 포함하여 Amazon S3가 원본 객체 해독에 사용해야 하는 알고리즘을 지정합니다. 이 값은 AES256이어야 합니다.

      x-amz-copy-source​-server-side​-encryption​-customer-key

      이 헤더를 포함하여 Amazon S3가 원본 객체의 암호화를 해독하는 데 사용할 base64 인코딩 암호화 키를 제공합니다. 이 암호화 키는 원본 객체를 만들 때 Amazon S3에 제공한 것이어야 하고 그렇지 않은 경우 Amazon S3는 객체의 암호화를 해독할 수 없습니다.

      x-amz-copy-source-​server-side​-encryption​-customer-key-MD5

      이 헤더를 포함하여 RFC 1321에 따라 암호화 키의 128비트 base64 인코딩 MD5 다이제스트를 제공합니다.

미리 서명된 URL 및 SSE-C

새로운 객체 업로드, 기존 객체 또는 객체 메타데이터 검색과 같은 작업에 사용되는 미리 서명된 URL을 만들 수 있습니다. 미리 서명된 URL은 다음과 같이 SSE-C를 지원합니다.

  • 미리 서명된 URL을 만들 때 서명 계산에 x-amz-server-side​-encryption​-customer-algorithm을 사용하여 알고리즘을 지정해야 합니다.

  • 새로운 객체 업로드, 기존 객체 또는 객체 메타데이터 전용 검색에 미리 서명된 URL을 사용하는 경우, 클라이언트 애플리케이션에서 모든 암호화 헤더를 제공해야 합니다.

자세한 내용은 다음 항목을 참조하십시오.