投稿

ラベル(boto3)が付いた投稿を表示しています

S3 署名付きURL(Presigned URL)の生成方法:1時間の有効期限で非公開ファイルへの一時アクセスを付与する

非公開のS3バケットに保存されたファイルを、認証なしのユーザーに一時的にダウンロードさせたい場面は頻繁に発生する。IAMユーザーを発行するわけにもいかず、バケットをパブリックにするのは論外だ。そこで使うのがS3署名付きURL(Presigned URL)で、これはAWS SDKを使って1時間などの有効期限付きで発行できる。 TL;DR:S3署名付きURLの要点 項目 内容 目的 非公開S3オブジェクトへの一時的なHTTPアクセスを付与する 有効期限 生成時に指定(例:3600秒 = 1時間) 認証情報 生成者のIAM認証情報がURLに埋め込まれる 主な用途 ファイルダウンロードリンク、アップロード委譲 バケットポリシー パブリックアクセス設定の変更は不要 SDK Python(boto3)、JavaScript(AWS SDK v3)など主要言語対応 S3署名付きURLの仕組み 署名付きURLは、IAM認証情報(アクセスキーまたはIAMロール)を使ってリクエストに署名したURLを事前に生成する仕組みだ。URLを受け取ったユーザーは、AWSの認証情報を持っていなくても、そのURLにHTTP GETリクエストを送るだけでオブジェクトを取得できる。有効期限が切れるか、署名に使った認証情報が無効になれば、URLも機能しなくなる。 ホテルのルームキーに近い。フロントが発行した一時的なカードで、チェックアウト後は使えなくなる。マスターキーを渡しているわけではない。 重要な点として、署名付きURLの有効性は 生成時に使用したIAM認証情報の有効性に依存する 。IAMロールの一時的な認証情報(例:EC2インスタンスプロファイルやAssumeRoleで取得したトークン)を使って生成した場合、そのトークンの有効期限が署名付きURLの有効期限より先に切れると、URLも無効になる。これは見落としやすい落とし穴だ。 sequenceDiagram participant App as アプリケーションサーバー participant SDK as AWS SDK ...