

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# Amazon S3 にファイルをアップロードして COPY で使用する
<a name="t_uploading-data-to-S3"></a>

Amazon S3 にテキストファイルをアップロードする場合には、以下のように、取るべきいくつかのアプローチがあります。
+ ファイルが大規模で圧縮されている場合は、Amazon Redshift の並列処理を活用するために、そのファイルを分割することをお勧めします。
+ また COPY では、大きな圧縮されていないテキスト区切りファイルの場合にデータは自動で分割されるので、これにより並列処理が容易になり、大きなファイルからのデータ配布が効果的に行われます。

データファイルを入れる Amazon S3 バケットを作成し、データファイルをバケットにアップロードします。バケットの作成およびファイルのアップロードの詳細については、*Amazon Simple Storage Service ユーザーガイド*の[Amazon S3 バケットの操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)を参照してください。

**重要**  
[REGION](copy-parameters-data-source-s3.md#copy-region) オプションを使用して Amazon S3 バケットがあるリージョンを指定しない限り、データファイルを保持する Amazon S3 バケットは、クラスターと同じ AWS リージョンに作成する必要があります。

S3 IP 範囲が許可リストに追加されていることを確認します。必要な S3 IP 範囲の詳細については、「[ネットワークの隔離](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation)」を参照してください。

Amazon S3 コンソールを利用してバケットを作成するときにリージョンを選択するか、Amazon S3 API または CLI を利用してバケットを作成するときにエンドポイントを指定することで、特定のリージョンに Amazon S3 バケットを作成できます。

データのロード後、Amazon S3 に正しいファイルが存在することを確認します。

**Topics**
+ [データの整合性の管理](managing-data-consistency.md)
+ [Amazon S3 への暗号化されたデータのアップロード](t_uploading-encrypted-data.md)
+ [必要なファイルがバケットにあることを確認する](verifying-that-correct-files-are-present.md)

# データの整合性の管理
<a name="managing-data-consistency"></a>

Amazon S3 では、すべての AWS リージョンにある Amazon S3 バケットに対する COPY、UNLOAD、INSERT (外部テーブル)、CREATE EXTERL TABLE AS、および Amazon Redshift Spectrum オペレーションについて、書き込みとそれに続く読み込みの間での、強力な一貫性が提供されます。さらに、Amazon S3 Select、Amazon S3 アクセスコントロールリスト、Amazon S3 オブジェクトタグ、オブジェクトメタデータ (HEAD オブジェクトなど) での読み込みオペレーションには、強力な整合性があります。データ整合性の詳細については、*Amazon Simple Storage Service デベロッパーガイド*の[ Amazon S3 のデータ整合性モデル](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Introduction.html#ConsistencyModel)を参照してください。

# Amazon S3 への暗号化されたデータのアップロード
<a name="t_uploading-encrypted-data"></a>

Amazon S3 は、サーバー側の暗号化とクライアント側の暗号化のどちらもサポートします。このトピックでは、サーバー側暗号化とクライアント側暗号化の違いを説明し、Amazon Redshift でクライアント側暗号化を使用するステップを紹介します。サーバー側暗号化は Amazon Redshift に対して透過的です。

## サーバー側の暗号化
<a name="server-side-encryption"></a>

サーバー側の暗号化は、保管時のデータ暗号化です。つまり、Amazon S3 がデータをアップロードするときにデータを暗号化し、アクセス時にデータを復号化します。COPY コマンドを使用してテーブルをロードする場合には、Amazon S3 にあるサーバー側で暗号化したオブジェクトや暗号化していないオブジェクトからロードする場合との間に差はありません。サーバー側の暗号化の詳細については、*Amazon Simple Storage Service ユーザーガイド*の[サーバー側の暗号化の使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)を参照してください。

## クライアント側の暗号化
<a name="client-side-encryption"></a>

クライアント側の暗号化の場合、データの暗号化、暗号化キー、および関連ツールを管理するのはクライアントアプリケーションです。クライアント側の暗号化を使って Amazon S3 バケットにデータをアップロードし、その後、COPY コマンド (ENCRYPTED オプション) とプライベート暗号化キーを使ってデータをより安全にロードすることができます。

エンベロープ暗号化を使い、データを暗号化します。*エンベロープ暗号化*を使うと、アプリケーションですべての暗号化が排他的に処理されます。プライベート暗号化キーと暗号化されていないデータが AWS に送信されることはありません。したがって、暗号化キーを安全に管理することが重要となります。暗号化キーをなくした場合はデータを復号できなくなります。また、AWS から暗号化キーを復元することはできません。エンベロープ暗号化では、非同期キーによるキー管理によりセキュリティを高めながら、高速の同期暗号化のパフォーマンスを実現します。Amazon S3 暗号化クライアントは、データを暗号化するためにワンタイム使用の対称キー (エンベロープ対称キー) を生成します。その後、そのキーはルートキーにより暗号化され、データとともに Amazon S3 に保存されます。Amazon Redshift がロード時にデータにアクセスするとき、暗号化された同期キーが取得され、本物のキーで復号され、その後、データが復号されます。

Amazon Redshift で Amazon S3 クライアント側の暗号化データを操作するには、*Amazon Simple Storage Service ユーザーガイド*の[クライアント側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)にて説明されているステップに従います。使用する追加の要件はこちらです:
+ **対称暗号化** – AWS SDK for Java `AmazonS3EncryptionClient` クラスは、前述の、対称キー暗号化に基づくエンベロープ暗号化を使用します。このクラスを使用して、Amazon S3 クライアントを作成し、クライアント側暗号化データをアップロードします。
+ **256 ビット AES ルート対称キー** – ルートキーはエンベロープキーを暗号化します。ルートキーは、`AmazonS3EncryptionClient` クラスのインスタンスに渡す必要があります。このキーは、Amazon Redshift にデータをコピーするときに必要になるので、キーを保存する必要があります。
+ **暗号化されたエンベロープキーを保存するオブジェクトメタデータ** — Amazon S3 のデフォルトでは、エンベロープキーは `AmazonS3EncryptionClient` クラスのオブジェクトメタデータとして保存されます。オブジェクトメタデータとして保存された暗号化されたエンベロープキーは、復号プロセスで使用されます。

**注記**  
初めて暗号化 API を使用するときに暗号の暗号化エラーメッセージが表示される場合、使用する JDK のバージョンに、暗号化/復号変換に使用する最大キー長を 128 ビットに制限する Java Cryptography Extension (JCE) 管轄ポリシーファイルが含まれている可能性があります。この問題に対処する方法については、*Amazon Simple Storage Service ユーザーガイド*の「[AWS SDK for Java を使用したクライアント側の暗号化の指定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryptionUpload.html)」を参照してください。

クライアント側で暗号化したファイルを COPY コマンドを使用して Amazon Redshift テーブルにロードする方法については、[暗号化されたデータファイルを Amazon S3 からロードする](c_loading-encrypted-files.md) を参照してください。

## 例: クライアント側暗号化データのアップロード
<a name="client-side-encryption-example"></a>

AWS SDK for Java を使用してクライアント側の暗号化データをアップロードする例については、*Amazon Simple Storage Service ユーザーガイド*の「[クライアント側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/encrypt-client-side-symmetric-master-key.html)」を参照してください。

2 つ目のオプションで、データを Amazon Redshift にロードできるように、クライアント側で暗号化を行う際に選択すべき点を示しています。具体的には、オブジェクトメタデータを使用して暗号化されたエンベロープキーを保存する方法と、256 ビット AES マスター対称キーを使用する方法についてです。

ここでは、AWS SDK for Java を使用して 256 ビットの AES 対称ルートキーを作成し、それをファイルに保存するためのコード例を示します。次に、この例ではサンプルデータを S3 暗号化クライアントを使用してクライアント側で最初に暗号化し、オブジェクトを Amazon S3 にアップロードします。この例ではオブジェクトもダウンロードして、データが同じであることを確認します。

# 必要なファイルがバケットにあることを確認する
<a name="verifying-that-correct-files-are-present"></a>

Amazon S3 バケットにファイルをアップロードした後に、バケットの内容を一覧表示し、必要なすべてのファイルが揃っており、不必要なファイルがないことを確認します。例えば、バケット `amzn-s3-demo-bucket` に「`venue.txt.back`」という名前のファイルがある場合、そのファイルは、おそらくは意図しなくても、次のコマンドによりロードされます。

```
COPY venue FROM 's3://amzn-s3-demo-bucket/venue' … ;
```

ロードするファイルを厳密に制御したいのであれば、マニフェストファイルを使用し、データファイルをリストに明示的に指定します。マニフェストファイルの使用に関する詳細は、COPY コマンドの [copy_from_s3_manifest_file](copy-parameters-data-source-s3.md#copy-manifest-file) オプションと COPY 例の [マニフェストを使用し、データファイルを指定する](r_COPY_command_examples.md#copy-command-examples-manifest) を参照してください。

バケット内容のリスト化に関する詳細については、*Amazon S3 デベロッパーガイド*の「[オブジェクトキーのリスト](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ListingKeysUsingAPIs.html)」を参照してください。