Amazon Web Services 한국 블로그

Amazon S3용 신규 체크섬 알고리즘 추가

Amazon Simple Storage Service(Amazon S3)는 객체 및 객체와 연결된 메타데이터에 대하여 99.999999999% (11 9초)의 내구성을 제공하도록 설계하였습니다. S3는 입력한 내용을 정확하게 저장하고, 가져오기 시 저장된 내용을 정확하게 반환하므로 안심할 수 있습니다. 객체를 앞뒤로 적절하게 전송하기 위해 S3는 기본적으로 일종의 디지털 지문인 체크섬을 사용합니다.

S3의 PutObject 함수를 사용한다면 이미 객체의 MD5 체크섬을 전달할 수 있고, 제공 값이 S3에서 컴퓨팅한 값과 일치하는 경우에만 작업을 수락합니다. 이러한 경우 S3에서 데이터 전송 오류를 감지할 수 있지만, 이는 PutObject를 호출하기 전 또는 GetObject를 호출한 후에 체크섬을 컴퓨팅해야 함을 의미합니다. 또한 대용량(멀티 GB 또는 멀티 TB) 개체에 대한 체크섬 계산은 계산 집약적이며 병목 현상을 유발할 수 있습니다. 실제로 일부 대규모 S3 사용자는 체크섬 컴퓨팅 및 검증 전용의 특수 목적 EC2 플릿을 구축했습니다.

새로운 체크섬 지원
오늘 저는 S3이 새롭게 네 가지의 체크섬 알고리즘을 지원한다는 사실을 말씀드리게 되어 기쁩니다. 이제 Amazon S3에 저장된 데이터에 대한 체크섬을 계산하고 저장하며, 체크섬을 사용해 업로드 및 다운로드 요청의 무결성을 검사하기가 매우 쉬워졌습니다. 이 신규 기능을 사용하여 업계와 관련된 디지털 보존 모범 사례 및 제어를 구현할 수 있습니다. 특히 각 객체를 S3에 업로드할 때 널리 사용되는 네 가지의 체크섬 알고리즘 (SHA-1, SHA-256, CRC-32CRC-32C) 중 하나를 사용하도록 지정할 수 있습니다.

이 신규 기능의 주요 측면은 다음과 같습니다.

객체 업로드 – AWS SDK 최신 버전은 업로드의 일부로 지정한 체크섬을 컴퓨팅하고, 업로드가 끝나면 이를 HTTP 트레일러에 포함시킵니다. 미리 컴퓨팅한 체크섬을 제공할 수도 있습니다. 어느 쪽이든 S3는 요청 값이 S3에서 컴퓨팅한 값과 일치하면 체크섬을 확인하고 작업을 수락합니다. HTTP 트레일러 사용과 조합하여 이 기능은 클라이언트 측 무결성 검사를 매우 가속화할 수 있습니다.

멀티파트 객체 업로드 – 이제 AWS SDK는 멀티파트 업로드의 각 부분에 대한 클라이언트 측 병렬 처리를 활용하고 체크섬을 컴퓨팅합니다. 모든 부분에 대한 체크섬은 자체적으로 체크섬으로 작성되며, 업로드 완료 시 이 체크섬의 체크섬이 S3으로 전송됩니다.

체크섬 스토리지 및 지속성 – 확인된 체크섬은 지정 알고리즘과 함께 객체 메타데이터의 일부로 저장합니다. 객체에 대한 KMS 키를 사용한 서버 측 암호화를 요청한 경우 해당 체크섬을 암호화된 형식으로 저장합니다. 알고리즘 및 체크섬은 스토리지 클래스를 변경 또는 최신 버전으로 대체하더라도 수명 주기 동안 객체에 고정됩니다. 또한 S3 복제의 일부로 전송됩니다.

체크섬 검색 – 신규 GetObjectAttributes 함수는 객체 및 각 부품(해당하는 경우)에 대한 체크섬을 반환합니다.

체크섬 사용 방식
AWS 명령줄 인터페이스(CLI), AWS SDKs 또는 S3 콘솔에서 이 기능에 액세스할 수 있습니다. 콘솔에서 객체 업로드 준비 시 저는 추가 체크섬 옵션을 사용합니다.

그런 다음 체크섬 함수를 선택합니다.

체크섬을 이미 컴퓨팅했다면 입력할 수 있지만, 그렇지 않다면 콘솔에서 컴퓨팅합니다.

업로드가 완료되면 객체의 등록 정보를 확인하여 체크섬을 볼 수 있습니다.

각 객체에 대한 체크섬 함수도 S3 인벤토리 보고서에 나열됩니다.

SDK는 자체 코드에서 체크섬을 컴퓨팅할 수 있습니다.

open(file_path, 'rb')이 있는 을 파일로:
    r = s3.put_object(
        Bucket=bucket,
        Key=key,
        Body=file,
        ChecksumAlgorithm='sha1'
    )

또는 체크섬을 직접 컴퓨팅하여 put_object로 전달할 수 있습니다.

open(file_path, 'rb')이 있는 을 파일로:
    r = s3.put_object(
        Bucket=bucket,
        Key=key,
        Body=file,
        ChecksumSHA1='fUM9R+mPkIokxBJK7zU5QfeAHSy='
    )

객체 검색 시 체크섬 모드를 지정하여 반환된 객체의 유효성을 검사할 것임을 나타냅니다.

r = s3.get_object(Bucket=bucket, Key=key, ChecksumMode='ENABLED')

실제 유효성 검사는 r['Body']에서 객체를 읽을 때 발생하며, 불일치 요소가 있으면 예외가 발생합니다.

데모 보기
다음은 이 신기능의 데모(re:Invent 2021에서 처음 공개함)입니다.

 

정식 출시
네 개의 추가 체크섬은 이제 모든 정식 출시된 AWS 리전에서 사용할 수 있으며, 추가 비용 없이 지금 바로 시작할 수 있습니다.

Jeff