ディレクトリバケットのセキュリティのベストプラクティス
ディレクトリバケットを使用する際に考慮すべきセキュリティ機能がいくつかあります。以下のベストプラクティスは一般的なガイドラインであり、完全なセキュリティソリューションを提供するものではありません。これらのベストプラクティスは顧客の環境に必ずしも適切または十分でない可能性があるので、処方箋ではなく、あくまで有用な推奨事項とお考えください。
デフォルトのブロックパブリックアクセスとオブジェクト所有権の設定
ディレクトリバケットは S3 ブロックパブリックアクセスと S3 オブジェクト所有権をサポートします。このような S3 機能は、バケットとオブジェクトへのアクセスを監査して管理するために使用されます。
デフォルトでは、ディレクトリバケットのすべてのブロックパブリックアクセス設定が有効になっています。さらに、オブジェクト所有者はバケット所有者の強制に設定されています。これは、アクセスコントロールリスト (ACL) が無効になっていることを意味します。上記の設定は変更できません。上記の機能の詳細については、「Amazon S3 ストレージへのパブリックアクセスのブロック」と「オブジェクトの所有権の制御とバケットの ACL の無効化。」を参照してください。
注記
ディレクトリバケットに保存されているオブジェクトへのアクセスは付与できません。アクセスは、ディレクトリバケットにたいしてのみ付与できます。S3 Express One Zone の認可モデルは、Amazon S3 の認可モデルとは異なります。詳細については、「CreateSession を使用したゾーンエンドポイント API オペレーションの承認」を参照してください。
認証と認可
ディレクトリバケットの認証と認可のメカニズムは、ゾーンエンドポイント API オペレーションまたはリージョンエンドポイント API オペレーションのどちらにリクエストを行うかに応じて異なります。ゾーン API オペレーションはオブジェクトレベル (データプレーン) のオペレーションです。リージョン API オペレーションはバケットレベル (コントロールプレーン) のオペレーションです。
ゾーンエンドポイント API オペレーションへのリクエストを認証および認可するには、レイテンシーを最小限に抑えるように最適化された新しいセッションベースのメカニズム を使用します。セッションベースの認証では、AWS SDK は
CreateSession
API オペレーション を使用して一時的な認証情報をリクエストします。これにより、ディレクトリバケットに低レイテンシーでアクセスできます。これらの一時認証情報は特定のディレクトリバケットに限定され、5 分後に期限切れになります。このような一時的な認証情報を使用して、ゾーン (オブジェクトレベル) API 呼び出しに署名できます。詳細については、「CreateSession を使用したゾーンエンドポイント API オペレーションの承認」を参照してください。
ディレクトリバケット管理用の認証情報を使用したリクエストの署名
認証情報を使用してゾーンエンドポイント (オブジェクトレベル) API リクエストに署名するには、s3express
をサービス名として、AWS Signature Version 4 を使用します。リクエストに署名する際は、CreateSession
から返されたシークレットキーを使用し、セッショントークンを x-amzn-s3session-token header
に渡します。詳細については、「CreateSession」を参照してください。
サポートされている AWS SDK がユーザーに代わって認証情報と署名を管理します。AWS SDK を使用して認証情報を更新し、リクエストに署名することをお勧めします。
IAM 認証情報を使用したリクエストの署名
リージョン (バケットレベル) の API 呼び出しはすべて、一時的なセッション認証情報ではなく AWS Identity and Access Management (IAM) 認証情報で認証および署名される必要があります。IAM 認証情報は IAM アイデンティティのアクセスキー ID とシークレットアクセスキーで構成されます。すべての CopyObject
リクエストと HeadBucket
リクエストは IAM 認証情報を使用して認証され、署名される必要があります。
ゾーン (オブジェクトレベル) オペレーション呼び出しのレイテンシーを最小限に抑えるには、CopyObject
と HeadBucket
へのリクエストを除き、CreateSession
を呼び出して取得した認証情報を使用してリクエストに署名することをお勧めします。
AWS CloudTrail を使用する
AWS CloudTrail は、Amazon S3 のユーザー、ロール、または AWS のサービス が実行したアクションの記録を提供します。CloudTrail によって収集されたデータを使用して、以下の情報を判断できます。
-
Amazon S3 に対して行われたリクエスト
-
リクエストが行われた IP アドレス
-
リクエストを行ったユーザー
-
リクエストが行われた時間
-
リクエストに関するその他の詳細
AWS アカウントのセットアップ時には、CloudTrail 管理イベントはデフォルトで有効になっています。次のリージョンエンドポイント API オペレーション (バケットレベル、またはコントロールプレーンの API オペレーション) が CloudTrail に記録されます。
注記
ListMultipartUploads
は、ゾーンエンドポイント API オペレーションです。ただし、この API オペレーションは CloudTrail に管理イベントとして記録されます。詳細については、「Amazon Simple Storage Service API リファレンス」の「ListMultipartUploads」を参照してください。
デフォルトでは CloudTrail 証跡はデータイベントを記録しませんが、証跡を設定して、指定したディレクトリバケットのデータイベントを記録したり、ご使用の AWS アカウントですべてのディレクトリバケットのデータイベントを記録したりできます。次のゾーンエンドポイント API オペレーション (オブジェクトレベル、またはデータプレーンの API オペレーション) が CloudTrail に記録されます。
ディレクトリバケットで AWS CloudTrail を使用する方法の詳細については、「ディレクトリバケットの AWS CloudTrail によるログ記録」を参照してください。
AWS モニタリングツールを使用したモニタリングを実装する
モニタリングは、Amazon S3 および AWS ソリューションの信頼性、セキュリティ、可用性、パフォーマンスを維持する上で重要なエレメントです。AWS では、Amazon S3 およびその他の AWS のサービス をモニタリングするのに役立つツールとサービスを提供しています。例えば、Amazon S3 の Amazon CloudWatch メトリクス、特に BucketSizeBytes
と NumberOfObjects
ストレージ メトリクスをモニタリングできます。
ディレクトリバケットに保存されているオブジェクトは、Amazon S3 の BucketSizeBytes
および NumberOfObjects
ストレージメトリクスには反映されません。ただし、BucketSizeBytes
および NumberOfObjects
ストレージメトリクスはディレクトリバケットでサポートされています。希望するメトリクスを表示するには、StorageType
ディメンションを指定することで Amazon S3 ストレージクラス間を区別できます。詳細については、「Amazon CloudWatch によるメトリクスのモニタリング」を参照してください。
詳細については、Amazon CloudWatch によるメトリクスのモニタリングおよびAmazon S3 でのログ記録とモニタリングを参照してください。