[小ネタ]S3の署名付きURLのダウンロードをIPアドレスで制限できないか試してみた

S3署名付きURLによるダウンロードをIPアドレスで制限することができます。
2023.02.28

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

こんにちは!コンサル部のinomaso(@inomasosan)です。

S3の署名付きURLを使用すると、プライベートなオブジェクトかバケットへのアップロードかダウンロードが可能になります。
よくあるユースケースとしてファイルの配布等が思いつくのですが、URLを知られると誰でもファイルにアクセスできてしまいます。

そこで今回は、署名付きURLのダウンロードでIPアドレス制限可能なのかを試してみました。

最初にまとめ

  • バケットポリシーでIPアクセス制限することで、署名付きURLでも特定のIPアドレスのみダウンロードさせることが可能。

やってみた

S3バケットポリシー設定

まずはデフォルトの設定で空のS3バケットを作成し、検証用のファイルをアップロードしておきます。

作成したS3バケットをクリックし、アクセス許可タブのバケットポリシー編集ボタンをクリックします。

ポリシーの入力画面が開いたら以下のポリシーを入力します。
{バケット名}は先ほど作成したS3バケット名を、{IPアドレス(CIDR表記)}にはダウンロードを許可するIPアドレスに変更してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{バケット名}/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "{IPアドレス(CIDR表記)}>"
                }
            }
        }
    ]
}

署名付きURLでのダウンロード検証

AWSマネジメントコンソールで簡単にダウンロード用の署名付きURLを作成できるため、以下を参考にURLを生成します。

まずは、先ほどバケットポリシーで許可したIPアドレスでダウンロードできるか試してみました。 結果として特に問題なくダウンロードできたことを確認できました。

次に許可していないIPアドレスからのダウンロードの挙動を確認していきます。
結果はAccessDeniedということで、許可していないIPアドレスからはダウンロードできないことを確認できました。

参考

まとめ

S3署名付きURLによるダウンロードをIPアドレスで制限できるのか気になったので、簡単に検証してみました。

この記事が、どなたかのお役に立てば幸いです。それでは!