Amazon Simple Storage Service

【小ネタ】S3で署名付きURLを発行してみた

はじめに

こんにちは、ディーネットの山田です。

Amazon S3バケットのアクションを眺めていたら「署名付きURLで共有」という操作を見つけたので、共有を兼ねて記事にしてみました。

S3の署名付きURLとは

S3の署名付きURL(Pre-signed URL)は、プライベートなS3オブジェクトに対して一時的なアクセス権限を付与するURLです。期限付きでファイルのダウンロードやアップロードができるようになります。

今回は、ダウンロード目的でのみ利用します。

署名付き URL を使用したオブジェクトの共有

AWSマネジメントコンソールで操作してみた

  1. 署名付きURLを発行したい対象のファイルを選択

  1. 「アクション」から「署名付きURLで共有」をクリック

  1. 有効期限を設定(参考例では、30分間の有効期限を設定)

  1. 「署名付きURLを作成」をクリック
  2. クリップボードにコピーされたリンクを展開する

実際には、以下のようなURLがコピーされます

このURLにアクセスすると、S3に保存されているファイルを取得することができます。

https://s3.ap-northeast-1.amazonaws.com/s3signurl-blog-test-20250730/this%20is%20test%20file.txt?response-content-disposition=inline&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEKv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLW5vcnRoZWFzdC0xIkYwRAIgABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901234567890CICabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST0YcIKuMDCNT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMTEVNUExBVEVOVU1CRVIIgwoBPD1RUgNt00h1IkqtwM8d5MRkposfsVYadmx4mblx4fjoAyjJXaeuCIuhfMVWF9CkfxlHD5A%2BhxdCpvkoMQPHIVsPSvTsPfMIrKzcnoNvbhEHGV488nX%2FUvFVQz8WPF%2FazoFI3b6%2BNqFTotMTKnROixlj2%2FFZkHbbzOnJlSi%2Fiof7pAQYOlt17lQ5LWDIjHPh4TxOf5fUa5xvrmyh26VxsZH%2BUdlLJEKhYymxDhHlHorHyZ67lQVukqtdT7T5RPuqFQQHB%2Bapc8pot3S%2F2lbRDtRBwyanPcqZVqXz6p6qEHhQEdMSEubzcIshQzeYK9pcP3vnZ%2B2Y%2Bh1vNx3LALDaeorsTDyZtywWEVyL0UwQDtwhLNl2HIC9rY5bwLgrLZ8UCSCIFP7sNuKC5F%2FbcfCUbvzRnv1o3awQWQLPBcy81Goqsq7fjaZJtHlQpe%2BMN5e9xy%2Babgt3yLaVD5TCWXBN9ZuXwkElwIX9ltzCDcMHXUa9Xxju7oME9RI%2FpmDxRAf9QMubRTdZ9YjoKSUXtP7LhpWlDE3zY%2BbzJeTsEdhuesKy6i8EYuw883Z6UXFwWvy%2BCPJMMJEn6m2DJTQhepCK

実際にcurlでダウンロードしてみる

curlでアクセスすると実際に保存されているファイルの中身を標準出力できました。

$ curl "https://s3.ap-northeast-1.amazonaws.com/s3signurl-blog-test-20250730/this%20is%20test%20file.txt?response-content-disposition=inline&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEKv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLW5vcnRoZWFzdC0xIkYwRAIgABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901234567890CICabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST0YcIKuMDCNT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMTEVNUExBVEVOVU1CRVIIgwoBPD1RUgNt00h1IkqtwM8d5MRkposfsVYadmx4mblx4fjoAyjJXaeuCIuhfMVWF9CkfxlHD5A%2BhxdCpvkoMQPHIVsPSvTsPfMIrKzcnoNvbhEHGV488nX%2FUvFVQz8WPF%2FazoFI3b6%2BNqFTotMTKnROixlj2%2FFZkHbbzOnJlSi%2Fiof7pAQYOlt17lQ5LWDIjHPh4TxOf5fUa5xvrmyh26VxsZH%2BUdlLJEKhYymxDhHlHorHyZ67lQVukqtdT7T5RPuqFQQHB%2Bapc8pot3S%2F2lbRDtRBwyanPcqZVqXz6p6qEHhQEdMSEubzcIshQzeYK9pcP3vnZ%2B2Y%2Bh1vNx3LALDaeorsTDyZtywWEVyL0UwQDtwhLNl2HIC9rY5bwLgrLZ8UCSCIFP7sNuKC5F%2FbcfCUbvzRnv1o3awQWQLPBcy81Goqsq7fjaZJtHlQpe%2BMN5e9xy%2Babgt3yLaVD5TCWXBN9ZuXwkElwIX9ltzCDcMHXUa9Xxju7oME9RI%2FpmDxRAf9QMubRTdZ9YjoKSUXtP7LhpWlDE3zY%2BbzJeTsEdhuesKy6i8EYuw883Z6UXFwWvy%2BCPJMMJEn6m2DJTQhepCK"
this is test file

AWS CLIで操作してみた

  1. AWS CLIで以下のコマンドを実行
$ aws s3 presign "{共有したいオブジェクトのS3 URI}" --expires-in {有効期限}
https://s3.ap-northeast-1.amazonaws.com/s3signurl-blog-test-20250730/this%20is%20test%20file.txt?response-content-disposition=inline&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEKv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLW5vcnRoZWFzdC0xIkYwRAIgABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901234567890CICabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST0YcIKuMDCNT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMTEVNUExBVEVOVU1CRVIIgwoBPD1RUgNt00h1IkqtwM8d5MRkposfsVYadmx4mblx4fjoAyjJXaeuCIuhfMVWF9CkfxlHD5A%2BhxdCpvkoMQPHIVsPSvTsPfMIrKzcnoNvbhEHGV488nX%2FUvFVQz8WPF%2FazoFI3b6%2BNqFTotMTKnROixlj2%2FFZkHbbzOnJlSi%2Fiof7pAQYOlt17lQ5LWDIjHPh4TxOf5fUa5xvrmyh26VxsZH%2BUdlLJEKhYymxDhHlHorHyZ67lQVukqtdT7T5RPuqFQQHB%2Bapc8pot3S%2F2lbRDtRBwyanPcqZVqXz6p6qEHhQEdMSEubzcIshQzeYK9pcP3vnZ%2B2Y%2Bh1vNx3LALDaeorsTDyZtywWEVyL0UwQDtwhLNl2HIC9rY5bwLgrLZ8UCSCIFP7sNuKC5F%2FbcfCUbvzRnv1o3awQWQLPBcy81Goqsq7fjaZJtHlQpe%2BMN5e9xy%2Babgt3yLaVD5TCWXBN9ZuXwkElwIX9ltzCDcMHXUa9Xxju7oME9RI%2FpmDxRAf9QMubRTdZ9YjoKSUXtP7LhpWlDE3zY%2BbzJeTsEdhuesKy6i8EYuw883Z6UXFwWvy%2BCPJMMJEn6m2DJTQhepCK

発行されたURLに実際アクセスする

curlでアクセスすると先ほどと同様に保存されているファイルの中身を標準出力できました。

$ curl "https://s3.ap-northeast-1.amazonaws.com/s3signurl-blog-test-20250730/this%20is%20test%20file.txt?response-content-disposition=inline&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEKv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLW5vcnRoZWFzdC0xIkYwRAIgABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901234567890CICabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST0YcIKuMDCNT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMTEVNUExBVEVOVU1CRVIIgwoBPD1RUgNt00h1IkqtwM8d5MRkposfsVYadmx4mblx4fjoAyjJXaeuCIuhfMVWF9CkfxlHD5A%2BhxdCpvkoMQPHIVsPSvTsPfMIrKzcnoNvbhEHGV488nX%2FUvFVQz8WPF%2FazoFI3b6%2BNqFTotMTKnROixlj2%2FFZkHbbzOnJlSi%2Fiof7pAQYOlt17lQ5LWDIjHPh4TxOf5fUa5xvrmyh26VxsZH%2BUdlLJEKhYymxDhHlHorHyZ67lQVukqtdT7T5RPuqFQQHB%2Bapc8pot3S%2F2lbRDtRBwyanPcqZVqXz6p6qEHhQEdMSEubzcIshQzeYK9pcP3vnZ%2B2Y%2Bh1vNx3LALDaeorsTDyZtywWEVyL0UwQDtwhLNl2HIC9rY5bwLgrLZ8UCSCIFP7sNuKC5F%2FbcfCUbvzRnv1o3awQWQLPBcy81Goqsq7fjaZJtHlQpe%2BMN5e9xy%2Babgt3yLaVD5TCWXBN9ZuXwkElwIX9ltzCDcMHXUa9Xxju7oME9RI%2FpmDxRAf9QMubRTdZ9YjoKSUXtP7LhpWlDE3zY%2BbzJeTsEdhuesKy6i8EYuw883Z6UXFwWvy%2BCPJMMJEn6m2DJTQhepCK"
this is test file

まとめ

  • S3署名付きURLを利用することで、S3バケットに保存されているファイルを簡単に共有することができました。
  • ただ、発行される署名付きURLにはアクセストークンが付与されているので結構長いURLになっています。
  • 実際には、このURLをそのまま利用するのではなくアプリケーションのバックエンドでこっそり使っているのが、無難な使い方ではないでしょうか。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA