

# Amazon S3 で保管中のデータのオブジェクトの整合性を確認する
<a name="checking-object-integrity-at-rest"></a>

Amazon S3 に保存されているデータセットの内容を検証する必要がある場合、S3 バッチオペレーション [[チェックサムを計算]](https://docs.aws.amazon.com//AmazonS3/latest/userguide/batch-ops-compute-checksums.html) オペレーションは、保管中のオブジェクトのフルオブジェクトチェックサムと複合チェックサムの両方を計算します。**[チェックサムを計算]** オペレーションでは、バッチオペレーションを使用してオブジェクトグループのチェックサム値を非同期的に計算し、統合された整合性レポートを自動的に生成します。データの新しいコピーを作成したり、データを復元またはダウンロードしたりすることはありません。

**[チェックサムを計算]** オペレーションを使用すると、1 回のジョブリクエストで数十億のオブジェクトを効率的に検証できます。**[チェックサムを計算]** ジョブリクエストごとに、S3 はチェックサム値を計算し、自動生成された整合性レポート (完了レポートとも呼ばれます) に含めます。その後、完了レポートを使用してデータセットの整合性を検証できます。

**[チェックサムを計算]** オペレーションは、ストレージクラスやオブジェクトサイズに関係なく、S3 に保存されているすべてのオブジェクトで機能します。オブジェクトをデータ保存のベストプラクティスとして検証する必要がある場合でも、コンプライアンス要件を満たす必要がある場合でも、**[チェックサムを計算]** オペレーションは、保管中のチェックサム計算を実行することで、データ検証に必要なコスト、時間、労力を削減します。**[チェックサムを計算]** の料金については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」の **[管理とインサイト]** タブを参照してください。

次に、生成された完了レポートの出力を使用して、データベースに保存したチェックサム値と比較し、データセットが時間の経過とともにそのまま残っていることを確認できます。このアプローチは、ビジネスとコンプライアンスのニーズに合わせてエンドツーエンドのデータ整合性を維持するのに役立ちます。例えば、**[チェックサムを計算]** オペレーションを使用して、S3 Glacier ストレージクラスに保存されているオブジェクトのリストを年次セキュリティ監査に送信できます。さらに、サポートされているチェックサムアルゴリズムの範囲により、アプリケーションで使用されているアルゴリズムとの継続性を維持できます。

## サポートされているチェックサムアルゴリズムの使用
<a name="using-additional-checksums-rest"></a>

保管中のデータについては、サポートされているチェックサムアルゴリズムのいずれかを使用して、チェックサムを計算できます。
+ CRC-64/NVME (`CRC64NVME`): フルオブジェクトのチェックサムタイプのみをサポートします。
+ CRC-32 (`CRC32`): フルオブジェクトおよび複合チェックサムタイプの両方をサポートします。
+ CRC-32C (`CRC32C`): フルオブジェクトおよび複合チェックサムタイプの両方をサポートします。
+ SHA-1 (`SHA1`): フルオブジェクトおよび複合チェックサムタイプの両方をサポートします。
+ SHA-256 (`SHA256`): フルオブジェクトおよび複合チェックサムタイプの両方をサポートします。
+ MD5 (`MD5`): フルオブジェクトおよび複合チェックサムタイプの両方をサポートします。

## **[チェックサムを計算]** の使用
<a name="Compute-checksums"></a>

Amazon S3 に保存されているオブジェクトの場合、S3 バッチオペレーションで **[チェックサムを計算]** オペレーションを使用して、保管中のデータの内容を確認できます。Amazon S3 コンソール、AWS Command Line Interface (AWS CLI)、REST API、AWS SDK を使用して [Compute checksum バッチオペレーションジョブを作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-create-job.html)できます。**[チェックサムを計算]** ジョブが完了すると、完了レポートが表示されます。完了レポートの使用方法については、「[ジョブステータスと完了レポートの追跡](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-job-status.html)」を参照してください。

**[チェックサムを計算]** ジョブを作成する前に、S3 バッチオペレーション AWS Identity and Access Management (IAM) ロールを作成し、ユーザーに代わってアクションを実行するための Amazon S3 のアクセス許可を付与する必要があります。マニフェストファイルを読み取って完了レポートを S3 バケットに書き込むためのアクセス許可を付与する必要があります。詳細については、「[チェックサムの計算](batch-ops-compute-checksums.md)」を参照してください。

### S3 コンソールの使用
<a name="Compute-checksum-console"></a>

****[チェックサムを計算]** オペレーションを使用するには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. ページ上部にあるナビゲーションバーで、現在表示されている AWS リージョン の名前をクリックします。次に、ジョブを作成するリージョンを選択します。
**注記**  
コピーオペレーションの場合は、コピー先バケットと同じリージョンにジョブを作成する必要があります。その他すべてのオペレーションの場合は、マニフェスト内のオブジェクトと同じリージョンにジョブを作成する必要があります。

1. Amazon S3 コンソールのナビゲーションペインで **[バッチオペレーション]** を選択します。

1. **[ジョブの作成]** を選択します。

1. ジョブを作成する AWS リージョン を確認します。
**注記**  
コピーオペレーションの場合は、コピー先バケットと同じリージョンにジョブを作成する必要があります。その他すべてのオペレーションの場合は、マニフェスト内のオブジェクトと同じリージョンにジョブを作成する必要があります。

1. [**マニフェストの形式**] で、使用するマニフェストオブジェクトのタイプを選択します。
   + **[S3 インベントリレポート (manifest.json)]** を選択した場合は、`manifest.json` オブジェクトへのパスを入力し、特定のオブジェクトバージョンを使用する場合は **[マニフェストオブジェクトのバージョン ID]** (オプション) を入力します。または、**[S3 を参照]** を選択し、マニフェスト JSON ファイルを選択できます。これにより、すべてのマニフェストオブジェクトのフィールドエントリが自動入力されます。
   + **[CSV]** を選択した場合は、マニフェストのロケーションタイプを選択し、CSV 形式のマニフェストオブジェクトへのパスを入力するか、**[S3 を参照]** を選択してマニフェストオブジェクトを選択します。マニフェストオブジェクトは、コンソールで説明される形式に従う必要があります。マニフェストオブジェクトの特定のバージョンを使用する場合は、オブジェクトバージョン ID を指定することもできます。
   + **[S3 レプリケーション設定を使用してマニフェストを作成]** を選択すると、レプリケーション設定を使用してオブジェクトのリストが生成され、オプションで、選択した送信先に保存されます。レプリケーション設定を使用してマニフェストを生成する場合、使用できるオペレーションは **[レプリケート]** のみです。

1. [**次へ**] を選択します。

1. **[オペレーション]** で **[チェックサムを計算]** オペレーションを選択し、マニフェストにリストされているすべてのオブジェクトのチェックサムを計算します。ジョブの **[チェックサムタイプ]** と **[チェックサム関数]** を選択します。その後、**[Next]** を選択します。

1. **[追加のオプションを設定]** に情報を入力して、**[次へ]** を選択します。

1. **[追加のオプションを設定]** ページで、**[チェックサムを計算]** ジョブの情報を入力します。
**注記**  
**[完了レポート]** で、確認ステートメントを確認します。この確認ステートメントは、完了レポートにチェックサム値が含まれていることを理解していることを確認します。チェックサム値は、Amazon S3 に保存されているデータの整合性を検証するために使用されます。したがって、完了レポートは慎重に共有する必要があります。また、[チェックサムを計算] リクエストを作成し、外部アカウント所有者のバケットロケーションを指定して完了レポートを保存する場合は、外部バケット所有者の AWS アカウント ID を必ず指定してください。

1. [**次へ**] を選択します。

1. **[確認]** ページで、設定を確認して確定します。

1. (オプション) 変更する必要がある場合は、**[戻る]** を選択して前のページに戻るか、**[編集]** を選択して特定のステップを更新します。

1. 変更を確認したら、**[ジョブの作成]** を選択します。

**すべての **[チェックサムを計算]** リクエストの進行状況を一覧表示およびモニタリングするには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、[**バッチ操作**] を選択します。

1. **[バッチオペレーション]** ページで、ジョブの優先度、ジョブ完了率、オブジェクトの合計など、ジョブの詳細を確認できます。

1. 特定の **[チェックサムを計算]** ジョブを管理またはクローンする場合は、**[ジョブ ID]** をクリックして追加のジョブ情報を確認します。

1. 特定の **[チェックサムを計算]** ジョブページで、ジョブの詳細を確認します。

各バッチオペレーションジョブは、異なる [[ジョブステータス]](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-job-status.html#batch-ops-job-status-table) で進行します。S3 コンソールで [AWS CloudTrail イベントを有効](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-cloudtrail-logging-for-s3.html)にして、ジョブの状態の変化に関するアラートを受信することもできます。アクティブなジョブについては、**[ジョブの詳細]** ページで実行中のジョブと完了率を確認できます。

### AWS SDK の使用
<a name="Compute-checksum-sdk"></a>

------
#### [ Java ]

**Example 例: **[チェックサムを計算]** ジョブの作成**  
次の例は、**[チェックサムを計算]** ジョブ (**[ジョブの作成]** リクエストの一部として) を作成する方法と、マニフェストを指定する方法を示しています。  

```
// 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);
}
```

**Example 例: **[チェックサムを計算]** ジョブの詳細の表示**  
次の例は、ジョブ ID を指定して、**[チェックサムを計算]** ジョブリクエストのジョブの詳細 (ジョブの完了率など) を表示する方法を示しています。  

```
DescribeJobRequest request = DescribeJobRequest.builder()
        .accountId("1234567890")
        .jobId("a16217a1-e082-48e5-b04f-31fac3a66b13")
        .build();
```

------

### の使用AWS CLI
<a name="Compute-checksum-cli"></a>

[https://docs.aws.amazon.com/cli/latest/reference/s3control/create-job.html](https://docs.aws.amazon.com/cli/latest/reference/s3control/create-job.html) コマンドを使用して、新しいバッチオペレーションジョブを作成し、オブジェクトのリストを指定できます。次に、チェックサムアルゴリズムとチェックサムタイプ、および **[チェックサムを計算]** レポートを保存する送信先バケットを指定します。次の例では、S3 が AWS アカウント *111122223333* に生成したマニフェストを使用して S3 バッチレプリケーションの **[チェックサムを計算]** ジョブを作成します。

このコマンドを使用するには、*ユーザー入力プレースホルダー*を独自の情報に置き換えます。

```
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
```

**[チェックサムを計算]** ジョブを送信すると、ジョブ ID がレスポンスとして受信され、S3 バッチオペレーションのリストページに表示されます。Amazon S3 はオブジェクトのリストを処理し、各オブジェクトのチェックサムを計算します。ジョブが完了すると、S3 は指定された送信先に統合された **[チェックサムを計算]** レポートを提供します。

**[チェックサムを計算]** ジョブの進行状況をモニタリングするには、[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/describe-job.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/describe-job.html) コマンドを使用します。このコマンドは、指定されたバッチオペレーションジョブのステータスをチェックします。このコマンドを使用するには、*ユーザー入力プレースホルダー*を独自の情報に置き換えます。

例えば、次のようになります。

```
aws s3control describe-job --account-id 111122223333 --job-id 1234567890abcdef0
```

すべての **[アクティブ]** および **[完了]** バッチオペレーションジョブの[リストを取得](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-list-jobs.html)するには、「*AWS CLI コマンドリファレンス*」の「[ジョブのリスト取得](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-list-jobs.html)」または「[list-jobs](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/list-jobs.html)」を参照してください。

### REST API の使用
<a name="Compute-checksum-api"></a>

[CreateJob](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html) を使用して、**[チェックサムを計算]** でオブジェクトの整合性を検証する REST リクエストを送信できます。REST リクエストを [DescribeJob](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html) API オペレーションに送信することで、**[チェックサムを計算]** リクエストの進行状況をモニタリングできます。各バッチオペレーションジョブは、次のステータスで進行します。
+ **新規**
+ **準備中**
+ **準備完了**
+ **アクティブ**
+ **一時停止中**
+ **一時停止**
+ **完了**
+ **キャンセル中**
+ **[FAILED**]

API レスポンスは、現在のジョブ状態を通知します。