Amazon Simple Storage Service (Amazon S3) バケットとオブジェクトが安全であるようにしたいと考えています。プライベートにしておきたいリソースはプライベートにしたまま、Amazon S3 リソースへのアクセス許可を制限するにはどうすればよいですか? これらのリソースへのアクセスはどのように監視できますか?
S3 リソースへのアクセスを制限する
デフォルトでは、すべての S3 バケットはプライベートであり、明示的にアクセスが許可されているユーザーのみがアクセスできます。AWS を使用しているときは、リソースへのアクセスを、絶対にそれを必要とするユーザーに制限することがベストプラクティスです。最小限の権限を付与する原則に従います。
次の方法で、S3 バケットまたはオブジェクトへのアクセスを制限してください。
- 特定のバケットとオブジェクトにアクセスできるユーザーを指定する AWS Identity and Access Management (IAM) ユーザーポリシーを作成します。IAM ポリシーを使用すると、プログラム的な方法で複数のユーザーの Amazon S3 アクセス許可を管理できます。ユーザーポリシーの作成とテストの詳細については、「AWS Policy Generator」および「IAM Policy Simulator」を参照してください。
- 特定のバケットとオブジェクトへのアクセスを定義するバケットポリシーを作成します。バケットポリシーを使用して、AWS アカウント間でアクセスを許可し、パブリックまたは匿名のアクセス許可を行うことで、特定の条件に基づいてアクセスを許可またはブロックできます。バケットポリシーの作成とテストの詳細については、「AWS Policy Generator」を参照してください。
注: ユーザーが IAM ポリシーでアクセスを許可されている場合でも、バケットポリシーで拒否ステートメントを使用することで、アクセスを特定の IAM ユーザーに制限できます。 - パブリックアクセスを制限する集中的な方法として Amazon S3 ブロックパブリックアクセスを使用します。ブロックパブリックアクセス設定は、バケットポリシーとオブジェクト権限を上書きします。
- バケットとオブジェクトにアクセスコントロールリスト (ACL)を設定します。
注: アクセス許可をプログラム的に管理する方法が必要な場合は、ACL の代わりに IAM ポリシーまたはバケットポリシーを使用してください。ただし、バケットポリシーが最大ファイルサイズの 20 KB を超える場合、または Amazon S3 サーバーアクセスログまたは Amazon CloudFront ログへのアクセスを許可する場合は、ACL を使用できます。
リソースを保護するために ACL を使用するときは、次のベストプラクティスを考慮してください。
- バケットまたはオブジェクトに対する Amazon S3 のアクションを許可する ACL 権限を確認してください。ACL 権限のリストとそれにより許可されるアクションについては、「付与できる権限は何ですか?」を参照してください。
- 誰がバケットへの 読み取り および 書き込み のアクセス権を取得することになるのかについて慎重に検討してください。
- 全員グループへの読み取りアクセスを許可する前に、ユースケースを慎重に検討してください。これにより、誰でもバケットまたはオブジェクトにアクセスできるようになるからです。
- 全員グループへの書き込みアクセスは絶対に許可しないでください。この設定により、誰でもバケットにオブジェクトを追加でき、また誰でもバケット内のオブジェクトを削除できるようになってしまいます。
- アカウント内の IAM ユーザーだけでなく、アクティブな AWS アカウントを持つすべてのユーザーを含む、認証済み AWS ユーザーグループへ書き込みアクセスを許可しないでください。アカウントの IAM ユーザーのアクセスを制御するには、代わりに IAM ポリシーを使用してください。Amazon S3 が IAM ポリシーを評価する方法の詳細については、「Amazon S3 がリクエストを承認する方法」を参照してください。
ポリシー、パブリックアクセスの遮断、および ACL を使用する方法に加えて、以下の方法でも特定のアクションへのアクセスを制限することができます。
- MFA Delete を有効にする方法。この方法では、オブジェクトを削除したりバケットのバージョン管理を無効にしたりする前に、ユーザーが Multi-Factor Authentication (MFA) デバイスを使用して認証することを要求します。
- MFA で保護された API アクセスを設定する方法。この方法では、ユーザーが特定の Amazon S3 API オペレーションを呼び出す前に AWS MFA デバイスで認証する必要があります。
- 一時的に他のユーザーと S3 オブジェクトを共有する場合は、そのオブジェクトへの期限付きアクセスを許可するための署名付き URL を作成します。詳しくは、「他のユーザーとのオブジェクトの共有」を参照してください。
S3 リソースを監視する
バケットとオブジェクトにどのようなアクションが実行されたかを追跡するには、次の方法でロギングを有効にしてリソースを監視できます。
- AWS CloudTrail ログを設定する方法。デフォルトでは、CloudTrail はバケットレベルのアクションのみを追跡します。オブジェクトレベルのアクション (GetObjectなど) を追跡するには、[Amazon S3 データイベント] を有効にします。
- Amazon S3 サーバーアクセスログを有効にする方法。これらのログを確認する方法の詳細については、「サーバーアクセスログの形式」を参照してください。
- AWS Config を使用して、パブリック読み取りまたは書き込みアクセスを許可する違反についてバケット ACL とバケットポリシーを監視する方法。詳しくは、「S3 バケットの公開読み取り禁止」および「S3 バケットの公開書き込み禁止」を参照してください。
- Amazon CloudWatch や AWS Lambda などの他のサービスと共に CloudTrail を使用して、S3 リソースに対して特定のアクションが実行されたときに特定のプロセスをトリガーする方法。詳細については、「CloudWatch Events を使用して Amazon S3 オブジェクトレベル操作のログを記録する」を参照してください。
- ビジネスまたはエンタープライズサポートプランがある場合は、AWS Trusted Advisor の Amazon S3 バケットのアクセス許可チェックを使用できます。このチェックは、オープンアクセス許可を持つバケットについて通知します。
注: この Trusted Advisor チェックでは、バケット ACL を上書きするバケットポリシーは監視しません。
データを保護するために暗号化を使用する
ユースケースで送信中に暗号化が必要な場合、Amazon S3 は Amazon S3との間で送受信されるデータを暗号化する HTTPS プロトコルをサポートしています。すべての AWS SDK と AWS ツールはデフォルトで HTTPS を使用します。
注: サードパーティ製のツールを使用して Amazon S3 とやり取りする場合は、開発者に連絡して、それらのツールも HTTPS プロトコルをサポートしているかどうかを確認してください。
ユースケースが保存データの暗号化を必要とする場合、Amazon S3 はサーバー側の暗号化 (SSE) を提供します。SSE オプションには、SSE-S3、SSE-KMS、または SSE-C があります。オブジェクトをバケットに書き込むときに SSE パラメータを指定できます。SSE-S3 または SSE-KMS を使用して、バケットでデフォルトの暗号化を有効にすることもできます。
ユースケースでクライアントサイドの暗号化が必要な場合は、「クライアントサイドの暗号化を使用したデータの保護」を参照してください。