Amazon S3에서 저장 데이터의 객체 무결성 확인하기
Amazon S3에서 저장 데이터의 객체 무결성 확인하기
Amazon S3에 저장된 데이터셋의 내용을 검증해야 한다면, S3 Batch Operations의 Compute checksum 작업이 저장된 객체에 대한 전체 객체 또는 복합(composite) 체크섬을 계산해줘요. Compute checksum 작업은 Batch Operations를 사용해 객체 그룹에 대한 체크섬 값을 비동기적으로 계산하고, 데이터의 새 복사본을 만들거나 어떤 데이터도 복원·다운로드하지 않고 통합 무결성 보고서를 자동으로 생성해요.
Compute checksum 작업으로 단일 작업 요청에서 수십억 개 객체를 효율적으로 검증할 수 있어요. 각 Compute checksum 작업 요청에 대해 S3는 체크섬 값을 계산하고 이를 자동 생성 무결성 보고서(완료 보고서라고도 함)에 포함해요. 그런 다음 완료 보고서를 사용해 데이터셋의 무결성을 검증할 수 있어요.
Compute checksum 작업은 스토리지 클래스나 객체 크기와 무관하게 S3에 저장된 모든 객체에서 작동해요. 객체를 데이터 보존 모범 사례로 검증해야 하든, 규정 준수 요구 사항을 충족해야 하든, Compute checksum 작업은 체크섬 계산을 저장 상태에서 수행해 데이터 검증에 필요한 비용, 시간, 노력을 줄여줘요. Compute checksum 요금에 대한 정보는 Amazon S3 요금의 Management and insights 탭을 참고하세요.
그런 다음 생성된 완료 보고서의 출력을 여러분이 데이터베이스에 저장한 체크섬 값과 비교해 데이터셋이 시간이 지나도 그대로 유지되는지 검증할 수 있어요. 이 접근 방식은 비즈니스와 규정 준수 요구 사항에 대한 종단 간 데이터 무결성을 유지하는 데 도움을 줘요. 예를 들어 Compute checksum 작업을 사용해 S3 Glacier 스토리지 클래스에 저장된 객체 목록을 연례 보안 감사용으로 제출할 수 있어요. 또한 지원되는 다양한 체크섬 알고리즘 덕분에 애플리케이션에서 사용하는 알고리즘과의 연속성을 유지할 수 있어요.
출처: 문서
본문
지원되는 체크섬 알고리즘 사용
저장 데이터의 경우 지원되는 체크섬 알고리즘 중 어느 것으로든 체크섬을 계산할 수 있어요.
지원되는 모든 체크섬 알고리즘은 전체 객체와 복합 체크섬 유형을 모두 지원해요. 단, CRC-64/NVME(CRC64NVME)는 전체 객체 체크섬 유형만 지원해요.
- CRC-64/NVME (
CRC64NVME) - CRC-32 (
CRC32) - CRC-32C (
CRC32C) - SHA-1 (
SHA1) - SHA-256 (
SHA256) - MD5 (
MD5) - XXHash64 (
XXHASH64) - XXHash3 (
XXHASH3) - XXHash128 (
XXHASH128) - SHA-512 (
SHA512)
Compute checksum 사용
Amazon S3에 저장된 객체에 대해 S3 Batch Operations와 함께 Compute checksum 작업을 사용해 저장 데이터의 내용을 확인할 수 있어요. Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), REST API, 또는 AWS SDK로 Compute checksum Batch Operations 작업을 만들 수 있어요. Compute checksum 작업이 끝나면 완료 보고서를 받아요. 완료 보고서 사용 방법에 대한 자세한 내용은 작업 상태·완료 보고서 추적을 참고하세요.
Compute checksum 작업을 만들기 전에 여러분을 대신해 작업을 수행할 수 있는 권한을 Amazon S3에 부여하는 S3 Batch Operations AWS Identity and Access Management(IAM) 역할을 만들어야 해요. 매니페스트 파일을 읽고 S3 버킷에 완료 보고서를 쓸 권한을 부여해야 해요. 자세한 내용은 체크섬 계산을 참고하세요.
Compute checksum 작업을 사용하려면
- AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.
- 탐색 표시줄에서 현재 표시된 AWS 리전의 이름을 선택합니다. 그다음 작업을 만들 리전을 선택합니다.
참고
복사 작업의 경우 대상 버킷과 같은 리전에서 작업을 만들어야 해요. 다른 모든 작업의 경우 매니페스트의 객체와 같은 리전에서 작업을 만들어야 해요.
- Amazon S3 콘솔의 왼쪽 탐색 창에서 Batch Operations를 선택합니다.
- Create job을 선택합니다.
- 작업을 만들 AWS 리전을 확인합니다.
참고
복사 작업의 경우 대상 버킷과 같은 리전에서 작업을 만들어야 해요. 다른 모든 작업의 경우 매니페스트의 객체와 같은 리전에서 작업을 만들어야 해요.
- Manifest format에서 사용할 매니페스트 객체 유형을 선택합니다.
- **S3 inventory report (manifest.json)**를 선택하면
manifest.json객체의 경로를 입력하고, 특정 객체 버전을 사용하려면 (선택적으로) Manifest object version ID를 입력합니다. 또는 Browse S3를 선택하고 매니페스트 JSON 파일을 선택하면 모든 매니페스트 객체 필드 항목이 자동으로 채워집니다. - CSV를 선택하면 Manifest location 유형을 선택합니다. 그다음 CSV 형식의 매니페스트 객체 경로를 입력하거나 Browse S3를 선택해 매니페스트 객체를 선택합니다. 매니페스트 객체는 콘솔에 설명된 형식을 따라야 합니다. 매니페스트 객체의 특정 버전을 사용하려면 객체 버전 ID도 지정할 수 있습니다.
- Create manifest using S3 Replication configuration을 선택하면 복제 구성으로 객체 목록이 생성되어 여러분이 선택한 대상에 (선택적으로) 저장됩니다. 복제 구성을 사용해 매니페스트를 생성할 때 사용 가능한 유일한 작업은 Replicate입니다.
- **S3 inventory report (manifest.json)**를 선택하면
- Next를 선택합니다.
- Operation에서 Compute checksum 작업을 선택해 매니페스트에 나열된 모든 객체에 대해 체크섬을 계산합니다. 작업에 대한 Checksum type과 Checksum function을 선택합니다. 그다음 Next를 선택합니다.
- Configure additional options의 정보를 채운 다음 Next를 선택합니다.
- Configure additional options 페이지에서 Compute checksum 작업에 대한 정보를 채웁니다.
참고
Completion report에서 승인 문(acknowledgement statement)을 확인하세요. 이 승인 문은 완료 보고서에 Amazon S3에 저장된 데이터의 무결성을 검증하는 데 사용되는 체크섬 값이 포함되어 있음을 확인하는 내용이에요. 따라서 완료 보고서는 주의해서 공유해야 해요. 또한 Compute checksum 요청을 만들면서 완료 보고서를 저장할 외부 계정 소유자의 버킷 위치를 지정하는 경우, 외부 버킷 소유자의 AWS 계정 ID를 지정해야 한다는 점도 기억하세요.
- Next를 선택합니다.
- Review 페이지에서 설정을 검토하고 확인합니다.
- (선택) 변경이 필요하면 Previous를 선택해 이전 페이지로 돌아가거나, Edit를 선택해 특정 단계를 업데이트합니다.
- 변경을 확인한 후 Create job을 선택합니다.
모든 Compute checksum 요청의 진행 상황을 나열하고 모니터링하려면
- AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Batch Operations를 선택합니다.
- Batch Operations 페이지에서 작업 우선순위, 작업 완료율, 총 객체 수 같은 작업 세부 정보를 검토할 수 있습니다.
- 특정 Compute checksum 작업을 관리하거나 복제하려면 Job ID를 선택해 추가 작업 정보를 검토합니다.
- 특정 Compute checksum 작업 페이지에서 작업 세부 정보를 검토합니다.
각 배치 작업은 서로 다른 작업 상태를 거쳐 진행돼요. S3 콘솔에서 AWS CloudTrail 이벤트를 활성화해 작업 상태 변경에 대한 알림을 받을 수도 있어요. 활성 작업의 경우 Job details 페이지에서 실행 중인 작업과 완료율을 검토할 수 있습니다.
Java
예시: Compute checksum 작업 만들기
다음 예시는 Create job 요청의 일부로 Compute checksum 작업을 만들고 매니페스트를 지정하는 방법을 보여줘요.
// Required parameters
String accountId = "111122223333";
String roleArn = "arn:aws:iam::111122223333:role/BatchOperations";
String manifestArn = "arn:aws:s3:::my_manifests/manifest.csv";
String manifestEtag = "60e460c9d1046e73f7dde5043ac3ae85";
String reportBucketArn = "arn:aws:s3:::amzn-s3-demo-completion-report-bucket";
String reportExpectedBucketOwner = "111122223333";
String reportPrefix = "demo-report";
// Job Operation
S3ComputeObjectChecksumOperation s3ComputeObjectChecksum = S3ComputeObjectChecksumOperation.builder()
.checksumAlgorithm(ComputeObjectChecksumAlgorithm.CRC64)
.checksumType(ComputeObjectChecksumType.COMPOSITE)
.build();
JobOperation operation = JobOperation.builder()
.s3ComputeObjectChecksum(s3ComputeObjectChecksum)
.build();
// Job Manifest
JobManifestLocation location = JobManifestLocation.builder()
.eTag(manifestEtag)
.objectArn(manifestArn)
.build();
JobManifestSpec spec = JobManifestSpec.builder()
.format(JobManifestFormat.S3_BATCH_OPERATIONS_CSV_20180820)
.fields(Arrays.asList(JobManifestFieldName.BUCKET, JobManifestFieldName.KEY))
.build();
JobManifest manifest = JobManifest.builder()
.location(location)
.spec(spec)
.build();
// Completion Report
JobReport report = JobReport.builder()
.bucket(reportBucketArn)
.enabled(true) // Must be true
.expectedBucketOwner(reportExpectedBucketOwner)
.format(JobReportFormat.REPORT_CSV_20180820)
.prefix(reportPrefix)
.reportScope(JobReportScope.ALL_TASKS)
.build();
// Create Job Request
CreateJobRequest request = CreateJobRequest.builder()
.accountId(accountId)
.confirmationRequired(false)
.manifest(manifest)
.operation(operation)
.priority(10)
.report(report)
.roleArn(roleArn);
// Create the client
S3ControlClient client = S3ControlClient.builder()
.credentialsProvider(new ProfileCredentialsProvider())
.region(Region.US_EAST_1)
.build();
// Send the request
try {
CreateJobResponse response = client.createJob(request);
System.out.println(response);
} catch (AwsServiceException e) {
System.out.println("AwsServiceException: " + e.getMessage());
throw new RuntimeException(e);
} catch (SdkClientException e) {
System.out.println("SdkClientException: " + e.getMessage());
throw new RuntimeException(e);
}
예시: Compute checksum 작업 세부 정보 보기
다음 예시는 작업 ID를 지정해 Compute checksum 작업 요청의 작업 세부 정보(작업 완료율 등)를 보는 방법을 보여줘요.
DescribeJobRequest request = DescribeJobRequest.builder()
.accountId("1234567890")
.jobId("a16217a1-e082-48e5-b04f-31fac3a66b13")
.build();
create-job 명령으로 새 배치 작업을 만들고 객체 목록을 제공할 수 있어요. 그런 다음 체크섬 알고리즘과 체크섬 유형, 그리고 Compute checksum 보고서를 저장하려는 대상 버킷을 지정해요. 다음 예시는 AWS 계정 111122223333에 대해 S3 생성 매니페스트를 사용해 S3 Batch Operations Compute checksum 작업을 만들어요.
이 명령을 사용하려면 user input placeholders를 여러분의 정보로 바꾸세요.
aws s3control create-job \
--account-id 111122223333 \
--manifest '{"Spec":{"Format":"S3BatchOperations_CSV_20180820","Fields":["Bucket","Key"]},"Location":{"ObjectArn":"arn:aws:s3:::my-manifest-bucket/manifest.csv","ETag":"e0e8bfc50e0f0c5d5a1a5f0e0e8bfc50"}}' \
--manifest-generator '{
"S3JobManifestGenerator": {
"ExpectedBucketOwner": "111122223333",
"SourceBucket": "arn:aws:s3:::amzn-s3-demo-source-bucket",
"EnableManifestOutput": true,
"ManifestOutputLocation": {
"ExpectedManifestBucketOwner": "111122223333",
"Bucket": "arn:aws:s3:::amzn-s3-demo-manifest-bucket",
"ManifestPrefix": "prefix",
"ManifestFormat": "S3InventoryReport_CSV_20211130"
},
"Filter": {
"CreatedAfter": "2023-09-01",
"CreatedBefore": "2023-10-01",
"KeyNameConstraint": {
"MatchAnyPrefix": [
"prefix"
],
"MatchAnySuffix": [
"suffix"
]
},
"ObjectSizeGreaterThanBytes": 100,
"ObjectSizeLessThanBytes": 200,
"MatchAnyStorageClass": [
"STANDARD",
"STANDARD_IA"
]
}
}
}' \
--operation '{"S3ComputeObjectChecksum":{"ChecksumAlgorithm":"CRC64NVME","ChecksumType":"FULL_OBJECT"}}' \
--report '{"Bucket":"arn:aws:s3:::my-report-bucket","Format":"Report_CSV_20180820","Enabled":true,"Prefix":"batch-op-reports/","ReportScope":"AllTasks","ExpectedBucketOwner":"111122223333"}' \
--priority 10 \
--role-arn arn:aws:iam::123456789012:role/S3BatchJobRole \
--client-request-token 6e023a7e-4820-4654-8c81-7247361aeb73 \
--description "Compute object checksums" \
--region us-west-2
Compute checksum 작업을 제출한 후 응답으로 작업 ID를 받고, 그것이 S3 Batch Operations 목록 페이지에 나타나요. Amazon S3는 객체 목록을 처리하고 각 객체에 대한 체크섬을 계산해요. 작업이 끝나면 S3는 지정된 대상에 통합 Compute checksum 보고서를 제공해요.
Compute checksum 작업의 진행 상황을 모니터링하려면 describe-job 명령을 사용하세요. 이 명령은 지정된 배치 작업의 상태를 확인해요. 이 명령을 사용하려면 user input placeholders를 여러분의 정보로 바꾸세요.
예를 들어:
aws s3control describe-job --account-id 111122223333 --job-id 1234567890abcdef0
모든 Active 및 Complete 배치 작업의 목록을 얻으려면 작업 나열 또는 _AWS CLI Command Reference_의 list-jobs를 참고하세요.
CreateJob을 사용한 REST 요청으로 Compute checksum으로 객체 무결성을 검증할 수 있어요. DescribeJob API 작업에 REST 요청을 보내 Compute checksum 요청의 진행 상황을 모니터링할 수 있어요. 각 배치 작업은 다음 상태를 거쳐 진행돼요.
- NEW
- PREPARING
- READY
- ACTIVE
- PAUSING
- PAUSED
- COMPLETE
- CANCELLING
- FAILED
API 응답이 현재 작업 상태를 알려줘요.