AWS CLIを利用し、Amazon S3バケットのpre-signed urlsを取得してみました

2021.09.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、イムチェジョンです。
今回のブログではS3バケットのオブジェクトを開くためにAWS CLIを利用してpre-signed urlsを取得してみました。

アジェンダ

  1. pre-signed urlsとは?
  2. pre-signed urlsの取得方法
  3. まとめ

1. pre-signed urlsとは?

pre-signed urls

  • すべてのオブジェクト及びバケットは基本的にプライベートだが、pre-signed urlsを使用して選択的にオブジェクトを共有できる
  • 顧客/ユーザーがAWSセキュリティ資格証明や権限なしに、バケットにオブジェクトをアップロードすることを許容できる

pre-signed urlsの構成

pre-signed urlsは下のように構成されてます。

https://s3.amazonaws.com/examplebucket/test.txt?
X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=(your-access-key-id)/(date)/(AWS Region)/(AWS-service)/aws4_request
&X-Amz-Date=20130721T201207Z 
&X-Amz-Expires=86400 
&X-Amz-SignedHeaders=host 
&X-Amz-Signature=(signature-value)
  • X-Amz-Algorithm
    • AWS Signatureバージョン及び署名の計算に使用されたアルゴリズムを識別します。
  • X-Amz-Credential
    • アクセスキーID の他にも署名が有効な範囲(AWS エリア及びサービス)を提供
    • この値は署名計算で使用する範囲と一致しなければならない
  • X-Amz-Date
    • 日付及び時間形式はISO8601標準に従う必要があり、形式を指定する必要がある
    • "yyyyyMMDTHHmmssZ"形式で表示
  • X-Amz-Expires
    • 作成したpre-signed urlsが有効な期間(秒)を提供
    • 値段は正数で表示
      • ex) 86400(24時間)
      • 最小値は1
      • 最大値は604800(7 日)
  • X-Amz-SignedHeaders
    • 署名を計算するに使うヘッダーを並ぶ
  • X-Amz-Signature
    • リクエストを認証するための署名を提供
    • この署名はAmazon S3が計算した署名と一致しなければならない
    • 一致しないとAmazon S3がリクエストを拒否
  • X-Amz-Security-Token(オプション)
    • STSサービスから持ち込んだ資格証明を使う場合、資格証明媒介変数

2. pre-signed urlsの取得方法

S3バケットを作成し、ファイルをアップロードするのは省略しました。

S3バケットのファイルをオープン

アップロードされているイメージファイルを開いてみましょう。
ファイル情報ページで開くをクリックします。

すると、ファイルが開きました。

AWS CLIでpre-signed urlを取得し、オープン

今回はAWS CLIを利用し、ファイルをオープンしてみましょう。
現在、publicの状態ではないので、ファイル情報ページのオブジェクト URLでインターネットで接続していると、表示されません。

ファイル情報ページでS3 URIをコピーします。

AWS CLIを利用し、pre-signed urlを取得してみましょう。

$ aws s3 presign (S3のURL) --region (バケットのリージョン)
$ aws s3 presign s3://lim-origin-202108/cat.jpg --region ap-northeast-2
https://lim-origin-202108.s3.ap-northeast-2.amazonaws.com/cat.jpg

結果で出るURLをコピーしてインターネットに接続してみると、写真が表示されているのが確認できます。

3. まとめ

今回はAWS CLIを利用してpre-signed urlsを取得する方法をまとめてみました。