【Security Hub修復手順】[S3.5] S3 バケットでは、Secure Socket Layer を使用するためのリクエストの要求が必要です。

AWS SecurityHub 基礎セキュリティのベストプラクティスコントロール修復手順をご紹介します。
2023.04.20

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

こんにちは、AWS事業本部の平井です。

皆さん、お使いのAWS環境のセキュリティチェックはしていますか?

当エントリでは、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介します。

本記事の対象コントロール

[S3.5] S3 バケットでは、Secure Socket Layer を使用するためのリクエストの要求が必要です。

[S3.5] S3 buckets should require requests to use Secure Socket Layer

前提条件

本記事はAWS Security Hubで「AWS基礎セキュリティのベストプラクティススタンダード」を利用されている方向けの内容です。 AWS Security Hubの詳細についてはこちらのブログをご覧ください。

対象コントロールの説明

対象コントロールは、S3 バケットのポリシーで、リクエストにSecure Socket Layer (SSL) の使用が必要とされているかどうかをチェックします。

S3 バケットには、バケットポリシーに条件キーaws:SecureTransportを設定することで、SSL 経由のデータ送信のみを受け入れる設定ができます。

ただし、SSLを強制するためのバケットポリシーを全バケットに設定する必要があるため、運用が大変になります。

この設定をしていなくても、ほとんどのCLI/SDKではデフォルトでSSL通信を使用しますので、必須ではありません。

重要な情報が入るバケットに対してはSSLを強制する設定を入れる方針でもよいです。

修正手順

1 ステークホルダーに確認

ステークホルダー(リソースの作成者や管理している部署などの関係者)に以下を確認します。

  • バケットポリシーにSSLの強制を適用してよいか
    • しない場合、抑制済みにします

2 S3のバケットポリシーを設定

  1. 対象のバケットの[アクセス許可]からバケットのポリシーの[編集]をクリックします。
  2. バケットポリシーに下記を加えるのみです。ソースは、こちらです
    {
        "Id": "ExamplePolicy",
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AllowSSLRequestsOnly",
                "Action": "s3:*",
                "Effect": "Deny",
                "Resource": [
                    "arn:aws:s3:::<バケット名>",
                    "arn:aws:s3:::<バケット名>/*"
                ],
                "Condition": {
                    "Bool": {
                         "aws:SecureTransport": "false"
                    }
                },
               "Principal": "*"
            }
        ]
    }

3 HTTP通信でアクセスしてみる

バケットポリシーを設定したS3バケットに、HTTPS通信ではなくHTTP通信のリクエストは、拒否されるか確認します。

今回は、CloudShellでCLIを実行します。

まず、HTTPS通信から確認します。

--endpoint-urlをつけることで、リクエストを送信するURLをHTTPSに指定します。

$ aws s3 ls s3://<バケット名>/ --endpoint-url https://s3.ap-northeast-1.amazonaws.com

                           PRE AWSLogs/
2023-02-10 08:29:11       2300 150x150-test.png

問題なく、バケット内を確認することができました。

続いて、HTTP通信で確認します。

--endpoint-urlで、リクエストを送信するURLをHTTPに指定します。

$ aws s3 ls s3://<バケット名>/ --endpoint-url http://s3.ap-northeast-1.amazonaws.com

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

バケットポリシーで設定した通り、拒否されることが確認できました。

参考

最後に

今回は、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介しました。

コントロールを修正して、お使いのAWS環境のセキュリティをパワーアップさせましょう!

最後までお読みいただきありがとうございました!どなたかのお役に立てれば幸いです。

以上、平井でした!