MEGAZONEブログ
Amazon S3 security and access control best practices
Amazon S3のセキュリティとアクセス制御のベストプラクティス
Pulisher : Cloud Technology Center キョン・ギョンソン
Description : Amazon S3セキュリティの基本や有用性、機能の最新改善について紹介したセッション
はじめに
Amazon S3は、クラウドのための最も基本的で柔軟性、拡張性、耐久性に優れたオブジェクトストレージサービスです。クラウドにデータを保存し始めると、最も重要な優先順位は、そのデータを保護し、アクセス権限が必要な当事者だけがアクセスでき、他の人はアクセスできないように制御することです。 今回のセッションでは、最も身近なS3について、S3のセキュリティとアクセス制御に関するBPと機能について紹介します。
概要:S3のセキュリティとアクセス制御に関するベストプラクティスについて説明します。
セッションの概要紹介
S3は本当に多様にAWS内のどこにでも存在します。
さまざまな種類のワークロードにさまざまな用途で使用されており、用途によってS3のセキュリティ目標も異なります。
・データレイク:S3の優れたスケーラビリティ、可用性、耐久性は、ビジネスデータレイクを保存するのに適した場所であり、AWSの機械学習と分析サービスやパートナーからより多くの価値を得ることができるという利点があります。
・ログデータ : 高可用性オブジェクトストレージであるS3は、ログを保存し、保管するのに非常に安全で便利な場所です。
・コンテンツ提供用:顧客にコンテンツを提供するのに最適な場所です。メディアコンテンツはもちろん、ウェブサイト、その中に入っているすべての資産についてです。
このセッションで焦点を当てたのは
データが何であれ、どのようなユースケースであれ、この「データ」を保護することです。
基本的にS3のDefaultセキュリティは下記のようになります。
今年1月、すべての新しいオブジェクトと既存のバケットに対して、S3 managed encryption = SSE-S3をデフォルト値として暗号化をリリースしました。 別の暗号化方法を使用しない限り、自動的に適用されます。
4月、すべての新しいs3バケットに対して、パブリックセスのブロックとACLの無効化を有効にするように変更しました。 この変更により、セキュリティ状態を強化し、基本的にバケットを安全に保護することができるようになりました。
S3のアクセスを管理するための様々な方法として、IAMとBucket Policyの2つの方法があります。
他のすべてのAWSサービスと同じように、IAMポリシーを通じてデータへのアクセス権を付与し、バケットは基本的に常にプライベートでした。 したがって、アカウント内でIAMの細分性を活用して、S3への正しいアクセスレベルでユーザーとシステムの両方に異なるIAMの役割を割り当てることができます。
そして、S3にはもう一つ特徴があります。
S3はIAMより5年前の2006年にリリースされたので、IAMより前の方法であるS3 bucket ACL方法です。 これは、ファイルシステムで見ることができる権限とある程度類似性を持つためのもので、今でもコンソールで確認することができますが、今はこの方法を使うことをお勧めせず、上記のIAMとバケットポリシーを使うことをお勧めします。
もちろん、S3バケットを生成すると、この方法は基本的に完全に無効化されるので、特に何もする必要がありませんが、もちろん、4月以前に生成されたバケットの中にはACLがある可能性があるので確認する必要があります。
以前のバケットでACLを通じて制御をした場合、この部分を無効にするため、既存のSethパターンを妨害することなく、つまり、障害が起きないようにするために、まず、ACLに対する可視性を得ることができる2つの方法を案内してくれました。
1つ目はS3 inventoryです。
S3インベントリは、すべてのS3オブジェクトのリストを要求することができるS3の優れた管理機能です。 これはCSVやparquetのような標準形式で提供され、すべてのS3バケットにあるすべてのオブジェクトの全リストを取得する最も効率的な方法です。 これにより、AWS Athenaのようなツールと組み合わせてクエリを通じた可視性を確保し、より簡単に識別することもできます。
そして2つ目は、CloudtrailとS3サーバーのアクセスログに関する情報を通じて可能です。
ログを通じて、特定のアクセスが成功するためにどのような以前のアクセスシステムに依存したかを確認することができ、ログを分析すると、IAMポリシーで変更すべきアクセスパターンのタイプを識別することができます。
参考リンク : https://aws.amazon.com/ko/blogs/storage/disabling-acls-for-existing-amazon-s3-workloads-with-information-in-s3-server-access-logs-and-aws-cloudtrail/
次に、データ保存時の暗号化に関する部分です。
ほとんどの保存使用ケースは下記の2つのケースのいずれかです。
最も一般的なケース:S3にデータを書き込むと、S3が所有・管理するキー(SSE-S3)で暗号化されます。データは保存時に暗号化されます。
少数ケース : データまたは自分が所有して管理するキーに対する第2の権限制御層が必要な場合です。 この場合、AWSキー管理サービスであるKMSを使用して、KMSの独自リソースポリシーとIAMポリシーを通じて、KMSの顧客管理キーであるCMKを使用して暗号化します。
S3暗号化関連SSE-S3、SSE-S3、SSE-KMS、SSE-KMS(CMK)が綺麗に整理された章表です。
基本値なので何かセキュリティーが脆弱だと思うかもしれませんが、特別な要件(追加レベルの権限やキー管理が必要な場合)がない限り、基本SSE-S3を使うのも安全で、使いやすい選択だと感じました。
また、特定の規制や要件があるお客様のデータに対して、複数の層の暗号化を適用する必要がある場合、昨年6月にGAされた上記の機能を使用することもできます。
KMS(DSSE-KMS)に保存された鍵を使用して二重層のサーバー側暗号化を行うことができ、この機能を通じて顧客はデータをS3に送る前にクライアント側暗号化を行う必要がありません。 そのため、データに複数の層の暗号化を適用するための規制要件を満たすことができます。
参考リンク : https://aws.amazon.com/ko/about-aws/whats-new/2023/06/amazon-s3-dual-layer-encryption-compliance-workloads/
オブジェクトの暗号化状態を監査する方法です。
S3 Storage Lensは、ストレージの使用状況とアクティビティを組織全体で可視化し、コスト効率とデータ保護を向上させます。S3コンソールに組み込まれたインタラクティブなダッシュボードは、すべてのアカウントとバケットにわたるS3ストレージの組織全体のビューを提供します。ストレージクラス、バケット、プレフィックスの詳細なビューまで確認することができます。
どのバケットに暗号化されていないデータがあるか、暗号化されていないデータがあるか、または誤った構成のバケットを正確に見つけることができます。
このコンソールキャプチャは、ストレージレンズ機能により、バケットコンテンツの63%に相当する数十万個の暗号化されていないオブジェクトを見つけた例です。
また、KMSリクエストの使用パターンを把握することで、コスト削減にも役立ちます。
S3には、バケット構成方式とバケットアクセス方式について可視性を提供する機能もあります。
AWSアカウントにバケットが多い場合は、意図しないアクセスに対して防止することが難しいです。 このような困難のために提供する機能は次のようなものです。
権限を素早く確認するため、Access Analyserというサービスを使います。このサービスはバケットに対する権限を分析し、publicしたアクセス権限があるバケットと外部アカウントと共有されているバケットを表示する簡単なダッシュボードを提供します。
また、S3 server access logとCloudtrailログを有効にすることで、S3バケットに対するすべてのAPI呼び出しの記録を確認することができます。 どのようなデータにアクセスした人を監査することができます。このようなログは、コンプライアンスやセキュリティ監査に有用であり、ログデータをクエリして分析することで、アクセスパターンに関する洞察を得ることができます。
そして、ワークロードが大きくなって、Accountが多くなって、S3 bucketが多くなると…ポリシーが複雑になるしかありません。
Bucket policyについて、条件が多くなればなるほど当然メンテナンスが難しくなります。
このため、S3 access pointという機能を使ってS3 bucket policyをもっと簡単かつ簡単に拡張管理することができ、単純化することができます。S3 access pointはS3バケットに対する追加エンドポイントであり、バケットポリシーと一緒に評価される独自のIAMポリシーを持ちます。 そのため、IAMポリシーを評価し、維持管理が難しくなる長いバケットポリシーの必要性をなくすことができます。
これにより、S3でプレフィックスを使用することができ、プレフィックスごとに、またはユースケースごとにアクセス権を付与するシンプルで拡張性の高い方法を提供し、それぞれを個別に管理することができます。
また、ここで注目すべき部分は、ディレクトリのグループとユーザーに権限を付与することができます。これにより、AD、Ockta、AWS IAM Identity Centerなどのプロバイダーサービスのエンティティに直接権限を付与し、そのエンティティとしてデータに直接アクセスするアプリケーションを持つことができます。
セッションを終えて
AWSを初めて使う時、IAMは必須であり、非常にアクセス性が高いです。何か簡単だと感じる方が多いですが、AWSを長く使っていると、特にIAMが一番難しいと感じることがよくあり、何人かの方もその言葉に同意する方が多いです。
S3も同様に簡単でシンプルに使えるし、どこにでも使えるので多くの方が愛用しているサービスです。しかし、それだけ油断してセキュリティ事故も多く起こるサービスです。
セキュリティの始まりはIAMからだと思う者として、改めて権限に対する重要性を感じ、また、最も重要なデータの保管場所であるS3のセキュリティBPについてもう少しディープダイブで勉強することができる機会であり、これにより、今後、より安全で細分化されたポリシーを反映してサポートすることができそうです。