S3バケットへの安全なアクセス方法を解説!S3バケットのデータ保護方法を紹介します😎

S3バケットへの安全なアクセス方法を解説!S3バケットのデータ保護方法を紹介します😎

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

今回は、私たちが普段使用している Amazon S3 バケット内のデータを安全に保護する方法について紹介します!

Amazon S3 のセキュリティベストプラクティスに沿った内容となりますので、Amazon S3 を使用するなら必見です!

想定する読者

  • Amazon S3 バケット内のデータを保護する方法について知りたいヒト
  • Amazon S3 バケットへのアクセスについて知りたいヒト

はじめに

本記事で紹介する Amazon S3 のセキュリティベストプラクティスについて

AWS のストレージサービス「Amazon S3(Amazon Simple Storage Service)」では、下記のようなセキュリティに関するベストプラクティスを公開しています。(関連記事:Amazon S3 のセキュリティベストプラクティス

  • Amazon S3 の予防的セキュリティのベストプラクティス
  • Amazon S3 のモニタリングと監査のベストプラクティス

本記事では Amazon S3 が公開する2つのセキュリティベストプラクティスと私たちが開発時に意識している内容も含め、Amazon S3 バケット内のデータ保護方法について考えていきます。

予防的セキュリティ

まずは、セキュリティ問題の防止に役立つ「予防的セキュリティ」の方法について考えます。

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 を使用する場合は下記の点に注意しながら、アクセス制限を検討しましょう。

  • 読み取りを全員に許可する前は、ユースケースを検討する
  • 書き込みアクセスを全員や Authenticated AWS user グループ( AWS アカウントを持つすべてのユーザー)に許可しない

例として、下記オブジェクトについては読み取り・書き込みがバケット所有者のみに適用しています。

Amazon S3 データを監視する

Amazon S3 データへのアクセスを監視することで、セキュリティ問題を未然に防ぐ方法です。ログを有効にし、S3 のリソースを監視するには、次の方法があります。

  • AWS CloudTrail ログを設定する
  • Amazon S3 サーバーアクセスログを有効にする
  • AWS Config で ACL やバケットポリシーを監視する
  • AWS IAM Access Analyzer で外部から S3 へのアクセス権を付与するバケットポリシー・IAM ポリシーを監視する
  • Amazon Macie でバケットのデータやアクセス、暗号化されていないバケットの識別を自動化する
  • AWS Trusted Advisor の Amazon S3 バケットのアクセス許可チェックを使用する(ビジネスまたはエンタープライズサポートプランがある場合)

データの暗号化

保管時のデータを暗号化

保管時のデータを保護する際は、サーバー側とクライアント側の暗号化を使用できます。サーバー側の暗号化(SSE)オプションには、下記が存在します。

  • Amazon S3 が管理するキーによる暗号化(SSE-S3)
  • AWS Key Management Service に保存されているカスタマーマスターキーによる暗号化(SSE-KMS)
  • お客様が指定したキーによる暗号化 (SSE-C)

SSE-S3 や SSE-KMS を使用して、バケットでデフォルトの暗号化を有効にすることもできます。

(関連記事:Actions – AWS Key Management Service(KMS の API ドキュメント))

クライアント側での暗号化では、下記のオプションが存在します。

  • AWS KMS に保存されている CMK(カスタマーマスターキー)
  • アプリケーション内に保存したマスターキー

転送時のデータを暗号化

Amazon S3 間で送受信されるデータを暗号化する HTTPS プロトコルを使用しましょう。バケットポリシーにて HTTPS を介した接続のみ許可する設定を行えば、悪意のあるユーザーからの盗聴や操作を防止できます。

なお、サードパーティ製のツールを使用して Amazon S3 とやり取りする場合は、ツール側も HTTPS プロトコルをサポートしているかを確認してください。

モニタリングと監査

次に、潜在的なセキュリティ上の弱点やインシデントを検出するベストプラクティスを紹介します。

Amazon S3 バケットを特定監査

セキュリティの確認やインシデントを検出をするなら、まずはすべての Amazon S3 リソースが見える状態にしておきましょう。具体的には、下記のような方法で対応が可能です。

  • タグエディターを使用してリソースにタグを付与し、リソースを監査する
  • Amazon S3 インベントリを使用して、データのレプリケーションと暗号化のステータスを監査する
  • Amazon S3 リソースのリソースグループを作成する

上記について、実際の設定・操作方法を紹介します。

タグエディターを使用してリソースにタグを付与し、リソースを監査する

まずは AWS Management Console にサインインし、タグエディターを開きます。

ここでは、リソースのリージョンやタイプ、タグでリソースを検索することができます。今回は「us-east-1」リージョン・「All supported resource types」で検索をかけました。リソースの検索結果は、下記のとおりです。

ここからは、特定のリソースにタグを付与していきます。まずは「リソースの検索結果」から、タグ付けするリソースを選択してください。選択できたら、オレンジ色の「選択したリソースのタグを管理する」ボタンを押下します。

「タグを管理」画面に遷移しますので、表示されているリソースに付与したいタグの「タグキー」、「タグ値」を入力します。タグは複数付与することも可能です。入力が終わったら、右下の「タグの変更を確認して適用する」ボタンを押下します。

処理が終了したら、「タグエディタ」画面に遷移します。先ほど登録したタグでリソースを検索し、タグを付与したリソースが表示されたら成功です。このようにタグエディタでリソースにタグを付与することで、リソースを管理・監査できます。

Amazon S3 インベントリを使用して、データのレプリケーションと暗号化のステータスを監査する

まずは、Amazon S3 のコンソール画面を開きます。「バケット」の一覧から、監査対象のバケットを選択してください。

選択したバケットの詳細画面に移りますので、「オブジェクト」の一覧から監査対象のオブジェクトのディレクトリを選択します。

該当オブジェクトの詳細画面に遷移し、オブジェクトの情報を確認できます。

レプリケーションのステータスは、「プロパティ」タブ>「オブジェクト管理の概要」見出しから確認できます。

暗号化のステータスは、「プロパティ」タブ>「サーバー側の暗号化設定」見出しから確認・編集できます。

Amazon S3 リソースのリソースグループを作成する

AWS Resource Groupsconsole にアクセスし、「リソースグループの作成」を選択します。

作成するリソースグループの情報を入力します。グループのタイプは、リソースタイプやタグに基づいた「タグベース」と、既存の CloudFormation スタックに基づいた「CloudFormation スタックベース」の2種類から選べます。

グループ分けの条件、グループの詳細等、必要項目を入力します。「グループ分けの条件」見出しの「グループリソースをプレビュー」ボタンからは、実際にグループ分けをした際に含まれるリソースを確認することができます。

グループの詳細画面に遷移したら、グループの作成は完了です。グループ分けの条件や、含まれるリソースを確認することができます。

まとめ

以上、Amazon S3 バケットのデータ保護方法を紹介しました。Amazon S3 のセキュリティベストプラクティスをもとにセキュリティ対策を万全に行い、 Amazon S3 バケット内のデータを安全に保護しましょう。

堅牢な AWS 開発は、私たちにお気軽にお問い合わせください。