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

最終更新日: 2020 年 11 月 10 日

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

解決方法

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

デフォルトでは、すべての S3 バケットはプライベートであり、明示的にアクセスが許可されているユーザーのみがアクセスできます。AWS を使用しているときは、リソースへのアクセスを、絶対にそれを必要とするユーザーに制限することがベストプラクティスです。最小限の権限を付与する原則に従います。

次の方法で、S3 バケットまたはオブジェクトへのアクセスを制限してください。

  • 特定のバケットとオブジェクトにアクセスできるユーザーを指定する AWS Identity and Access Management (IAM) ユーザーポリシーを作成します。IAM ポリシーはプログラムをを使って、複数のユーザーに対する Amazon S3 のアクセス許可を管理します。ユーザーポリシーの作成とテストの詳細については、 AWS Policy GeneratorIAM Policy Simulator をご参照ください。
  • 特定のバケットとオブジェクトへのアクセスを定義するバケットポリシーの作成バケットポリシーを使用すれば、AWS アカウント間でアクセスを許可し、パブリックまたは匿名のアクセス許可を付与し、条件に基づいてアクセスを許可またはブロックできます。バケットポリシーの作成とテストの詳細については、AWS Policy Generator をご参照ください。
    注: ユーザーが 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 リソースを監視するには、次の方法があります。

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

ユースケースで送信中に暗号化が必要な場合、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 を使用して、バケットでデフォルトの暗号化を有効にすることもできます。

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