S3バケットに保存できるオブジェクトの最大サイズは5TBですが、一度にアップロードできる最大サイズは5GBです。5GBを超えるファイルをアップロードするには「マルチパートアップロード」を利用します。
マルチパートアップロードは、単一のオブジェクトをパートといわれる複数のデータに分割して、S3バケットにアップロードする機能です。各パートはそれぞれ並列にアップロードされるので、アップロード時間を大幅に短縮できます。また、パートの一部に送信エラーが発生しても、他のパートへ影響を及ぼすことなくエラーが発生したパートのみを再送します。AWSではファイルサイズが100MB以上の場合は、マルチパートアップロードの使用を推奨しています。
S3のACL(アクセスコントロールリスト)は、AWSアカウント単位でアクセス権限を設定する機能です。他のAWSアカウントに対して、オブジェクトもしくはバケットへの読み取り/書き込みを許可します。
Amazon S3のオブジェクトロックは、S3バケットに保存したオブジェクトに対して更新・削除を制限する機能です。S3バケット作成時にのみ設定可能で、オブジェクトロックを有効にするとバージョニング機能も有効になります。
オブジェクトロックは、主にオブジェクトが意図的に改ざん・削除されることを防止する目的で使用します。
オブジェクトロックには、保持期間が無期限の「リーガルホールド」と、期限付きの「リテンションモード」の2種類があります。
リーガルホールドは、権限(s3:PutObjectLegalHold)を持たないユーザーに対して、リーガルホールドが解除されるまでオブジェクトを読み取り専用にします。権限を持つユーザーのみオブジェクトの更新・削除と、リーガルホールドの解除ができます。
Amazon S3のストレージには利用者が目的に合わせて選択できるよう複数の種類(ストレージクラス)があります。

「S3 Intelligent-Tiering」は実際の利用状況に応じて「高頻度アクセス階層」「低頻度アクセス階層」「アーカイブ階層」へ自動的にオブジェクトを移します。どの階層で保存されていてもデータ取り出し料金はかかりませんが、監視とデータ移動の自動化に対する月額利用料がかかります。
「S3 Intelligent-Tiering」はアクセス頻度が変動するなど予測が難しいデータに適しています。

データをS3に保存する時にサーバーで暗号化する方法を、サーバー側の暗号化(Server-Side Encryption:SSE)といいます。
サーバー側の暗号化では、データがS3に保存されるタイミングで自動的にS3が暗号化を行います。データを取り出すときはS3がデータを復号して、ユーザーに渡します。

サーバー側の暗号化には、以下3種類の方法があります。
■S3が管理している鍵を使用する (SSE-S3)

■AWS KMS(AWS Key Management Service)に保存されているKMSキーを使用する (SSE-KMS)

■ユーザーが管理している鍵を使用する (SSE-C)

S3のデータ暗号化には「サーバー側の暗号化」と「クライアント側の暗号化」の2種類の方法があります。
「サーバー側の暗号化(Server-Side Encryption:SSE)」はデータをS3に保存する時にサーバーで暗号化する方法です。サーバー側の暗号化では、データがS3に保存されるタイミングでS3が暗号化を行います。データを取り出す際にもS3がデータを復号して、ユーザーに渡します。

「クライアント側の暗号化」はデータをS3に保存する前にクライアント側で暗号化する方法です。クライアント側の暗号化では、データをS3へアップロードする前にクライアント側で暗号化を行い、暗号化したデータをそのままS3に保存します。データを取り出すときは、暗号化したデータをS3からダウンロードした後、クライアント側で復号します。

設問の要件には「暗号化前の機密データをAWS上に保存しない」ことが求められているので、データをS3へ送信前に暗号化する「クライアント側の暗号化」が該当します。
クライアント側の暗号化には、以下2種類の方法があります。
■AWS KMS(AWS Key Management Service)に保存されているKMSキーを使用する

■クライアント側に保存したルートキーを使用する

設問の要件には「暗号化処理に使用する鍵をAWS上に保存しない」ことが求められているので、クライアント側のマスターキーを使用する方法が該当します。
サーバー側の暗号化には、以下3種類の方法があります。
■S3が管理している鍵を使用する (SSE-S3)

■AWS KMS(AWS Key Management Service)に保存されているKMSキーを使用する (SSE-KMS)

■ユーザーが管理している鍵を使用する (SSE-C)

AWS KMSは鍵管理に特化したサービスで、SSE-KMSは鍵の利用状況を自動的に記録するなど高度な鍵管理が可能です。(KMSについては、KMS/CloudHSM分野で学習します。)
それに対して、SSE-S3は鍵の利用状況を記録するなどの高度な管理はできない代わりに簡単な設定で利用開始できるので、保存データの暗号化を行いたいだけなどの簡易な要件に適しています。
Amazon S3のオブジェクトが保存される領域を「バケット」と呼びます。一つのバケットにはオブジェクト数が無制限で保存できます。バケット名はグローバルで一意にする必要があり、作成したバケットのバケット名は変更できません。URLが付与されるのはバケットではなくオブジェクト単位です。
[オブジェクトとバケットのイメージ]
バケットポリシーはバケットに対して「サーバー側の暗号化(Server-Side Encryption:SSE)」を強制できます。サーバー側の暗号化は、データがS3に保存されるタイミングでS3が暗号化を行います。
バケットポリシーでサーバー側の暗号化を強制すると、バケットには暗号化されたデータのみがアップロードされるようになります。
S3のオブジェクトはアップロードしたAWSアカウントが所有権を持ちます。バケットを複数のAWSアカウントで共有している場合も、バケットの所有者とは違うAWSアカウントがアップロードしたオブジェクトの所有権はアップロードしたAWSアカウントが持つので、バケットの所有者はオブジェクトに対してフルコントロール権限がありません。

バケットの所有者にフルコントロール権限を付与するには、アップロードしたAWSアカウントがオブジェクトのアップロード時に、バケットの所有者にフルコントロール権限を付与する設定をします。
バケットポリシーは、オブジェクトアップロード時にフルコントロール権限をバケットの所有者に設定することを強制できます。これによりバケットには、バケット所有者がフルコントロール権限を持つオブジェクトのみアップロードできるようになります。

オブジェクトロックには、保持期間が無期限の「リーガルホールド」と、期限付きの「リテンションモード」の2種類があります。
リテンションモードは「ガバナンスモード」と「コンプライアンスモード」に分かれており、どちらかを選択します。
○ガバナンスモード
権限(s3:BypassGovernanceRetention)を持たないユーザーに対して、指定した保持期間中オブジェクトを読み取り専用にします。権限を持つユーザーのみオブジェクトの更新・削除と、ガバナンスモードの解除ができます。
○コンプライアンスモード
ルートユーザーを含む全てのユーザーに対して、指定した保持期間中オブジェクトを読み取り専用にします。保持期間中はルートユーザーを含めてコンプライアンスモードを解除できません。特定の権限を持つユーザーは対象オブジェクトの更新・削除ができる。また、ガバナンスモードの解除もできます。
ライフサイクルポリシーはS3バケット内のデータに対して、ストレージクラスの変更やオブジェクトの削除を自動化する機能です。指定した期間が経過したデータを自動的に、よりコストパフォーマンスの高いストレージへ移動したり、保管期限の過ぎたデータを削除したりできます。アクセス頻度が予測できるデータや、保管期間が決められているデータのバケットに設定することで、コスト削減の効果が期待できます。
MFA Delete
S3のバージョニング機能で世代管理されているオブジェクトを削除する際に、MFAデバイス認証が必要となる機能です。
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント