Kanji
・クラウドエンジニア / フリーランス ・1993年生まれ ・愛媛県出身 / 東京都渋谷区在住 ・AWS歴5年 プロフィールの詳細
目次
Amazon S3(Simple Storage Service)は、 スケーラブルで高耐久なオブジェクトストレージサービス です。 データの保存・取得・管理が容易で、バックアップ、アーカイブ、データレイクなど幅広い用途に利用できます。
Amazon Simple Storage Service (Amazon S3) は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。 あらゆる規模や業界のお客様が、Amazon S3 を使用して、データレイク、ウェブサイト、モバイルアプリケーション、バックアップおよび復元、アーカイブ、エンタープライズアプリケーション、IoT デバイス、ビッグデータ分析など、広範なユースケースのデータを容量にかかわらず、保存して保護することができます。 Amazon S3 には、特定のビジネス、組織、コンプライアンスの要件を満たすために、データへのアクセスを最適化、整理、設定できる管理機能があります。 Amazon S3 とは - AWS ドキュメント
Amazon Simple Storage Service (Amazon S3) は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。 あらゆる規模や業界のお客様が、Amazon S3 を使用して、データレイク、ウェブサイト、モバイルアプリケーション、バックアップおよび復元、アーカイブ、エンタープライズアプリケーション、IoT デバイス、ビッグデータ分析など、広範なユースケースのデータを容量にかかわらず、保存して保護することができます。 Amazon S3 には、特定のビジネス、組織、コンプライアンスの要件を満たすために、データへのアクセスを最適化、整理、設定できる管理機能があります。
AWS で環境を構築する上でどのようなデータが発生し、どのように保管するかを検討します。 例えば、以下のようなデータが考えられます。
EC2 のみを利用するシステムを構築する場合、EBS ボリュームにデータを保存することがまず考えられますが、 長期的なデータ保管や高可用性を求める場合は、S3 に保存することでコスト効率や耐障害性を向上させることができます。 ただし、OS 内と比較してアクセス速度が遅くなるため、頻繁にアクセスするデータは EBS に保存し、アーカイブやバックアップなどの長期保管が必要なデータは S3 に保存することを検討します。
「ログデータ」として、以下の AWS サービスでは S3 バケットを出力先として利用できます。 CloudTrail はどの AWS アカウントでも長期保管することが推奨されており、S3 バケットに保存することで、後からの監査や分析が容易になります。
データの重要度や機密性に応じて分類します。例えば、以下のような分類が考えられます。 ここで分類したそれぞれのデータの種類に応じて、適切なアクセス制御や暗号化を検討します。
必要に応じて、データの分類は更に細分化して整理します。 例えば、一般データに含まれるログは、更に「監査ログ」「業務ログ」「システムログ」などに分類できます。 「公開データ」も公開している範囲に応じて「社内向け」「パートナー向け」「一般公開」などに分類できます。
データの分類に応じて、適切なアクセス制御を設定します。 S3 バケットにおけるアクセス制御は、以下の方法で行います。
それぞれの制御方針について、以下のように検討します。
IAM ポリシーを使用して、S3 バケットへのアクセス権限を制御します。 IAM ポリシーは、ユーザーやロールに対して、S3 バケットへのアクセス権限を付与するためのものです。
IAM ポリシーでバケット名毎に制御すると、バケットの数が増えると管理が煩雑になるため、KMS 暗号化と組み合わせて制御いたします。 「① データの分類」で分類したデータを暗号化した例は以下の通りです。
暗号化することで、AWS 管理ポリシーの「ReadOnlyAccess」などの読み取り専用ポリシーを付与しても、KMS キーのアクセス権限がないため、データの内容を参照できません。 また、IAM ポリシーで KMS キーへのアクセス権限を制御することで、特定のユーザーやロールに対してのみデータの復号化を許可することができます。
VPC エンドポイントポリシーを使用して、特定の S3 バケットへのアクセスを制限します。 VPC エンドポイントポリシーも IAM ポリシーと同様で、バケット名毎に制御すると管理が煩雑になってしまう課題があります。 そのため、VPC エンドポイントポリシーでは、特定の AWS アカウントや組織に対して、S3 バケットへのアクセスを制限することを検討します。 これにより、データの持ち出し、持ち込みを制限し、セキュリティを向上させることができます。
例えば、以下のような VPC エンドポイントポリシーを設定することで、特定の組織に対してのみ S3 バケットへのアクセスを許可します。 SSM エージェントや AWS Systems Manager のパッチマネージャーなど、AWS が管理する S3 バケットへのアクセスは追加で許可します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOnlyOrgAccess", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": [ "o-xxxxxxx", ], "aws:ResourceOrgID": [ "o-xxxxxxx" ] } } }, { "Sid": "AllowAWSManagedBuckets", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": [ "arn:aws:s3:::al2023-repos-ap-northeast-1-de612dc2/*", "arn:aws:s3:::aws-windows-downloads-ap-northeast-1/*", "arn:aws:s3:::amazon-ssm-ap-northeast-1/*", "arn:aws:s3:::aws-ssm-ap-northeast-1/*", "arn:aws:s3:::patch-baseline-snapshot-ap-northeast-1/*", "arn:aws:s3:::aws-patch-manager-ap-northeast-1-552881074/*", "arn:aws:s3:::aws-patchmanager-macos-ap-northeast-1-552881074/*" ] } ] }
バケットポリシーを使用して、S3 バケットへのアクセスを制御します。 基本的にバケットポリシーは Allow ルールを定義しない限り、バケットを作成した AWS アカウントのみにアクセスが許可されます。 Allow ルールを定義することで、バケットを作成した AWS アカウント以外のユーザーやロール、AWS サービスに対して、S3 バケットへのアクセスを許可することができます。 必要以上に許可してしまうと、セキュリティリスクが高まるため、最小限のアクセス権限を付与することが重要です。
Security Hub のコントロールでバケットポリシーに関するコントロールが定義されており、以下のようなルールが推奨されています。
[S3.5] S3 汎用バケットではリクエストに SSL を使用する必要があります。 [S3.6] S3 汎用バケットポリシーは、他の AWS アカウントへのアクセスを制限する必要があります。
1番目のルールは、S3 バケットへのリクエストに SSL を利用していない場合に通信を拒否するバケットポリシーを設定することを推奨しています。 以下のようなバケットポリシーを設定することで、SSL を利用しないリクエストを拒否することができます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireSSL", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::example-bucket/*", "Condition": { "Bool": { "aws:SecureTransport": "false" } } } ] }
バケット ACL(Access Control List)を使用して、S3 バケットへのアクセスを制御することができます。 ただし、以下に記載の通りバケット ACL は推奨されておらず、IAM ポリシーやバケットポリシーを使用してアクセス制御を行うことが推奨されています。
Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっています。 そのため、オブジェクトごとに個別にアクセスを制御する必要がある異常な状況を除き、ACL を無効にしておくことをお勧めします。ACL を無効にすると、バケット内のオブジェクトをアップロードしたユーザーに関係なく、ポリシーを使用してバケット内のすべてのオブジェクトへのアクセスをより簡単に制御できます。
オブジェクトの所有権の制御とバケットの ACL の無効化。 - Amazon Simple Storage Service
利用する機会がないため、バケット ACL に関する解説は割愛します。
KMS(Key Management Service)を使用して、S3 バケット内のデータを暗号化します。 KMS キーで暗号化されたデータは、KMS キーのポリシーによってアクセス制御が行われます。 また、「1. IAM ポリシー」でも前述したように、IAM ポリシーを使用して KMS キーへのアクセス権限を制御することで、バケット内のデータへのアクセスを制限することができます。 再掲となりますが、以下のようにデータの分類に応じて KMS キーを設定します。
SSE-S3(S3 標準暗号化)は、S3 が提供するサーバーサイドの暗号化で、データを自動的に暗号化します。 無償で利用ができますが、IAM ポリシーや KMS キーのポリシーでアクセス制御を行うことはできません。 アクセス制御が必要出ない場合には、SSE-S3 を利用することで、手軽にデータの暗号化を行うことができます。