助け合いフォーラム
AWS ソリューションアーキテクト - アソシエイト(SAA-C03)
問題ID : 33457
問題を開く
日本を拠点としている研究所は、世界各地にある協力機関へ研究データを共有している。研究データは現在5TBで、Amazon S3に保存されている。研究データは年々増え続けており、それに伴いデータ転送コストも高くなっている。
研究所のデータ転送コストを可能な限り削減するために、ソリューションアーキテクトはどのような提案をすべきか。
研究所のデータ転送コストを可能な限り削減するために、ソリューションアーキテクトはどのような提案をすべきか。
正解
S3バケットをリクエスタ支払いに設定する
解説
Amazon S3のオブジェクトへアクセスする際に発生する転送料金は、S3バケットの所有者が支払います。S3オブジェクトを共有する際にバケットの所有者が転送料金を負担したくない場合は、バケットを「リクエスタ支払い」に設定するとアクセス元に対して転送料金が請求されるようになります。
設問の場合は、研究データのあるS3バケットをリクエスタ支払いに設定することで、アクセス元である協力機関にデータ転送料金が請求されるようになり、研究所はデータ転送料金を負担しなくてもよくなります。
したがって正解は
・S3バケットをリクエスタ支払いに設定する
です。
その他の選択肢については、以下のとおりです。
・Amazon CloudFront経由でデータを転送する
CloudFrontはキャッシュを利用してデータを高速に配信できるサービスです。
CloudFrontを経由してもデータ転送料金は削減できないので、誤りです。
・S3バケットにTransfer Accelerationを設定する
Transfer Accelerationは、ユーザーからS3バケットへ最適化したネットワークルートを経由してデータを転送する機能です。
Transfer Accelerationを使用してもデータ転送料金は削減できないので、誤りです。
・バケットポリシーで協力会社のAWSアカウントからのアクセスを許可する
バケットポリシーで協力会社のAWSアカウントからのアクセスを許可する設定にはできますが、アクセスした際のデータ転送料は変わらず研究所に請求されるので、誤りです。
設問の場合は、研究データのあるS3バケットをリクエスタ支払いに設定することで、アクセス元である協力機関にデータ転送料金が請求されるようになり、研究所はデータ転送料金を負担しなくてもよくなります。
したがって正解は
・S3バケットをリクエスタ支払いに設定する
です。
その他の選択肢については、以下のとおりです。
・Amazon CloudFront経由でデータを転送する
CloudFrontはキャッシュを利用してデータを高速に配信できるサービスです。
CloudFrontを経由してもデータ転送料金は削減できないので、誤りです。
・S3バケットにTransfer Accelerationを設定する
Transfer Accelerationは、ユーザーからS3バケットへ最適化したネットワークルートを経由してデータを転送する機能です。
Transfer Accelerationを使用してもデータ転送料金は削減できないので、誤りです。
・バケットポリシーで協力会社のAWSアカウントからのアクセスを許可する
バケットポリシーで協力会社のAWSアカウントからのアクセスを許可する設定にはできますが、アクセスした際のデータ転送料は変わらず研究所に請求されるので、誤りです。
参考
【Amazon S3(Simple Storage Service)】
Amazon S3(Simple Storage Service)は安価で耐久性が高く、保存容量が無制限のオブジェクトストレージサービスです。SaaSのサービスなのでユーザーはアプリケーションの構築や障害対応などを考慮する必要はありません。S3にアップロードされたデータはリージョン内の3か所以上のAZに保存されるので、非常に高い耐久性があります。
S3のストレージタイプである「オブジェクトストレージ」とは、ディレクトリのような階層構造を持たず、データに固有IDを付与した「オブジェクト」として扱うストレージのことです。オブジェクトに割り当てられる固有IDは「オブジェクトキー」と呼ばれ、各データはオブジェクトキーによって一意に特定できます。
【S3の構成要素】
「オブジェクト」が保存される領域を「バケット」と呼びます。一つのバケットにはオブジェクトを無制限で保存できます。バケット名はグローバルで一意にする必要があり、作成したバケットのバケット名は変更できません。一つのオブジェクトには一つのURLが付与されます。URLにはリージョン、バケット名、オブジェクトのファイル名が付きます。S3のURLからHTTP/HTTPS経由でS3オブジェクトへアクセスできます。
![<img src="/mondai3/img/jpg/k58439.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22860/k58439.jpg)
【ストレージクラス】
Amazon S3のストレージには複数の種類(ストレージクラス)があります。ユーザーはデータへのアクセス頻度、必要とする可用性、最短保存期間などに応じて保存するストレージクラスを選択します。
オブジェクトアップロード時のデフォルトのストレージクラスは「S3 Standard」です。ストレージクラスは、オブジェクトの設定画面や後述するライフサイクルポリシーで変更できます。
[ストレージクラスの選択画面]
![<img src="/mondai3/img/jpg/k58406.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22861/k58406.jpg)
[ストレージクラスの比較表]
![<img src="/mondai3/img/jpg/kk58406.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22862/kk58406.jpg)
■ライフサイクルポリシー
S3バケット内のデータに対して、ストレージクラスの変更やオブジェクトの削除を自動化する機能です。指定した期間が経過したデータを自動的に、よりコストパフォーマンスの高いストレージへ移動したり、保管期限の過ぎたデータを削除したりできます。アクセス頻度が予測できるデータや、保管期間が決められているデータのバケットに設定することで、コスト削減の効果が期待できます。
下記の図では、オブジェクト作成から30日後に「S3 Standard-IA」へ、60日後に「S3 Glacier Flexible Retrieval」へ移動させるように、ライフサイクルポリシーを設定しています。
![<img src="/mondai3/img/jpg/k58437.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22863/k58437.jpg)
【S3の主要な機能】
S3には保存したデータに対する様々な機能があります。下記では代表的な機能を紹介します。
■静的Webサイトホスティング
バケットに保存している静的コンテンツ(HTMLやJPGなど)をWebサイトとして公開できる機能です。静的Webサイトホスティングがサポートしているコンテンツには、JavaScriptなどクライアント側で実行されるスクリプトも含みますが、PHP、JSP、ASP.NET などサーバー側で実行されるスクリプトは含みません。
Webサイトとして公開したい静的コンテンツのあるバケットは「静的Webサイトホスティング」を有効にし、バケットをパブリックに読み取り可能になるよう設定します。
[静的Webサイトホスティングの設定画面]
![<img src="/mondai3/img/jpg/k58429.jpg">](https://ping-t-resouces.com/uploads/question_image/file/24478/k58429.jpg)
■署名付きURL
非公開設定されたオブジェクトに対して有効期限のついたURLを発行することで、AWSアカウントを持っていないユーザーでも一時的にアクセスが可能になる機能です。署名付きURLはオブジェクトのダウンロードの他、アップロード用のURLも発行可能です。
署名付きURLには非常に長いランダムな文字列が入るため、URLを知らない人が推測することはほぼ不可能です。署名付きURLを利用することで、S3のデータを特定のユーザーに期限付きでアクセスさせることができます。しかしユーザー認証機能はないため、URLが漏洩すると誰でもアクセスができてしまいます。
■S3イベント通知
S3バケットに発生したイベント(オブジェクトの作成や削除など)をトリガーに通知を行う機能です。通知先はLambda関数、SQSキュー、SNSトピック、EventBridge(※)です。例えば、S3バケットにオブジェクトが作成されたらLambda関数を呼び出すといった利用方法があります。
(※)Lambda関数、SQSキュー、SNSトピック、EventBridgeに関しては、それぞれ「Lambda/API Gateway」「SQS」「SNS」「CloudWatch」分野で学習します。
![<img src="/mondai3/img/jpg/k59100.jpg">](https://ping-t-resouces.com/uploads/question_image/file/23342/k59100.jpg)
■リクエスタ支払い
Amazon S3のオブジェクトへアクセスする際に発生する転送料金は、通常S3バケットの所有者が支払います。S3オブジェクトを共有する際にバケットの所有者が転送料金を負担したくない場合は、バケットを「リクエスタ支払い」に設定するとアクセス元に対して転送料金が請求されるようになります。
■S3 Glacierの復元リクエスト
S3 Glacierストレージクラスに保存されているデータを「アーカイブ」といいます。「S3 Glacier Flexible Retrieval」と「S3 Glacier Deep Archive」に保存されているアーカイブは直接ダウンロードできないので「復元リクエスト」を行い一旦S3バケットに取り出します。復元リクエストには取り出し時間と料金に応じて3つのオプションがあります。
○標準取り出し
「S3 Glacier Flexible Retrieval」「S3 Glacier Deep Archive」に保存されているデータを取り出す際のデフォルトのオプションです。データの取得に通常で数分~数時間かかります。
○迅速取り出し
追加料金を払って標準取り出しよりも迅速にデータを取り出せます。「迅速取り出し」オプションは250MBまでのデータであれば通常1~5分以内に使用可能になります。迅速取り出しは「S3 Glacier Flexible Retrieval」のみ選択できます。
○大容量(バルク)取り出し
大容量のデータを取り出す場合に、標準取り出しより時間がかかりますが取り出し料金が低価格になります。ペタバイト単位のデータを1日かけて取り出します。
【S3のデータ保護】
S3には保存したデータが操作ミスなどによって喪失するのを防ぐ機能があります。
■バージョニング
バケットに保存しているオブジェクトの世代管理ができる機能です。バージョニングを有効にすると、オブジェクトの更新時には更新前と更新後の両方のオブジェクトが保存され、各オブジェクトに固有のバージョンIDが割り当てられます。オブジェクトの削除時には、オブジェクトを完全に削除する代わりに削除フラグを意味する削除マーカーが付与され、それが最新のバージョンとなります。バージョニングを利用することで、ユーザーが誤ってデータの上書きや削除をしてしまっても元のデータを復元できます。
[オブジェクトのバージョン表示画面]
![<img src="/mondai3/img/jpg/k58420.jpg">](https://ping-t-resouces.com/uploads/question_image/file/24477/k58420.jpg)
■MFA Delete
S3のバージョニング機能を使用して管理されているオブジェクトを削除する際に、MFAデバイスの認証が必要となる機能です。MFA(Multi-Factor Authentication:多要素認証)とは、ユーザーIDとパスワードでの認証の際に、追加でワンタイムパスワードや指紋などのバイオメトリクスを使用する認証方法です。MFAデバイスには、物理デバイス(例:YubiKey)と仮想デバイス(例:スマートフォンにインストールされたGoogle Authenticator)があります。
MFA Deleteを利用すると、ルートユーザー(AWSとの契約を行ったアカウント)のみが、世代管理されたデータの削除権限を持つようになります。MFA Deleteが有効になっているバケットのオブジェクトを完全に削除するには、ルートユーザーがMFA認証を行い、削除対象のオブジェクトのバージョンIDを指定します。これにより、誤った削除や不正アクセスによるデータ損失を防ぐことができます。
■オブジェクトロック
S3バケットに保存したオブジェクトに対して更新・削除を制限する機能です。S3バケット作成時にのみ設定可能で、オブジェクトロックを有効にするとバージョニング機能も有効になります。
オブジェクトロックは、主にオブジェクトが意図的に改ざん・削除されることを防止する目的で使用します。
オブジェクトロックには、保持期間が無期限の「リーガルホールド」と、期限付きの「リテンションモード」の2種類があります。
〇リーガルホールド
権限(s3:PutObjectLegalHold)を持たないユーザーに対して、リーガルホールドが解除されるまでオブジェクトを読み取り専用にします。権限を持つユーザーのみオブジェクトの更新・削除と、リーガルホールドの解除ができます。
〇リテンションモード
リテンションモードは「ガバナンスモード」と「コンプライアンスモード」に分かれており、どちらかを選択します。
・ガバナンスモード
権限(s3:BypassGovernanceRetention)を持たないユーザーに対して、指定した保持期間中オブジェクトを読み取り専用にします。権限を持つユーザーのみオブジェクトの更新・削除と、ガバナンスモードの解除ができます。
・コンプライアンスモード
ルートユーザーを含む全てのユーザーに対して、指定した保持期間中オブジェクトを読み取り専用にします。保持期間中はルートユーザーを含めてコンプライアンスモードを解除できません。
リーガルホールドとリテンションモードは、同時に両方を有効にすることもできます。例えば、リーガルホールドとリテンションモード1年で有効にした場合、1年後にリテンションモードが解除されても、リーガルホールドは継続されます。逆に、リテンションモードの保持期間中にリーガルホールドを解除しても、リテンションモードは継続されます。
【S3のデータ転送】
S3には、ユーザーからS3バケットへのアップロードや、S3バケット同士のデータ転送に使用する下記の機能があります。
■S3 Transfer Acceleration
ユーザーからS3バケットへ、最適化されたネットワークルートを経由してデータを転送させる機能です。ユーザーと地理的に近いエッジロケーション(※)から高パフォーマンスなAWSネットワークを経由してS3バケットへアクセスするため、遅延の発生やデータ損失などのリスクを少なくします。
(※)エッジロケーション ... AZとは異なるAWSデータセンターで、AZよりも世界中に数多く配置されている
■マルチパートアップロード
S3バケットに保存できるオブジェクトの最大サイズは5TBですが、一度にアップロードできる最大サイズは5GBです。5GBを超えるファイルをアップロードするには「マルチパートアップロード」を利用します。
マルチパートアップロードは、単一のオブジェクトをパートといわれる複数のデータに分割して、S3バケットにアップロードする機能です。各パートはそれぞれ並列にアップロードされるので、アップロード時間を大幅に短縮できます。また、パートの一部に送信エラーが発生しても、他のパートへ影響を及ぼすことなくエラーが発生したパートのみを再送します。AWSではファイルサイズが100MB以上の場合は、マルチパートアップロードの使用を推奨しています。
マルチパートアップロードのプロセスが完了せずに中断されると「不完全なマルチパートアップロード」となります。この状況は、ネットワークの問題、アプリケーションのエラー、またはユーザーによる中断などによって発生する可能性があります。この状態では各パートのアップロードが完了していないため、ファイルは正常に使用できません。また、不完全なパートはストレージスペースを占有し、それに対する料金が発生するため、不必要なコストを発生させる可能性があります。
対策として、ライフサイクルポリシーの機能を使い、不完全なマルチパートアップロードを削除するポリシーを設定し自動的に削除することで、不要なストレージ使用量とコストを削減できます。
■S3レプリケーション
S3バケットのデータを異なるバケットへ自動的にコピーしたい場合に使用します。S3レプリケーションを設定すると、指定した他のバケットへ自動的にオブジェクトをコピーします。レプリケーション先は、同一AWSアカウントが所有するバケットでも、異なるAWSアカウントが所有するバケットでも指定できます。S3レプリケーションには、コピー先を同一リージョンのバケットにする「同一リージョンレプリケーション」と、異なるリージョンのバケットにする「クロスリージョンレプリケーション」があります。
下記の図では、米国西部(オレゴン)リージョンに新しいバケットを作成して、クロスリージョンレプリケーションを設定しています。
![<img src="/mondai3/img/jpg/k58421.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22864/k58421.jpg)
【S3のアクセス制御】
S3ストレージ上のバケットやオブジェクトは、デフォルトではバケットやオブジェクトを作成したAWSアカウント(S3リソースの所有者)だけがアクセスできます。権限を制限されたIAMユーザーや、他のAWSアカウントからS3リソースへアクセスできるようにするには、S3リソースの所有者であるAWSアカウントでオブジェクトやバケットへのアクセス制御を行います。
■バケットポリシー
バケット単位でアクセス権限を設定するリソースベースのポリシーです。自AWSアカウントのIAMユーザーや他のAWSアカウントのユーザーに対して、S3バケットやそのオブジェクトへのアクセス権限を設定します。また、アクセス元のIPアドレスやドメイン名によるアクセス制御もできます。
![<img src="/mondai3/img/jpg/k58432.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22865/k58432.jpg)
バケットポリシーはアクセス権限の設定の他に、次のような機能もあります。
○オブジェクトアップロード時に、バケットの所有者にフルコントロール権限を設定することを強制する
S3のオブジェクトはアップロードしたAWSアカウントが所有権を持ちます。バケットを複数のAWSアカウントで共有している場合も、バケットの所有者とは違うAWSアカウントがアップロードしたオブジェクトの所有権はアップロードしたAWSアカウントが持つので、バケットの所有者はオブジェクトに対してフルコントロール権限がありません。
![<img src="/mondai3/img/jpg/k58726.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22866/k58726.jpg)
バケットの所有者にフルコントロール権限を付与するには、オブジェクトをアップロードするAWSアカウントが、アップロード時にバケットの所有者にフルコントロール権限を付与する設定をします。
バケットポリシーは、オブジェクトアップロード時にフルコントロール権限をバケットの所有者に設定することを強制できます。これによりバケットには、バケット所有者がフルコントロール権限を持つオブジェクトのみアップロードできるようになります。
![<img src="/mondai3/img/jpg/kk58726.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22867/kk58726.jpg)
■IAMポリシー(ユーザーポリシー)
IAMユーザー単位でアクセス権限を設定するIDベースのポリシーです。自AWSアカウントのIAMユーザーやグループ、ロールに対して、S3リソースへのアクセス権限を設定します。バケットポリシーとは違い、他のAWSアカウントには設定できません。
IAMポリシーによるアクセス権限は、バケットポリシーと同じくアクセス元のIPアドレスやドメイン名によるアクセス制御もできます。
![<img src="/mondai3/img/jpg/k58433.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22868/k58433.jpg)
■ACL(アクセスコントロールリスト)
AWSアカウント単位でアクセス権限を設定する機能です。他のAWSアカウントに対して、S3バケットやオブジェクトへの読み取りまたは書き込みを許可します。
![<img src="/mondai3/img/jpg/k58431.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22869/k58431.jpg)
【S3のデータ暗号化】
S3のバケットやオブジェクトはデフォルトで暗号化されます。S3のデータ暗号化には「サーバー側の暗号化」と「クライアント側の暗号化」の2種類の方法があります。
■サーバー側の暗号化(Server-Side Encryption:SSE)
データがS3に保存されるタイミングで自動的にS3が暗号化を行います。データを取り出すときはS3がデータを復号して、ユーザーに渡します。
![<img src="/mondai3/img/jpg/k58434.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22870/k58434.jpg)
サーバー側の暗号化には、以下3種類の方法があります。
○S3が管理している鍵を使用する (SSE-S3)
![<img src="/mondai3/img/jpg/kk58434.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22871/kk58434.jpg)
○AWS KMS(AWS Key Management Service)に保存されているKMSキーを使用する (SSE-KMS)
![<img src="/mondai3/img/jpg/kkk58434.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22872/kkk58434.jpg)
○ユーザーが管理している鍵を使用する (SSE-C)
![<img src="/mondai3/img/jpg/kkkk58434.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22873/kkkk58434.jpg)
■クライアント側の暗号化
データをS3へアップロードする前にクライアント側で暗号化を行い、暗号化したデータをそのままS3に保存します。データを取り出すときは、暗号化したデータをS3からダウンロードした後、クライアント側で復号します。
![<img src="/mondai3/img/jpg/k58435.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22874/k58435.jpg)
クライアント側の暗号化には、以下2種類の方法があります。
○AWS KMS(AWS Key Management Service)に保存されているKMSキーを使用する
![<img src="/mondai3/img/jpg/kk58435.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22875/kk58435.jpg)
○クライアント側に保存したルートキーを使用する
![<img src="/mondai3/img/jpg/kkk58435.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22876/kkk58435.jpg)
Amazon S3(Simple Storage Service)は安価で耐久性が高く、保存容量が無制限のオブジェクトストレージサービスです。SaaSのサービスなのでユーザーはアプリケーションの構築や障害対応などを考慮する必要はありません。S3にアップロードされたデータはリージョン内の3か所以上のAZに保存されるので、非常に高い耐久性があります。
S3のストレージタイプである「オブジェクトストレージ」とは、ディレクトリのような階層構造を持たず、データに固有IDを付与した「オブジェクト」として扱うストレージのことです。オブジェクトに割り当てられる固有IDは「オブジェクトキー」と呼ばれ、各データはオブジェクトキーによって一意に特定できます。
【S3の構成要素】
「オブジェクト」が保存される領域を「バケット」と呼びます。一つのバケットにはオブジェクトを無制限で保存できます。バケット名はグローバルで一意にする必要があり、作成したバケットのバケット名は変更できません。一つのオブジェクトには一つのURLが付与されます。URLにはリージョン、バケット名、オブジェクトのファイル名が付きます。S3のURLからHTTP/HTTPS経由でS3オブジェクトへアクセスできます。
![<img src="/mondai3/img/jpg/k58439.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22860/k58439.jpg)
【ストレージクラス】
Amazon S3のストレージには複数の種類(ストレージクラス)があります。ユーザーはデータへのアクセス頻度、必要とする可用性、最短保存期間などに応じて保存するストレージクラスを選択します。
オブジェクトアップロード時のデフォルトのストレージクラスは「S3 Standard」です。ストレージクラスは、オブジェクトの設定画面や後述するライフサイクルポリシーで変更できます。
[ストレージクラスの選択画面]
![<img src="/mondai3/img/jpg/k58406.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22861/k58406.jpg)
[ストレージクラスの比較表]
![<img src="/mondai3/img/jpg/kk58406.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22862/kk58406.jpg)
■ライフサイクルポリシー
S3バケット内のデータに対して、ストレージクラスの変更やオブジェクトの削除を自動化する機能です。指定した期間が経過したデータを自動的に、よりコストパフォーマンスの高いストレージへ移動したり、保管期限の過ぎたデータを削除したりできます。アクセス頻度が予測できるデータや、保管期間が決められているデータのバケットに設定することで、コスト削減の効果が期待できます。
下記の図では、オブジェクト作成から30日後に「S3 Standard-IA」へ、60日後に「S3 Glacier Flexible Retrieval」へ移動させるように、ライフサイクルポリシーを設定しています。
![<img src="/mondai3/img/jpg/k58437.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22863/k58437.jpg)
【S3の主要な機能】
S3には保存したデータに対する様々な機能があります。下記では代表的な機能を紹介します。
■静的Webサイトホスティング
バケットに保存している静的コンテンツ(HTMLやJPGなど)をWebサイトとして公開できる機能です。静的Webサイトホスティングがサポートしているコンテンツには、JavaScriptなどクライアント側で実行されるスクリプトも含みますが、PHP、JSP、ASP.NET などサーバー側で実行されるスクリプトは含みません。
Webサイトとして公開したい静的コンテンツのあるバケットは「静的Webサイトホスティング」を有効にし、バケットをパブリックに読み取り可能になるよう設定します。
[静的Webサイトホスティングの設定画面]
![<img src="/mondai3/img/jpg/k58429.jpg">](https://ping-t-resouces.com/uploads/question_image/file/24478/k58429.jpg)
■署名付きURL
非公開設定されたオブジェクトに対して有効期限のついたURLを発行することで、AWSアカウントを持っていないユーザーでも一時的にアクセスが可能になる機能です。署名付きURLはオブジェクトのダウンロードの他、アップロード用のURLも発行可能です。
署名付きURLには非常に長いランダムな文字列が入るため、URLを知らない人が推測することはほぼ不可能です。署名付きURLを利用することで、S3のデータを特定のユーザーに期限付きでアクセスさせることができます。しかしユーザー認証機能はないため、URLが漏洩すると誰でもアクセスができてしまいます。
■S3イベント通知
S3バケットに発生したイベント(オブジェクトの作成や削除など)をトリガーに通知を行う機能です。通知先はLambda関数、SQSキュー、SNSトピック、EventBridge(※)です。例えば、S3バケットにオブジェクトが作成されたらLambda関数を呼び出すといった利用方法があります。
(※)Lambda関数、SQSキュー、SNSトピック、EventBridgeに関しては、それぞれ「Lambda/API Gateway」「SQS」「SNS」「CloudWatch」分野で学習します。
![<img src="/mondai3/img/jpg/k59100.jpg">](https://ping-t-resouces.com/uploads/question_image/file/23342/k59100.jpg)
■リクエスタ支払い
Amazon S3のオブジェクトへアクセスする際に発生する転送料金は、通常S3バケットの所有者が支払います。S3オブジェクトを共有する際にバケットの所有者が転送料金を負担したくない場合は、バケットを「リクエスタ支払い」に設定するとアクセス元に対して転送料金が請求されるようになります。
■S3 Glacierの復元リクエスト
S3 Glacierストレージクラスに保存されているデータを「アーカイブ」といいます。「S3 Glacier Flexible Retrieval」と「S3 Glacier Deep Archive」に保存されているアーカイブは直接ダウンロードできないので「復元リクエスト」を行い一旦S3バケットに取り出します。復元リクエストには取り出し時間と料金に応じて3つのオプションがあります。
○標準取り出し
「S3 Glacier Flexible Retrieval」「S3 Glacier Deep Archive」に保存されているデータを取り出す際のデフォルトのオプションです。データの取得に通常で数分~数時間かかります。
○迅速取り出し
追加料金を払って標準取り出しよりも迅速にデータを取り出せます。「迅速取り出し」オプションは250MBまでのデータであれば通常1~5分以内に使用可能になります。迅速取り出しは「S3 Glacier Flexible Retrieval」のみ選択できます。
○大容量(バルク)取り出し
大容量のデータを取り出す場合に、標準取り出しより時間がかかりますが取り出し料金が低価格になります。ペタバイト単位のデータを1日かけて取り出します。
【S3のデータ保護】
S3には保存したデータが操作ミスなどによって喪失するのを防ぐ機能があります。
■バージョニング
バケットに保存しているオブジェクトの世代管理ができる機能です。バージョニングを有効にすると、オブジェクトの更新時には更新前と更新後の両方のオブジェクトが保存され、各オブジェクトに固有のバージョンIDが割り当てられます。オブジェクトの削除時には、オブジェクトを完全に削除する代わりに削除フラグを意味する削除マーカーが付与され、それが最新のバージョンとなります。バージョニングを利用することで、ユーザーが誤ってデータの上書きや削除をしてしまっても元のデータを復元できます。
[オブジェクトのバージョン表示画面]
![<img src="/mondai3/img/jpg/k58420.jpg">](https://ping-t-resouces.com/uploads/question_image/file/24477/k58420.jpg)
■MFA Delete
S3のバージョニング機能を使用して管理されているオブジェクトを削除する際に、MFAデバイスの認証が必要となる機能です。MFA(Multi-Factor Authentication:多要素認証)とは、ユーザーIDとパスワードでの認証の際に、追加でワンタイムパスワードや指紋などのバイオメトリクスを使用する認証方法です。MFAデバイスには、物理デバイス(例:YubiKey)と仮想デバイス(例:スマートフォンにインストールされたGoogle Authenticator)があります。
MFA Deleteを利用すると、ルートユーザー(AWSとの契約を行ったアカウント)のみが、世代管理されたデータの削除権限を持つようになります。MFA Deleteが有効になっているバケットのオブジェクトを完全に削除するには、ルートユーザーがMFA認証を行い、削除対象のオブジェクトのバージョンIDを指定します。これにより、誤った削除や不正アクセスによるデータ損失を防ぐことができます。
■オブジェクトロック
S3バケットに保存したオブジェクトに対して更新・削除を制限する機能です。S3バケット作成時にのみ設定可能で、オブジェクトロックを有効にするとバージョニング機能も有効になります。
オブジェクトロックは、主にオブジェクトが意図的に改ざん・削除されることを防止する目的で使用します。
オブジェクトロックには、保持期間が無期限の「リーガルホールド」と、期限付きの「リテンションモード」の2種類があります。
〇リーガルホールド
権限(s3:PutObjectLegalHold)を持たないユーザーに対して、リーガルホールドが解除されるまでオブジェクトを読み取り専用にします。権限を持つユーザーのみオブジェクトの更新・削除と、リーガルホールドの解除ができます。
〇リテンションモード
リテンションモードは「ガバナンスモード」と「コンプライアンスモード」に分かれており、どちらかを選択します。
・ガバナンスモード
権限(s3:BypassGovernanceRetention)を持たないユーザーに対して、指定した保持期間中オブジェクトを読み取り専用にします。権限を持つユーザーのみオブジェクトの更新・削除と、ガバナンスモードの解除ができます。
・コンプライアンスモード
ルートユーザーを含む全てのユーザーに対して、指定した保持期間中オブジェクトを読み取り専用にします。保持期間中はルートユーザーを含めてコンプライアンスモードを解除できません。
リーガルホールドとリテンションモードは、同時に両方を有効にすることもできます。例えば、リーガルホールドとリテンションモード1年で有効にした場合、1年後にリテンションモードが解除されても、リーガルホールドは継続されます。逆に、リテンションモードの保持期間中にリーガルホールドを解除しても、リテンションモードは継続されます。
【S3のデータ転送】
S3には、ユーザーからS3バケットへのアップロードや、S3バケット同士のデータ転送に使用する下記の機能があります。
■S3 Transfer Acceleration
ユーザーからS3バケットへ、最適化されたネットワークルートを経由してデータを転送させる機能です。ユーザーと地理的に近いエッジロケーション(※)から高パフォーマンスなAWSネットワークを経由してS3バケットへアクセスするため、遅延の発生やデータ損失などのリスクを少なくします。
(※)エッジロケーション ... AZとは異なるAWSデータセンターで、AZよりも世界中に数多く配置されている
■マルチパートアップロード
S3バケットに保存できるオブジェクトの最大サイズは5TBですが、一度にアップロードできる最大サイズは5GBです。5GBを超えるファイルをアップロードするには「マルチパートアップロード」を利用します。
マルチパートアップロードは、単一のオブジェクトをパートといわれる複数のデータに分割して、S3バケットにアップロードする機能です。各パートはそれぞれ並列にアップロードされるので、アップロード時間を大幅に短縮できます。また、パートの一部に送信エラーが発生しても、他のパートへ影響を及ぼすことなくエラーが発生したパートのみを再送します。AWSではファイルサイズが100MB以上の場合は、マルチパートアップロードの使用を推奨しています。
マルチパートアップロードのプロセスが完了せずに中断されると「不完全なマルチパートアップロード」となります。この状況は、ネットワークの問題、アプリケーションのエラー、またはユーザーによる中断などによって発生する可能性があります。この状態では各パートのアップロードが完了していないため、ファイルは正常に使用できません。また、不完全なパートはストレージスペースを占有し、それに対する料金が発生するため、不必要なコストを発生させる可能性があります。
対策として、ライフサイクルポリシーの機能を使い、不完全なマルチパートアップロードを削除するポリシーを設定し自動的に削除することで、不要なストレージ使用量とコストを削減できます。
■S3レプリケーション
S3バケットのデータを異なるバケットへ自動的にコピーしたい場合に使用します。S3レプリケーションを設定すると、指定した他のバケットへ自動的にオブジェクトをコピーします。レプリケーション先は、同一AWSアカウントが所有するバケットでも、異なるAWSアカウントが所有するバケットでも指定できます。S3レプリケーションには、コピー先を同一リージョンのバケットにする「同一リージョンレプリケーション」と、異なるリージョンのバケットにする「クロスリージョンレプリケーション」があります。
下記の図では、米国西部(オレゴン)リージョンに新しいバケットを作成して、クロスリージョンレプリケーションを設定しています。
![<img src="/mondai3/img/jpg/k58421.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22864/k58421.jpg)
【S3のアクセス制御】
S3ストレージ上のバケットやオブジェクトは、デフォルトではバケットやオブジェクトを作成したAWSアカウント(S3リソースの所有者)だけがアクセスできます。権限を制限されたIAMユーザーや、他のAWSアカウントからS3リソースへアクセスできるようにするには、S3リソースの所有者であるAWSアカウントでオブジェクトやバケットへのアクセス制御を行います。
■バケットポリシー
バケット単位でアクセス権限を設定するリソースベースのポリシーです。自AWSアカウントのIAMユーザーや他のAWSアカウントのユーザーに対して、S3バケットやそのオブジェクトへのアクセス権限を設定します。また、アクセス元のIPアドレスやドメイン名によるアクセス制御もできます。
![<img src="/mondai3/img/jpg/k58432.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22865/k58432.jpg)
バケットポリシーはアクセス権限の設定の他に、次のような機能もあります。
○オブジェクトアップロード時に、バケットの所有者にフルコントロール権限を設定することを強制する
S3のオブジェクトはアップロードしたAWSアカウントが所有権を持ちます。バケットを複数のAWSアカウントで共有している場合も、バケットの所有者とは違うAWSアカウントがアップロードしたオブジェクトの所有権はアップロードしたAWSアカウントが持つので、バケットの所有者はオブジェクトに対してフルコントロール権限がありません。
![<img src="/mondai3/img/jpg/k58726.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22866/k58726.jpg)
バケットの所有者にフルコントロール権限を付与するには、オブジェクトをアップロードするAWSアカウントが、アップロード時にバケットの所有者にフルコントロール権限を付与する設定をします。
バケットポリシーは、オブジェクトアップロード時にフルコントロール権限をバケットの所有者に設定することを強制できます。これによりバケットには、バケット所有者がフルコントロール権限を持つオブジェクトのみアップロードできるようになります。
![<img src="/mondai3/img/jpg/kk58726.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22867/kk58726.jpg)
■IAMポリシー(ユーザーポリシー)
IAMユーザー単位でアクセス権限を設定するIDベースのポリシーです。自AWSアカウントのIAMユーザーやグループ、ロールに対して、S3リソースへのアクセス権限を設定します。バケットポリシーとは違い、他のAWSアカウントには設定できません。
IAMポリシーによるアクセス権限は、バケットポリシーと同じくアクセス元のIPアドレスやドメイン名によるアクセス制御もできます。
![<img src="/mondai3/img/jpg/k58433.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22868/k58433.jpg)
■ACL(アクセスコントロールリスト)
AWSアカウント単位でアクセス権限を設定する機能です。他のAWSアカウントに対して、S3バケットやオブジェクトへの読み取りまたは書き込みを許可します。
![<img src="/mondai3/img/jpg/k58431.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22869/k58431.jpg)
【S3のデータ暗号化】
S3のバケットやオブジェクトはデフォルトで暗号化されます。S3のデータ暗号化には「サーバー側の暗号化」と「クライアント側の暗号化」の2種類の方法があります。
■サーバー側の暗号化(Server-Side Encryption:SSE)
データがS3に保存されるタイミングで自動的にS3が暗号化を行います。データを取り出すときはS3がデータを復号して、ユーザーに渡します。
![<img src="/mondai3/img/jpg/k58434.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22870/k58434.jpg)
サーバー側の暗号化には、以下3種類の方法があります。
○S3が管理している鍵を使用する (SSE-S3)
![<img src="/mondai3/img/jpg/kk58434.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22871/kk58434.jpg)
○AWS KMS(AWS Key Management Service)に保存されているKMSキーを使用する (SSE-KMS)
![<img src="/mondai3/img/jpg/kkk58434.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22872/kkk58434.jpg)
○ユーザーが管理している鍵を使用する (SSE-C)
![<img src="/mondai3/img/jpg/kkkk58434.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22873/kkkk58434.jpg)
■クライアント側の暗号化
データをS3へアップロードする前にクライアント側で暗号化を行い、暗号化したデータをそのままS3に保存します。データを取り出すときは、暗号化したデータをS3からダウンロードした後、クライアント側で復号します。
![<img src="/mondai3/img/jpg/k58435.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22874/k58435.jpg)
クライアント側の暗号化には、以下2種類の方法があります。
○AWS KMS(AWS Key Management Service)に保存されているKMSキーを使用する
![<img src="/mondai3/img/jpg/kk58435.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22875/kk58435.jpg)
○クライアント側に保存したルートキーを使用する
![<img src="/mondai3/img/jpg/kkk58435.jpg">](https://ping-t-resouces.com/uploads/question_image/file/22876/kkk58435.jpg)
Transfer Accelerationを使用した場合の通信費について
公開日 2022/12/27
「Transfer Accelerationを使用してもデータ転送料金は変わらない」とありますが、転送料金は Transfer Accelerationにより0.04 USD/GB 上乗せされ、高くなる認識なのですが認識誤りでしょうか。
スタッフからの返信
この投稿に対して返信しませんか?
s staff_satomi
2023/01/04 10:40
nanasi2424様 ご指摘の点を修正いたしました。 ご報告いただきまして、誠にありがとうございます。