Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Amazon S3 バケット内のファイルを保護する方法を教えてください。
アクセス制限、リソースモニタリング、データ暗号化により Amazon S3 バケットを保護してファイルの安全性を保ち、セキュリティのベストプラクティスを満たしたいと思っています。
解決策
まず、Amazon S3 バケットタイプが汎用、ディレクトリ、テーブルのいずれかを確認します。次に、バケットタイプに合ったセキュリティ対策とモニタリングサービスを選択します。
S3 リソースへのアクセスを制限する
デフォルトでは、すべての S3 バケットはプライベートです。バケットへのアクセス許可が明示的に付与されたユーザーのみがバケットにアクセスできます。
S3 バケットやオブジェクトへのアクセスを制限するには、次のアクションを実行します。
- 特定のバケットとオブジェクトにアクセスできるユーザーを指定するアイデンティティベースのポリシーを使用します。ユーザーポリシーの作成とテストには、AWS Policy Generator と IAM ポリシーシミュレーターを使用します。
- 特定のバケットやオブジェクトへのアクセスを定義するバケットポリシーを使用します。バケットポリシーを使用して、AWS アカウント全体へのアクセスを許可したり、公開または匿名のアクセス許可を付与したり、条件に基づいてアクセスを許可またはブロックしたりできます。
注:IAM ポリシーでユーザーにアクセスを付与した場合でも、バケットポリシーの拒否ステートメントを使用して特定の AWS Identity and Access Management (IAM) ユーザーへのアクセスを制限できます。 - Amazon S3 パブリックアクセスブロックを、パブリックアクセスを一元的に制限する方法として使用します。パブリックアクセスブロックの設定は、バケットポリシーとオブジェクト権限よりも優先されます。公開したくないすべてのアカウントとバケットについて、必ずパブリックアクセスブロックを有効にしてください。Amazon S3 は、すべての新しいアカウントとバケットに対してデフォルトでパブリックアクセスブロックを有効にします。S3 リソースへのパブリックアクセスが明示的に必要な場合にのみ、この機能をオフにしてください。バケットのパブリックアクセスブロックをオフにした場合は、バケットを定期的に監査してください。
- バケットとオブジェクトにアクセスコントロールリスト (ACL) を設定します。
**注:**プログラムでアクセス許可を管理する必要がある場合は、ACL の代わりに IAM ポリシーまたはバケットポリシーを使用してください。ただし、バケットポリシーが最大ファイルサイズの 20 KB を超える場合は ACL を使用できます。または、ACL を使用して Amazon S3 サーバーアクセスログまたは Amazon CloudFront ログへのアクセス権限を付与することもできます。 - サービスコントロールポリシー (SCP) を使用して、組織内のすべてのアカウントで S3 セキュリティポリシーを一元的に管理および強制します。
- ネットワークレベルでは、仮想プライベートクラウド (VPC) エンドポイント、バケットポリシーの IP アドレスに基づく制限、AWS PrivateLink for S3 を使用してアクセスを制限します。VPC エンドポイントを使用すると、インターネットにアクセスしなくても Amazon S3 へのプライベートアクセスが可能になります。
- S3 アクセスポイントを使用して、複数のアプリケーションやチームがアクセスするバケットのセキュリティ管理を簡素化します。
- S3 Object Lock を実装して、指定した期間内はユーザーがオブジェクトを削除または上書きできないようにします。
ACL を使用してリソースを保護する場合は、次のベストプラクティスを実装します。
- バケットまたはオブジェクトに対する Amazon S3 アクションを許可する ACL アクセス許可を確認します。
- バケットへの読み取りおよび書き込みアクセスを持つユーザーを制限します。
- すべての人にバケットまたはオブジェクトにアクセスさせたい場合にのみ、全員グループに読み取りアクセス権限を付与します。
- 全員グループに書き込みアクセス権限を付与しないでください。書き込みアクセス権限のあるユーザーなら誰でもバケットにオブジェクトを追加でき、AWS はアップロードされたすべてのオブジェクトに対して料金を請求します。また、書き込みアクセス権限のあるユーザーなら誰でもバケット内のオブジェクトを削除できます。
- 任意の認証済み AWS ユーザーグループには、アクティブなアカウントを持つすべてのユーザーが含まれるため、書き込みアクセス権限を付与しないでください。アカウントの IAM ユーザーのアクセスを制御するには、代わりに IAM ポリシーを使用してください。Amazon S3 が IAM ポリシーを評価する方法の詳細については、「Amazon S3 がリクエストを許可する仕組み」を参照してください。
- 新しいバケットの場合、Amazon S3 では S3 オブジェクト所有権がデフォルトでバケット所有者の強制に設定されます。これにより ACL がオフになります。すべてのオブジェクトを完全に制御するには、ACL をオフにして、バケットポリシーと IAM ポリシーを使用してアクセス制御を行うのがベストプラクティスです。
次の方法で、特定のアクションへのアクセスを制限することもできます。
- オブジェクトを削除したり、バケットのバージョニングをオフにしたりする前にユーザーに多要素認証の使用を求めるには、MFA 削除を構成します。
- MFA で保護された API アクセスを設定します。これにより、ユーザーは特定の Amazon S3 API オペレーションを呼び出すために AWS MFA デバイスでの認証が必要になります。
- S3 オブジェクトを他のユーザーと一時的に共有する場合は、署名付き URL を作成して、そのオブジェクトへの時間制限付きのアクセスを許可します。
S3 リソースのモニタリング
S3 リソースのログ記録を有効にしてモニタリングするには、次の操作を行います。
- バケット内のオブジェクトの AWS CloudTrail ログ記録有効化を実施します。デフォルトでは、CloudTrail はバケットレベルのアクションのみをモニタリングします。GetObject などオブジェクトレベルのアクションをモニタリングするには、データイベントを記録します。データイベントの例については、「例: Amazon S3 オブジェクトのデータイベントのログ記録」を参照してください。
- Amazon S3 サーバーアクセスログをオンにします。サーバーアクセスログを確認する方法については、「Amazon S3 サーバーアクセスログの形式」を参照してください。
- AWS Config を使用して、パブリックの読み取りまたは書き込みアクセスを許可する違反がないか、バケットの ACL とバケットポリシーをモニタリングします。詳細については、「s3-bucket-public-read-prohibited」および「s3-bucket-public-write-prohibited」を参照してください。
- IAM Access Analyzer を使用して、別の AWS アカウントから S3 リソースへのアクセスを許可するバケットまたは IAM ポリシーを確認します。
- Amazon Macie をオンにして、バケットに保存されている機密データ、バケットへの幅広いアクセス、アカウント内の暗号化されていないバケットの識別を自動化します。
- CloudTrail を他の AWS サービスと組み合わせて使用して、S3 リソースで特定のアクションを実行したときに特定のプロセスを呼び出す。たとえば、Amazon EventBridge を使用して S3 オブジェクトレベルのオペレーションを記録できます。
- AWS Trusted Advisor の S3 バケットアクセス許可チェックを使用して、オープンアクセス許可のあるバケットについて通知を受け取ります。詳細については、「 AWS Trusted Advisor チェックリファレンス」を参照してください。
暗号化を使用してデータを保護する
送信中に暗号化が必要な場合は、HTTPS プロトコルを使用して Amazon S3 との間で転送中のデータを暗号化します。すべての AWS SDK と AWS ツールはデフォルトで HTTPS を使用します。
**注:**サードパーティのツールを使用して Amazon S3 とやり取りする場合は、サードパーティーの企業に問い合わせて、そのツールが HTTPS プロトコルもサポートしているかどうかを確認してください。
保管中のデータを暗号化する必要がある場合は、サーバー側の暗号化オプションとして、Amazon S3 マネージドキー (SSE-S3)、AWS Key Management Service (AWS KMS) キー (SSE-KMS)、お客様が指定したキー (SSE-C) を使用します。SSE は CloudTrail を通じて保護を強化し、詳細な監査証跡を実現します。バケットにオブジェクトを書き込むときに SSE パラメータを指定できます。SSE-S3 または SSE-KMS を使用してバケットのデフォルト暗号化をオンにすることもできます。
**注:**Amazon S3 はすべての新しいバケットに対して SSE-S3 を自動的にオンにします。
クライアント側の暗号化が必要な場合は、「クライアント側の暗号化を使用したデータの保護」を参照してください。
関連情報
他の AWS アカウントのユーザーが Amazon S3 バケットにアクセスする際、MFA を使用するように要求するにはどうすればよいですか?
関連するコンテンツ
- 質問済み 3ヶ月前

