Amazon S3 のセキュリティのベストプラクティス
Amazon S3 では、お客様が独自のセキュリティポリシーを開発および実装するにあたって検討すべき数多くのセキュリティ機能を提供しています。以下のベストプラクティスは一般的なガイドラインであり、完全なセキュリティソリューションに相当するものではありません。これらのベストプラクティスはお客様の環境に適切ではないか、十分ではない場合があるため、これらは処方箋ではなく、有用な考慮事項と見なしてください。
Amazon S3 での予防的セキュリティのベストプラクティス
Amazon S3 での以下のベストプラクティスはセキュリティ問題を防ぐのに役立ちます。
- 「Amazon S3 バケットに正しいポリシーが使用され、それらのバケットが公開されていないことを確認する
-
インターネット上のだれもがお客様の S3 バケットを読み書きできるように明示的にリクエストしない限り、S3 バケットが非公開であることを確認する必要があります。以下に示しているのは、実行できるいくつかのステップです。
-
Amazon S3 のパブリックアクセスブロックを使用するAmazon S3 パブリックアクセスブロックを使用すると、アカウント管理者とバケット所有者は、リソースの作成方法に関係なく、Amazon S3 リソースへのパブリックアクセスを制限するための一元管理を簡単に設定できます。詳細については、「Amazon S3 ブロックパブリックアクセスの使用」を参照してください。
-
プリンシパル「*」(実際、任意のユーザー) などのワイルドカードアイデンティティを許可するか、またはワイルドカードアクション「*」(実際、任意のユーザーが Amazon S3 バケットで実行する任意のアクション) を許可する Amazon S3 バケットポリシーを識別します。
-
同様に、「全員」または「任意の認証済み AWS ユーザー」への読み取り、書き込み、またはフルアクセスを許可する Amazon S3 バケットアクセスコントロールリスト (ACL) に注意します。
-
ListBucketsAPI を使用して、すべての Amazon S3 バケットをスキャンします。その後、GetBucketAcl、GetBucketWebsite、GetBucketPolicyを使用して、アクセスコントロールと設定がコンプライアンス要件を満たしているかどうかを判断します。 -
AWS Trusted Advisor を使用して、Amazon S3 実装を検査します。
-
s3-bucket-public-read-prohibited および s3-bucket-public-write-prohibited マネージド AWS Config ルール ルールを使用する継続的な発見的統制の実装を検討してください。
詳細については、Amazon Simple Storage Service コンソールユーザーガイド の「バケットとオブジェクトのアクセス許可の設定」を参照してください。
-
- 最小限の特権アクセスを実装する
-
アクセス許可を付与する場合、どのユーザーにどの Amazon S3 リソースに対するアクセス許可を付与するかは、お客様が決定します。つまり、該当リソースに対して許可する特定のアクションを有効にするということです。このため、タスクの実行に必要なアクセス許可のみを付与する必要があります。最小限の特権アクセスの実装は、セキュリティリスクはもちろん、エラーや悪意ある行動によってもたらされる可能性のある影響を減らす上での基本となります。
以下のツールは、最小限の特権アクセスを実装するために使用できます。
上記のメカニズムを 1 つ以上選択する場合に何を考慮すべきかに関するガイダンスについては、「Amazon S3 リソースへのアクセス許可の管理の概要」を参照してください。
- Amazon S3 アクセスを必要とするアプリケーションと AWS サービスには IAM ロールを使用する
-
AWS の Amazon EC2 などのサービス上のアプリケーションが Amazon S3 リソースにアクセスするには、それらの AWS API リクエストに有効な AWS 認証情報を含める必要があります。アプリケーションまたは Amazon EC2 インスタンスに AWS 認証情報を直接保存しないでください。AWS 認証情報は、自動更新されない長期認証情報のため、漏洩すると業務に深刻な悪影響が及ぶ可能性があります。
代わりに、IAM ロールを使用して、Amazon S3 にアクセスする必要があるアプリケーションまたはサービスの一時的な認証情報を管理する必要があります。ロールを使用するとき、Amazon EC2 インスタンスまたは AWS のサービス (AWS Lambda など) に長期の認証情報 (ユーザー名、パスワード、アクセスキーなど) を配布する必要はありません。ロールは、アプリケーションが他の AWS リソースの呼び出しを行うときに使用できる一時的なアクセス許可を付与します。
詳細については、IAM ユーザーガイド の以下のトピックを参照してください。
- MFA (多要素認証) Delete を有効にする
-
MFA Delete は、誤ってバケットを削除しないようにするのに役立ちます。MFA Delete が有効になっていない場合、任意のユーザーは、十分な特権のある root または IAM ユーザーのパスワードを使用して、Amazon S3 オブジェクトを完全に削除できます。
MFA Delete では、以下のいずれかのオペレーションに追加の認証が必要になります。
-
バケットのバージョニング状態を変更する
-
オブジェクトバージョンを完全に削除する
詳細については、「MFA Delete」を参照してください。
-
- 保管時のデータの暗号化を検討する
-
Amazon S3 で保管時のデータを保護するには、以下のようなオプションがあります。
-
サーバー側の暗号化を使用する – オブジェクトをデータセンター内のディスクに保存する前に暗号化し、オブジェクトをダウンロードするときに復号するように Amazon S3 にリクエストします。サーバー側の暗号化は、データ自体を保存するメカニズムとは異なるメカニズムで保存されているキーを使用してデータを暗号化することで、データへのリスクを軽減するのに役立ちます。
Amazon S3 は複数のサーバー側の暗号化オプションを提供します。詳細については、「サーバー側の暗号化を使用したデータの保護」を参照してください。
-
クライアント側の暗号化 – クライアント側でデータを暗号化し、暗号化したデータを Amazon S3 にアップロードします。この場合、暗号化プロセス、暗号化キー、関連ツールはお客様が管理してください。サーバー側の暗号化と同様に、クライアント側の暗号化は、データ自体を保存するメカニズムとは異なるメカニズムで保存されているキーを使用してデータを暗号化することで、リスクを軽減するのに役立ちます。
Amazon S3 は複数のクライアント側の暗号化オプションを提供します。詳細については、「クライアント側の暗号化を使用したデータの保護」を参照してください。
-
- 転送中のデータの暗号化を強制する
-
HTTPS (TLS) を使用すると、潜在的な攻撃者が中間者攻撃または同様の攻撃を使用してネットワークトラフィックを盗聴または操作することを防止できます。Amazon S3 バケットポリシーで aws:SecureTransport 条件を使用して、HTTPS (TLS) を介した暗号化接続のみを許可してください。
また、s3-bucket-ssl-requests-only マネージド AWS Config ルールを使用する継続的な発見的統制の実装を検討してください。
- Amazon S3 オブジェクトロックを検討する
-
Amazon S3 オブジェクトロックでは、「Write Once Read Many」(WORM) モデルを使用してオブジェクトを保存できます。Amazon S3 オブジェクトロックは、データの誤った削除や不適切な削除を防ぐのに役立ちます。たとえば、AWS CloudTrail ログを保護するために Amazon S3 オブジェクトロックを使用できます。
- バージョニングを有効にする
-
バージョニングとは、同じバケット内でオブジェクトの複数のバリアントを保持する手段です。バージョニングを使用して、Amazon S3 バケットに格納されたあらゆるオブジェクトのあらゆるバージョンを、格納、取得、復元することができます。バージョニングを使用すれば、意図しないユーザーアクションからもアプリケーション障害からも、簡単に復旧できます。
また、s3-bucket-versioning-enabled マネージド AWS Config ルールを使用する継続的な発見的統制の実装を検討してください。
詳細については、「バージョニングの使用」を参照してください。
- Amazon S3 クロスリージョンレプリケーションを検討する
-
Amazon S3 はデフォルトで地理的に異なる複数のアベイラビリティーゾーンにデータを保存しますが、コンプライアンス要件によっては、さらに離れた場所にデータを保存することが要求される場合があります。クロスリージョンレプリケーション (CRR) は、データを遠く離れた AWS リージョンにレプリケートできるため、そのような要件を満たすのに役立ちます。CRR では、異なる AWS リージョンのバケット間でオブジェクトを自動的に非同期コピーできます。詳細については、「レプリケーション」を参照してください。
注記
CRR では、ソースとターゲットの両方の S3 バケットでバージョニングが有効になっている必要があります。
また、s3-bucket-replication-enabled マネージド AWS Config ルールを使用する継続的な発見的統制の実装を検討してください。
- Amazon S3 アクセス用の VPC エンドポイントを検討する
-
Amazon S3 の VPC エンドポイントは、Amazon S3 のみへの接続を許可する Amazon Virtual Private Cloud (Amazon VPC) 内の論理エンティティです。Amazon S3 バケットポリシーを使用して、特定のエンドポイントまたは特定の Amazon VPC からバケットへのアクセスをコントロールできます。VPC エンドポイントは、トラフィックが潜在的にオープンインターネットを通過してオープンインターネット環境にさらされるのを防ぐのに役立ちます。
Amazon S3 の VPC エンドポイントには、Amazon S3 データへのアクセスをコントラストするために、2 通りの方法が用意されています。
-
特定の VPC エンドポイントを通じて許可されるリクエスト、ユーザー、またはグループを管理できます。
-
S3 バケットポリシーを使用して、S3 バケットへのアクセスが可能な VPC または VPC エンドポイントをコントロールできます。
-
インターネットゲートウェイのない VPC を使用すると、データの流出を防ぐのに役立ちます。
詳細については、「Amazon S3 の VPC エンドポイント用のバケットポリシーの例」を参照してください。
-
Amazon S3 のモニタリングと監査のベストプラクティス
以下の Amazon S3 のベストプラクティスは、潜在的なセキュリティ上の弱点とインシデントを検出するのに役立ちます。
- すべての Amazon S3 バケットを識別して監査する
-
IT アセットの特定はガバナンスとセキュリティの重要な側面です。セキュリティの状態を評価し、潜在的な弱点に対処するには、すべての Amazon S3 リソースを表示する必要があります。
タグエディターを使用してセキュリティまたは監査で注意を要するリソースを識別してから、それらのタグを、リソースを検索する必要があるときに使用します。詳細については、「タグ付けするリソースの検索」を参照してください。
Amazon S3 インベントリを使用して、ビジネス、コンプライアンス、および規制上のニーズに応じて、オブジェクトのレプリケーションと暗号化のステータスを監査し、レポートします。詳細については、「 Amazon S3 インベントリ」を参照してください。
Amazon S3 リソースのリソースグループを作成します。詳細については、「AWS リソースグループとは」を参照してください。
- AWS のモニタリングツールを使用してモニタリングを実装する
-
モニタリングは、Amazon S3 および AWS ソリューションの信頼性、セキュリティ、可用性、パフォーマンスを維持するための重要な部分です。AWS では、AWS の Amazon S3 などのサービスをモニタリングするのに役立ついくつかのツールとサービスを提供しています。たとえば、Amazon S3 の CloudWatch メトリクス、特に
PutRequests、GetRequests、4xxErrors、DeleteRequestsをモニタリングできます。詳細については、「Amazon CloudWatch を使用したメトリクスのモニタリング」を参照してください。詳細については、「Amazon S3 のモニタリング」を参照してください。別の例については、「例: Amazon S3 バケットアクティビティ」を参照してください。この例では、Amazon S3 API コールがバケットのポリシー、バケットのライフサイクル、またはバケットのレプリケーションの PUT または DELETE に対して、あるいはバケットの ACL の PUT に対して行われたときにトリガーされる、Amazon CloudWatch アラームを作成する方法について説明します。
- Amazon S3 のサーバーアクセスログ記録を有効にする
-
サーバーアクセスのログには、バケットに対するリクエストの詳細が記録されます。サーバーアクセスログは、セキュリティやアクセス監査の参考になることがあり、顧客基盤について知り、Amazon S3 の請求を理解するのに役立ちます。サーバーアクセスログ記録を有効にする手順については、「Amazon S3 サーバーアクセスのログ記録」を参照してください。
また、s3-bucket-logging-enabled マネージド AWS Config ルールを使用する継続的な発見的統制の実装を検討してください。
- AWS CloudTrail を使用する
-
AWS CloudTrail では、Amazon S3 でユーザー、ロール、または AWS のサービスによって実行されたアクションのレコードが提供されます。CloudTrail で収集された情報を使用して、Amazon S3 に対するリクエスト、リクエスト元の IP アドレス、リクエスト者、リクエスト日時などの詳細を確認できます。たとえば、データアクセスに影響する Put アクションの CloudTrail エントリ、特に
PutBucketAcl、PutObjectAcl、PutBucketPolicy、PutBucketWebsiteを識別できます。詳細については、「AWS CloudTrail を使用して Amazon S3 API コールのログを記録する」を参照してください。Amazon S3 サーバーアクセスログ記録と組み合わせて CloudTrail を使用することもできます。Amazon S3 サーバーアクセスログ記録は、バケットに対して行われたリクエストのアクセスログを提供しますが、オブジェクトレベルでの API オペレーションの可視性は提供しません。CloudTrail は、Amazon S3 オブジェクトレベルでの API オペレーション (
GetObject、DeleteObject、PutObjectなど) をサポートします。データイベントと呼ばれるこれらのイベントをモニタリングすることで、Amazon S3 オブジェクトを含むオペレーションについて貴重な洞察を得ることができます。詳細については、AWS CloudTrail User Guide の「データイベント」を参照してください。 - AWS Config を有効にする
-
このトピックに示しているベストプラクティスのいくつかでは、AWS Config ルールを作成することを提案しています。AWS Config では、AWS リソースの設定を評価、監査、診断できます。AWS Config では、リソースの設定をモニタリングし、目的とする安全な設定に対して、記録された設定を評価できます。AWS Config を使用すると、AWS リソース間の設定や関連性の変更を確認し、詳細なリソース設定履歴を調べ、社内ガイドラインで指定された設定に対して、全体的なコンプライアンスを確認できます。これにより、コンプライアンス監査、セキュリティ分析、変更管理、運用上のトラブルシューティングを簡素化できます。詳細については、AWS Config 開発者ガイドの「コンソールを使用した AWS Config の設定」を参照してください。記録するリソースタイプを指定するときは、必ず Amazon S3 リソースを含めてください。
パブリックアクセスを許可する Amazon S3 バケットを AWS Config によりモニタリングおよび応答する方法の例については、AWS セキュリティブログの「パブリックアクセスを許可する Amazon S3 バケットを AWS Config によりモニタリングおよび応答する方法」を参照してください。
- Amazon S3 での Amazon Macie の使用を検討する
-
Macie は、機械学習によって AWS 内の機密データを自動的に検出、分類、保護します。Macie では、個人情報 (PII) や知的財産などの機密データが認識されます。ダッシュボードやアラートが提供されるため、データのアクセスや移動状況を確認できます。詳細については、「Amazon Macie とは」を参照してください。
- AWS セキュリティアドバイザリをモニタリングする
-
AWS アカウントについて Trusted Advisor に投稿されたセキュリティ勧告を定期的に確認してください。特に、「オープンアクセス許可」のある Amazon S3 バケットに関する警告に注意してください。 これは、describe-trusted-advisor-checks を使用してプログラムにより行うことができます。
さらに、各 AWS アカウントに登録されているメインの E メールアドレスを積極的にモニタリングしてください。AWS は、この E メールアドレスを使用して、お客様に影響を与える可能性のある新たなセキュリティ問題について連絡します。
広範な影響を与える AWS の運用上の問題は AWSサービスヘルスダッシュボード に投稿されます。運用上の問題は Personal Health Dashboard を介して個々のアカウントにも投稿されます。詳細については、AWS Health のドキュメントを参照してください。