AWS CLI とコンソールを使用してpresigned URLs生成してみた。

2022.04.26

概要

presigned URLsを使用してオブジェクトを共有したり、ユーザーがAWSセキュリティクレデンシャルなしでオブジェクトをバケットにアップロードできるようにしたりできます。デフォルトでは、すべてのオブジェクトとバケットはプライベートです。presigned URLsで、S3バケットおよびS3バケット内のオブジェクトにアクセスするために使用できるURLを生成できます。presigned URLには、特定のアクションが関連付けられており、有効期限があります。

 

presigned URLを生成する方法:

  • S3 コンソールの使用する。
  • Visual Studio でのAWS エクスプローラーの使用する。
  • AWS SDK の使用する。
  • AWS CLI の使用する。

この記事では、AWS CLI とコンソールを使用してS3 presigned URLs生成してみました。ここでは、S3バケット内のファイルにアクセスするためのpresigned URLを生成してみました。

 

やってみた

S3バケットの作成

次のコマンドを使用してS3バケットを作成しておきます。

//Create S3 bucket
aws s3api create-bucket \
    --bucket pre-data-bucket \ 
    --region us-east-1

//Output
{
    "Location": "/pre-data-bucket"
}

 

  • ソースS3バケットにファイルをアップロードしておきます。

 

  • オブジェクトURLを使用してファイルにアクセスしようとすると、アクセス拒否エラーが発生します。

 

AWS CLI でpresigned URLs生成する

  • 次のコマンドを使用して、presigned URLを作成しておきます。presigned URLを生成するコマンドでオブジェクトのS3 URIを指定しておきます。

 

 

//Command to generate presigned URL
aws s3 presign s3://pre-data-bucket/CLI/index.html  

//Output : presigned URL                  
https://pre-data-bucket.s3.amazonaws.com/CLI/index.html?X-Amz-Algorithm...........

 

  • 生成されたpresigned URLを使用してファイルにアクセスできるようになりました。

 

  • 有効期限を指定せずにpresigned URLを作成すると、デフォルトでpresigned URLは1時間有効になります。
  • 次のコマンドを使用して、presigned URLのカスタムライフタイムを指定できます。
  • AWS CLIでは、presigned URLの最大有効期限は作成時から7日です。

 

//create presigned URL, which is valid for 7 days
//aws s3 presign S3-URI --expires-in 604800
aws s3 presign s3://pre-data-bucket/CLI/index.html --expires-in 604800

 

コンソールでpresigned URLs生成する

  • S3 コンソールで、presigned URL を作成するオブジェクトを選択しておきます。
  • Actionメニューで、[Share with a presigned URL]を選択しておきます。

 

 

  • presigned URLの有効期間を指定して、[Create presigned URL] を選択しておきます。

 

  • 確認が表示されると、URL は自動的にクリップボードにコピーされます。生成されたpresigned URLを使用してファイルにアクセスできるようになりました。
  • S3コンソールでは、事前署名されたURLの最大有効期限は作成時から12時間です。

 

AWSCLIとコンソールを介して作成されたpresigned URLの違い

有効期限

AWS CLI

  • AWS CLIを介して生成されたpresigned URLのデフォルトの有効期限は 1時間です。
  • AWS CLIでは、presigned URLの最大有効期限は作成時から7日です。

コンソール

  • presigned URLの有効期限を1分から720分(12時間)の間で指定できます。
  • S3コンソールでは、事前署名されたURLの最大有効期限は作成時から12時間です。

 

presigned URLのパラメーター

AWS CLI

  • presigned URLのパラメータは次のとおりです。
https://pre-data-bucket.s3.amazonaws.com/CLI/index.html?
X-Amz-Algorithm=AWS4-HMAC-SHA256 &
X-Amz-Credential=<your-access-key-id>%2F20220425%2Fus-east-1%2Fs3%2Faws4_request &
X-Amz-Date=20220425T145523Z &
X-Amz-Expires=3600 &
X-Amz-SignedHeaders=host &
X-Amz-Signature=<signature-value>

 

コンソール

  • presigned URLのパラメータは次のとおりです。
https://pre-data-bucket.s3.us-east-1.amazonaws.com/Console/index.html?
response-content-disposition=inline &
X-Amz-Security-Token=<security-token> &
X-Amz-Algorithm=AWS4-HMAC-SHA256 &
X-Amz-Date=20220425T150240Z &
X-Amz-SignedHeaders=host &
X-Amz-Expires=3600 &
X-Amz-Credential=<your-access-key-id>%2F20220425%2Fus-east-1%2Fs3%2Faws4_request&
X-Amz-Signature=<signature-value>

 

まとめ

AWS CLI とコンソールを使用してS3 presigned URLs生成してみました。オブジェクトをアップロードまたは削除するためのpresigned URLsを生成することもできます。

Reference :  

S3 presigned URLs

Creating presigned URLs through AWS CLI