1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[AWS] S3の署名付きURL(有効期限7日間)を発行する手順

Last updated at Posted at 2022-07-15

S3の署名付きURL(S3 Presinged URL)は、S3バケットへのアクセス権限を持たないユーザーに対して一時的なアクセスを許可するために発行するURLです。

コンソールからも作成可能ですが、発行する条件によって有効期限が色々決まっているのが複雑で、意図した有効期限より短くなってしまう場合があります。

  • IAMインスタンスプロファイル: 最長 6時間
  • AWSコンソールで設定可能な時間: 最長 12時間
  • IAMロールの連鎖セッションで発行した場合:最長 12時間(デフォルトは1時間)
  • AWS Security Token Service (STS): IAM ユーザーが署名した場合は最長 36時間、ルートユーザーが署名した場合は最長 1時間
  • IAM ユーザー: 最長 7 日間有効 (AWS 署名バージョン 4 を使用した場合)

今回は、最長の 7日間有効なURLを発行する手順を確認しました。CloudShellに少し設定を加えるのが簡単なようでしたので、そのやり方をまとめました。

1.CloudShellでアクセスキーを設定

CloudShellには認証情報が設定されていますが、そのままだと最長の場合に該当しません。アクセスキーを作成し、aws configureコマンドで追加設定します。

$ aws configure
AWS Access Key ID [******************FU]: <アクセスキーを入力>
AWS Secret Access Key [******************1q]: <シークレットキーを入力>
Default region name [us-east-1]: <リージョンを入力(この場合は何でもよい)>
Default output format [json]: <出力形式(この場合は何でもよい)>

2.スクリプトでURLを発行

AWS 署名バージョン 4 を使用するスクリプトを作成します。ここではスクリプト内で 604800 秒を指定していますが、短くすることももちろん可能です。

generate_presigned_url.py
import sys
import boto3
from botocore.client import Config

args = sys.argv
bucket = args[1]
key = args[2]

# Get the service client with sigv4 configured
s3 = boto3.client('s3', config=Config(signature_version='s3v4'))

# Generate the URL expires in 604800 seconds (seven days)
url = s3.generate_presigned_url(
         ClientMethod='get_object',
         Params={
            'Bucket': bucket,
            'Key': key
         },
         ExpiresIn=604800
)

print(url)

あとはファイルを指定してpython3(CloudShellでboto3インストール済)で実行すればURLが生成できます。

python3 generate_presigned_url.py <バケット名> <オブジェクトキー>

実行例:

$ python3 generate_presigned_url.py dev-test-backet folder/test/public.txt
https://dev-test-backet.s3.amazonaws.com/folder/test/public.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAYSE7XXXXXXXXXXXXXXXX220407%2Fus-east-1%2Fs3%2Faws4_request
&X-Amz-Date=20220407T014221Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXe44d71b78a5

あとは時間経過後にアクセスして、意図した有効期間でURLが生成されていることが確認できます。

参考資料

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?