大きいファイルを簡単に人にダウンロードしてほしい(一時的に・・・)
「AWS S3を使って一時的に大きなファイルを渡したい」
- もちろんPublicアクセスはなし
- 一時的にちょっと渡すだけ
- 追加でIAMとか用意するのめんどい
- S3 Explorer など持っていない
利用するAWSサービス
- S3(署名付きURLを利用)
最終形
- 署名付きURLを渡す
- ブラウザでクリックするだけで表示(ダウンロード)
- 指定時間後、アクセスできなくなる
準備する設定
- Publicアクセス禁止「パブリックアクセスをすべてブロック」のS3バケット
- 対象S3バケットにアクセス可能なIAMユーザ
- ファイルを置く&aws s3 presign コマンド(CLI)を実行する。s3 presign は対象のS3バケット(ファイル)に対するReadが必要。
実行コマンド
エラー事例
aws s3 presignコマンドを実行した環境設定のregionがファイルを置いているregionと違っていた。そのURLでアクセスするとアクセスエラー。
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
Publicアクセス禁止状態で署名なしの通常のエンドポイントURLにアクセスした場合
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
制限時間切れ
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<X-Amz-Expires>300</X-Amz-Expires>
AWS CLI V1の場合、署名アルゴリズムが古くためにエラー
・CLIインストール
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-windows.html
参考
AWS Blackbelt S3