Amazon S3 のデータ整合性保護 - AWS SDK とツール

Amazon S3 のデータ整合性保護

注記

設定ページのレイアウトを理解したり、以下の AWS SDK とツールによるサポートの表を解釈したりするには、「このガイドの設定ページについて」を参照してください。

しばらくの間、AWS SDK は Amazon Simple Storage Service にデータをアップロードする際、または Amazon Simple Storage Service からデータをダウンロードする際のデータ整合性チェックをサポートしています。以前は、これらのチェックはオプトインされていました。現在、CRC32 や CRC64NVME などの CRC ベースのアルゴリズムを使用して、これらのチェックがデフォルトで有効になっています。各 SDK またはツールにはデフォルトのアルゴリズムがありますが、別のアルゴリズムを選択できます。必要に応じて、アップロード用に事前に計算されたチェックサムを引き続き手動で指定することもできます。アップロード、マルチパートアップロード、ダウンロード、暗号化モード間で一貫した動作により、クライアント側の整合性チェックが簡素化されます。

AWS SDK の最新バージョンと AWS CLI は、アップロードごとに周期的冗長チェック (CRC) ベースのチェックサムを自動的に計算し、Amazon S3 に送信します。Amazon S3 はサーバー側のチェックサムを個別に計算し、指定された値で検証してから、オブジェクトとそのチェックサムをオブジェクトのメタデータに永続的に保存します。オブジェクトと共にメタデータにチェックサムを保存することで、オブジェクトのダウンロード時に同じチェックサムが自動的に返され、ダウンロードの検証にも使用することができます。オブジェクトのメタデータに保存されているチェックサムはいつでも確認できます。

チェックサムオペレーション、マルチパートアップロード、またはサポートされているチェックサムアルゴリズムのリストの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「Amazon S3 でのオブジェクトの整合性のチェック」を参照してください。

マルチパートアップロード:

Amazon S3 は、単一パートアップロードとマルチパートアップロードにわたって一貫性のある完全なフルオブジェクトチェックサムをデベロッパーに提供します。

マルチパートでファイルをアップロードする場合、SDK は各パートのチェックサムを計算します。Amazon S3 は、これらのチェックサムを使用し、UploadPart API を通じて各パートの整合性を検証します。さらに、Amazon S3 は CompleteMultipartUpload API を呼び出すときにファイル全体のサイズとチェックサムを検証します。

SDK にマルチパートアップロードを支援する Amazon S3 Transfer Manager がある場合、チェックサムは、AWS SDK とツールによるサポート テーブルにある SDK 固有のデフォルトアルゴリズムを使用してパートについて検証されます。checksum_typeFULL_OBJECT に設定するか、CRC64NVME アルゴリズムを使用することを選択することで、完全なオブジェクトチェックサムにオプトインできます。

古いバージョンの SDK または AWS CLI を使用している場合:

アプリケーションが 2024 年 12 月より前のバージョンの SDK またはツールを使用している場合でも、Amazon S3 は新しいオブジェクトに対して CRC64NVME チェックサムを計算し、今後の参照のためにオブジェクトのメタデータに保存します。後で、保存された CRC をユーザー側で計算された CRC と比較し、ネットワーク送信が正常であったことを確認できます。また、独自の事前計算されたチェックサムに PutObject または UploadPart リクエストを提供することで、整合性保護を手動で拡張することもできます。これは、古いバージョンでの対処のための標準的な手法です。

この機能を設定するには、以下のように使用します。

request_checksum_calculation - AWS config 共有ファイル設定
AWS_REQUEST_CHECKSUM_CALCULATION - 環境変数
aws.requestChecksumCalculation - JVM システムプロパティ: Java/Kotlin のみ

デフォルトでは、ユーザーはリクエストの送信時にリクエストのチェックサムを計算するようオプトインされます。ユーザーは、リクエストの構築の一環として、使用可能なチェックサムアルゴリズムのいずれかを選択できます。選択しない場合は、SDK 固有のデフォルトアルゴリズムが使用されます。各 SDK またはツールのデフォルトアルゴリズムについては、AWS SDK とツールによるサポート テーブルを参照してください。

デフォルト値: WHEN_SUPPORTED

有効な値:

  • WHEN_SUPPORTED – チェックサム検証は、Amazon S3 へのデータ転送など、API オペレーションでサポートされている場合、すべてのリクエストペイロードで実行されます。

  • WHEN_REQUIRED – チェックサム検証は、API オペレーションで必要な場合にのみ実行されます。

response_checksum_validation - AWS config 共有ファイル設定
AWS_RESPONSE_CHECKSUM_VALIDATION - 環境変数
aws.responseChecksumValidation - JVM システムプロパティ: Java/Kotlin のみ

デフォルトでは、ユーザーはリクエストの送信時にレスポンスのチェックサムの検証にオプトインされます。チェックサムはレスポンスペイロードに対して計算され、チェックサムのレスポンスヘッダーと比較されます。チェックサムの検証に失敗すると、ペイロードの読み取り時にエラーが発生します。

チェックサムのレスポンスヘッダーには、チェックサムのアルゴリズムも示されます。Amazon S3 クライアントは、チェックサムをサポートするすべての Amazon S3 API オペレーションのレスポンスのチェックサム検証を試みます。ただし、SDK が指定されたチェックサムアルゴリズムを実装していない場合、この検証はスキップされます。

デフォルト値: WHEN_SUPPORTED

有効な値:

  • WHEN_SUPPORTED – チェックサム検証は、Amazon S3 へのデータ転送など、API オペレーションでサポートされている場合、すべてのレスポンスペイロードで実行されます。

  • WHEN_REQUIRED – チェックサム検証は、API オペレーションでサポートされ、呼び出し元がオペレーションのチェックサムを明示的に有効にしている場合にのみ実行されます。例えば、Amazon S3 GetObject API が呼び出され、ChecksumMode パラメータが有効に設定されている場合などです。

AWS SDK とツールによるサポート

以下の SDK は、このトピックで説明する機能と設定をサポートします。部分的な例外があれば、すべて記載されています。JVM システムプロパティ設定は、AWS SDK for Java と AWS SDK for Kotlin でのみサポートされます。

注記

次の表では、「CRT」は AWS Common Runtime (CRT) ライブラリ を参照しており、プロジェクトへの依存関係の追加が必要になる場合があります。

SDK サポート デフォルトのチェックサムアルゴリズム サポートされているチェックサムアルゴリズム 注意または詳細情報
AWS CLI v2 あり CRC64NVME CRC64NVME、CRC32、CRC32C、SHA1、SHA256 AWS CLI v1 の場合、デフォルトのアルゴリズムとサポートされているアルゴリズムは Python (Boto3) と同じになります。
SDK for C++ あり CRC64NVME CRC64NVME、CRC32、CRC32C、SHA1、SHA256
SDK for Go V2 (1.x) あり CRC32 CRC64NVME、CRC32、CRC32C、SHA1、SHA256
SDK for Go 1.x (V1) なし
SDK for Java 2.x あり CRC32 CRC64NVME (CRT のみ)、CRC32、CRC32C、SHA1、SHA256
SDK for Java 1.x なし
SDK for JavaScript 3.x あり CRC32 CRC32、CRC32C、SHA1、SHA256
SDK for JavaScript 2.x なし
SDK for Kotlin あり CRC32 CRC32、CRC32C、SHA1、SHA256
SDK for .NET 4.x あり CRC32 CRC32、CRC32C、SHA1、SHA256
SDK for .NET 3.x あり CRC32 CRC32、CRC32C、SHA1、SHA256
SDK for PHP 3.x あり CRC32 CRC32、CRC32C (CRT 経由のみ)、SHA1、SHA256 CRC32C を使用するには awscrt 拡張機能が必要です。
SDK for Python (Boto3) あり CRC32 CRC64NVME (CRT のみ)、CRC32、CRC32C (CRT のみ)、SHA1、SHA256
SDK for Ruby 3.x あり CRC32 CRC64NVME (CRT のみ)、CRC32、CRC32C (CRT のみ)、SHA1、SHA256
SDK for Rust あり CRC32 CRC64NVME、CRC32、CRC32C、SHA1、SHA256
SDK for Swift あり CRC32 CRC64NVME、CRC32、CRC32C、SHA1、SHA256 すべてのアルゴリズムに必要な CRT 依存関係。
Tools for PowerShell V5 あり CRC32 CRC32、CRC32C、SHA1、SHA256
Tools for PowerShell V4 あり CRC32 CRC32、CRC32C、SHA1、SHA256