Skip to content

署名付きURL

署名付きURLは、期限付きの認証情報を埋め込んだURLです。署名付きURLを作成し他の利用者に共有することで、その利用者はオブジェクトにアクセス可能となります。このため署名付きURL機能では公開オブジェクトを作ることなく、URLを共有するのみで多数の利用者に期限付きでオブジェクトを公開することが可能です。

利用方法

署名付きURLは以下のコマンドで作成可能です。

aws [options] s3 presign <s3 object path> [--expires-in <expiration time (seconds)>] 

<s3 object path>には対象とするオブジェクトを指定し、[--expires-in <expiration time (seconds)>] には有効期限を秒単位で指定します。[--expires-in]オプションを省略した場合は、3600秒(1時間)がデフォルト値として使用されます。

署名付きURLの有効期限は署名モデルのバージョンにより違いがあります。 署名モデルにSignature Version 4(SigV4)を用いる場合、有効期限は最大7日間まで設定可能です。 署名モデルにSignature Version 2(SigV2)を用いる場合、有効期限に制限がつきません。そのためSigV2による署名付きURLの使用は推奨されません。

インタラクティブノード、計算ノードで署名モデルにSigV4を指定する方法については、SigV4署名モデルの利用方法をご参照ください。

実行例

この例では、'bucket-test' というバケットに存在する、'file01.txt'というオブジェクトについて署名付きURLを作成します。

[username01@login1 ~]$ aws --endpoint-url https://s3.v3.abci.ai s3 cp s3://bucket-test/file01.txt -
This is file01.txt!

このオブジェクトについて、300秒を期限とした署名付きURLを作成する場合は以下のコマンドを実行します。

[username01@login1 ~]$ aws --endpoint-url https://s3.v3.abci.ai s3 presign s3://bucket-test/file01.txt --expires-in 300
https://s3.v3.abci.ai/bucket-test/file01.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA0831D7894EXAMPLE%2F20260424%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Date=20260424T095758Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=6ea03f5ab4d56c170fe34f02742737c659edda1138057a3ff8b529aafeb2bd85

以下の様に出力された署名付きURLにアクセスすることで他の利用者からもアクセスが可能となります。

[username02@login1 ~]$ curl "https://s3.v3.abci.ai/bucket-test/file01.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA0831D7894EXAMPLE%2F20260424%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Date=20260424T095758Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=6ea03f5ab4d56c170fe34f02742737c659edda1138057a3ff8b529aafeb2bd85"
This is file01.txt!

期限が過ぎた署名付きURLについては、以下の様にアクセスができません。

[username02@login1 ~]$ curl "https://s3.v3.abci.ai/bucket-test/file01.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA0831D7894EXAMPLE%2F20260424%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Date=20260424T095758Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signature=6ea03f5ab4d56c170fe34f02742737c659edda1138057a3ff8b529aafeb2bd85"
<?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message>Request has expired</Message><X-Amz-Expires>300</X-Amz-Expires><Expires>20260424T100258Z</Expires><ServerTime>20260424T101020Z</ServerTime><RequestId>02FC36C3BEF80B19</RequestId><HostId>00000000000000000</HostId></Error>

作成した署名付きURLは、有効期限が切れるまで直接無効化することはできません。共有後に署名付きURLでのアクセスを停止したい場合は、各種操作をご参照の上、対象オブジェクトを削除するか、名前を変更することで署名付きURLの無効化を行ってください。

SigV4署名モデルの利用方法

ここでは、署名モデルにSigV4を指定する方法について説明します。以下の設定を行うことで、defaultのプロファイルに対して署名モデルとしてSigV4を指定することが可能です。

[username@login1 ~]$ aws configure set default.s3.signature_version s3v4

この設定を行うことにより、~/.aws/configに以下の設定が追記されます。

[default]
region = ap-northeast-1
...
s3 =
    signature_version = s3v4

特定のプロファイルyour_profile_nameに対して設定を行う場合は以下を実行します。

[username@login1 ~]$ aws configure set profile.your_profile_name.s3.signature_version s3v4

署名モデルにSigV4を用いている場合、署名付きURLの有効期限は最大7日間までに制限されます。

[username@login1 ~]$ aws --endpoint-url https://s3.v3.abci.ai s3 presign s3://bucket-test/file01.txt --expires-in 864000
https://s3.v3.abci.ai/bucket-test/file01.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA0831D7894EXAMPLE%2F20260422%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Date=20260422T014521Z&X-Amz-Expires=864000&X-Amz-SignedHeaders=host&X-Amz-Signature=b0eab4fca0a373105e353fc9aac819a52277e2f7e8220e368464d4527c45c36a
[username@login1 ~]$ curl "https://s3.v3.abci.ai/bucket-test/file01.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA0831D7894EXAMPLE%2F20260422%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Date=20260422T014521Z&X-Amz-Expires=864000&X-Amz-SignedHeaders=host&X-Amz-Signature=b0eab4fca0a373105e353fc9aac819a52277e2f7e8220e368464d4527c45c36a"
<?xml version="1.0" encoding="UTF-8"?><Error><Code>AuthorizationQueryParametersError</Code><Message>X-Amz-Expires must be less than a week (in seconds); that is, the given X-Amz-Expires must be less than 604800 seconds</Message><RequestId>71E66D9EB2DD1C9E</RequestId><HostId>00000000000000000</HostId></Error>