こんにちは!
今回は、私たちが普段使用している Amazon S3 バケット内のデータを安全に保護する方法について紹介します!
Amazon S3 のセキュリティベストプラクティスに沿った内容となりますので、Amazon S3 を使用するなら必見です!
AWS のストレージサービス「Amazon S3(Amazon Simple Storage Service)」では、下記のようなセキュリティに関するベストプラクティスを公開しています。(関連記事:Amazon S3 のセキュリティベストプラクティス)
本記事では Amazon S3 が公開する2つのセキュリティベストプラクティスと私たちが開発時に意識している内容も含め、Amazon S3 バケット内のデータ保護方法について考えていきます。
まずは、セキュリティ問題の防止に役立つ「予防的セキュリティ」の方法について考えます。
Amazon S3 へのアクセスに伴うセキュリティリスク(悪意のあるアクセス)を未然に防ぐのに有効なのが、アクセス制限です。私たちは通常 Amazon S3 へのアクセスを行う際、アクセス権限(IAM Role / STSトークン / バケットポリシー)を最小限の範囲にとどめることで、セキュリティリスクを削減しています。
なお、IAM ユーザーポリシーでアクセスが許可されているユーザーであっても、バケットポリシーで許可されていなければ該当の Amazon S3 にアクセスすることはできません。
下記は、バケットポリシーのポリシードキュメントの例です。(引用:Amazon S3|バケットポリシー)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSConfigBucketPermissionsCheck",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::config-bucket-141622253470"
},
{
"Sid": "AWSConfigBucketExistenceCheck",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::config-bucket-141622253470"
},
{
"Sid": "AWSConfigBucketDelivery",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::config-bucket-141622253470/AWSLogs/141622253470/Config/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
また、ACL を使用する場合は下記の点に注意しながら、アクセス制限を検討しましょう。
例として、下記オブジェクトについては読み取り・書き込みがバケット所有者のみに適用しています。
Amazon S3 データへのアクセスを監視することで、セキュリティ問題を未然に防ぐ方法です。ログを有効にし、S3 のリソースを監視するには、次の方法があります。
保管時のデータを保護する際は、サーバー側とクライアント側の暗号化を使用できます。サーバー側の暗号化(SSE)オプションには、下記が存在します。
SSE-S3 や SSE-KMS を使用して、バケットでデフォルトの暗号化を有効にすることもできます。
(関連記事:Actions – AWS Key Management Service(KMS の API ドキュメント))
クライアント側での暗号化では、下記のオプションが存在します。
Amazon S3 間で送受信されるデータを暗号化する HTTPS プロトコルを使用しましょう。バケットポリシーにて HTTPS を介した接続のみ許可する設定を行えば、悪意のあるユーザーからの盗聴や操作を防止できます。
なお、サードパーティ製のツールを使用して Amazon S3 とやり取りする場合は、ツール側も HTTPS プロトコルをサポートしているかを確認してください。
次に、潜在的なセキュリティ上の弱点やインシデントを検出するベストプラクティスを紹介します。
セキュリティの確認やインシデントを検出をするなら、まずはすべての Amazon S3 リソースが見える状態にしておきましょう。具体的には、下記のような方法で対応が可能です。
上記について、実際の設定・操作方法を紹介します。
まずは AWS Management Console にサインインし、タグエディターを開きます。
ここでは、リソースのリージョンやタイプ、タグでリソースを検索することができます。今回は「us-east-1」リージョン・「All supported resource types」で検索をかけました。リソースの検索結果は、下記のとおりです。
ここからは、特定のリソースにタグを付与していきます。まずは「リソースの検索結果」から、タグ付けするリソースを選択してください。選択できたら、オレンジ色の「選択したリソースのタグを管理する」ボタンを押下します。
「タグを管理」画面に遷移しますので、表示されているリソースに付与したいタグの「タグキー」、「タグ値」を入力します。タグは複数付与することも可能です。入力が終わったら、右下の「タグの変更を確認して適用する」ボタンを押下します。
処理が終了したら、「タグエディタ」画面に遷移します。先ほど登録したタグでリソースを検索し、タグを付与したリソースが表示されたら成功です。このようにタグエディタでリソースにタグを付与することで、リソースを管理・監査できます。
まずは、Amazon S3 のコンソール画面を開きます。「バケット」の一覧から、監査対象のバケットを選択してください。
選択したバケットの詳細画面に移りますので、「オブジェクト」の一覧から監査対象のオブジェクトのディレクトリを選択します。
該当オブジェクトの詳細画面に遷移し、オブジェクトの情報を確認できます。
レプリケーションのステータスは、「プロパティ」タブ>「オブジェクト管理の概要」見出しから確認できます。
暗号化のステータスは、「プロパティ」タブ>「サーバー側の暗号化設定」見出しから確認・編集できます。
AWS Resource Groupsconsole にアクセスし、「リソースグループの作成」を選択します。
作成するリソースグループの情報を入力します。グループのタイプは、リソースタイプやタグに基づいた「タグベース」と、既存の CloudFormation スタックに基づいた「CloudFormation スタックベース」の2種類から選べます。
グループ分けの条件、グループの詳細等、必要項目を入力します。「グループ分けの条件」見出しの「グループリソースをプレビュー」ボタンからは、実際にグループ分けをした際に含まれるリソースを確認することができます。
グループの詳細画面に遷移したら、グループの作成は完了です。グループ分けの条件や、含まれるリソースを確認することができます。
以上、Amazon S3 バケットのデータ保護方法を紹介しました。Amazon S3 のセキュリティベストプラクティスをもとにセキュリティ対策を万全に行い、 Amazon S3 バケット内のデータを安全に保護しましょう。
堅牢な AWS 開発は、私たちにお気軽にお問い合わせください。
スモールスタート開発支援、サーバーレス・NoSQLのことなら
ラーゲイトまでご相談ください
低コスト、サーバーレスの
モダナイズ開発をご検討なら
下請け対応可能
Sler企業様からの依頼も歓迎