Amazon S3 バケット内のファイルを保護するにはどうすればよいですか?

最終更新日: 2021 年 12 月 3 日

Amazon Simple Storage Service (Amazon S3) バケットとオブジェクトが安全であるようにしたいと考えています。Amazon S3 リソースへの許可を制限するにはどうすればよいですか? これらのリソースへのアクセスはどのように監視できますか?

簡単な説明

ファイルと Amazon S3 バケットの安全性を確保するには、次のベストプラクティスに従ってください。

解決方法

S3 リソースへのアクセスを制限する

デフォルトでは、すべての S3 バケットはプライベートであり、明示的にアクセスが許可されているユーザーのみがアクセスできます。

次を実行して、S3 バケットまたはオブジェクトへのアクセスを制限します。

  • 特定のバケットやオブジェクトにアクセスできるユーザーを指定する IAM ユーザーポリシーを記述する。IAM ポリシーは、プログラムを使用した方法で、複数のユーザーのための Amazon S3 の許可を管理します。ユーザーポリシーの作成とテストの詳細については、 AWS Policy GeneratorIAM Policy Simulator をご参照ください。
  • 特定のバケットとオブジェクトへのアクセスを定義するバケットポリシーを記述する。バケットポリシーを使用すれば、AWS アカウント間でアクセスを許可し、パブリックまたは匿名のアクセス許可を付与し、条件に基づいてアクセスを許可またはブロックできます。バケットポリシーの作成とテストの詳細については、AWS Policy Generator を参照してください。
    注意:バケットポリシーで deny ステートメントを使用して、特定の IAM ユーザーへのアクセスを制限できます。IAM ポリシーでユーザーにアクセス権が付与されている場合でも、アクセスを制限できます。
  • パブリックアクセスを制限する集中的な方法として Amazon S3 ブロックパブリックアクセスを使用します。Block Public Access の設定はバケットポリシーとオブジェクトのアクセス許可を上書きします。一般に公開したくないアカウントやバケットに対しては、必ず Block Public Access を有効にしてください。
  • バケットとオブジェクトのアクセスコントロールリスト (ACL)を設定する。
    注: プログラムを使ってアクセス許可を管理する必要がある場合は、ACL ではなく IAM ポリシーまたはバケットポリシーを使用してください。ただしバケットポリシーが最大 20 KB のファイルサイズを超える場合には、ACL を使用できます。あるいは ACL を使用して、Amazon S3サーバーアクセスログまたは Amazon CloudFront ログへのアクセス許可を付与できます。

リソースを保護するのに ACL を使用するときは、以下を実行することをお勧めします。

  • バケットまたはオブジェクトに対する Amazon S3 のアクションを許可する ACL 権限を確認してください。ACL アクセス許可のリストとそれにより許可されるアクションについては、付与できるアクセス許可は何ですか? を参照してください。
  • 誰がバケットへの読み取りおよび書き込みのアクセス権を取得するかの設定は、厳重に行いましょう。
  • 読み取りアクセスを Everyone のグループに許可する前に、ユースケースを慎重に検討してください。この行為により、誰でもバケットまたはオブジェクトにアクセスできるようになるためです。
  • 全員グループへの書き込みアクセスは絶対に許可しないでください。この設定により、誰でもバケットにオブジェクトを追加でき、この設定により、誰でもバケット内のオブジェクトを削除できるようになります。
  • 書き込みアクセスを Any authenticated AWS user グルーにプ許可しないでください。このグループにはアカウント内の IAM ユーザーだけでなく、アクティブな 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 リソースを監視する

ログを有効にし、S3 リソースをモニタリングするには、次の方法があります。

  • AWS CloudTrail ログを設定します。デフォルトでは、CloudTrail はバケットレベルのアクションのみを追跡します。オブジェクトレベルのアクション (GetObjectなど) を追跡するには、[Amazon S3 data events] (Amazon S3 データイベント) を有効にします。
  • Amazon S3 サーバーアクセスロギングを有効にするこれらのログを確認する方法の詳細については、Amazon S3 サーバーアクセスログの形式を参照してください。
  • AWS Config を使用して、パブリック読み取りまたは書き込みアクセスを許可する違反についてバケット ACL とバケットポリシーをモニタリングします。詳しくは、s3-bucket-public-read-prohibited および s3-bucket-public-write-prohibited を参照してください。
  • AWS IAM Access Analyzer を使用して、別の AWS アカウントから S3 リソースへのアクセスを許可するバケットまたは IAM ポリシーを確認します。
  • Amazon Macie を使用すると、バケットに保存されている機密データの識別、バケットへの幅広いアクセス、アカウント内の暗号化されていないバケットの識別を自動化できます。
  • CloudWatch や AWS Lambda などの他のサービスと共に CloudTrail を使用して、S3 リソースに対して特定のアクションが実行されたときに特定のプロセスを呼び出します。詳細については、CloudWatch Events を使用して Amazon S3 オブジェクトレベル操作のログを記録するを参照してください。
  • ビジネスまたはエンタープライズサポートプランがある場合は、AWS Trusted Advisor の S3 バケットの許可チェックを使用できます。このチェックは、オープンアクセス許可を持つバケットについて通知します。
    注: この Trusted Advisor チェックでは、バケット ACL を上書きするバケットポリシーは監視しません。

データを保護するために暗号化を使用する

ユースケースで送信中に暗号化が必要な場合、Amazon S3 は Amazon S3との間で送受信されるデータを暗号化する HTTPS プロトコルをサポートしています。すべての AWS SDK と AWS ツールはデフォルトで HTTPS を使用します。
注意: サードパーティ製のツールを使用して Amazon S3 とやり取りする場合は、デベロッパーに連絡して、それらのツールも HTTPS プロトコルをサポートしているか確認してください。

ユースケースが保存データの暗号化を必要とする場合、Amazon S3 はサーバー側の暗号化 (SSE) を提供します。SSE オプションには、SSE-S3SSE-KMS、または SSE-C があります。オブジェクトをバケットに書き込むときに SSE パラメータを指定できます。SSE-S3 または SSE-KMS を使用して、バケットでデフォルトの暗号化を有効にすることもできます。

ユースケースでクライアントサイドの暗号化が必要な場合は、クライアントサイドの暗号化を使用したデータの保護を参照してください。