S3バケットへのアクセスはHTTPSのみに限定


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

現状ほとんどの場合はHTTPSを利用してS3バケットをアクセスしています。ただし、セキュリティの考慮で強制的にS3バケットに対してHTTPSのみ許可する要望があると思うので、今回はS3バケットへのアクセスはHTTPSのみに限定する方法をご照会します。

設定方法

デフォルトでは、S3バケットに対するリクエストはHTTPとHTTPS両方許可しています。HTTPSのみに限定するには、S3バケットにポリシーにHTTPS以外のリクエストを明示的に拒否するポリシーを設定することで実現できます。ポリシーの設定イメージは以下となります。

{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSSLRequestsOnly",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      },
      "Principal": "*"
    }
  ]
}

検証してみる

S3バケットを作成し、上記のバケットポリシーを設定します。

aws cliを利用してテストファイルをS3バケットにアップロードします。

aws cliはデフォルトでHTTPSを利用しているので、HTTPSを利用して正常にアクセスできました。S3バケットにアップロードしたファイルは以下です。

aws cliはデフォルトでHTTPSを利用していることで、HTTPプロトコルを利用したい場合、エンドポイントURLにHTTPを使用すると明示的に指定する必要があります。

HTTPを利用すると、アクセス拒否されたというエラーが発生しました。

纏め

設定は簡単ですが、すごく有用な設定だと思います。クラウドを利用する場合、より安全なサービスを提供するため、セキュリティ面もちゃんと設計しないといけないと思います。皆さんのセキュリティ設計に少しお役に立てば幸いです。

Last modified: 2022-08-21

Author