「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は「Amazon S3」の「署名付きURL」を使ってファイルを共有する方法を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回はAWSのストレージサービス「Amazon S3」の「署名付きURL」を紹介します。
Amazon S3には、ファイルの保存やバックアップ、静的ファイルの配信などさまざまな活用方法がありますが、何かのファイルを他の人に共有したいときに便利なのが署名付きURLです。
ファイルの共有といっても特に次のような条件がある場面を考えてみましょう。
これらが当てはまるケースとしては、顧客や他部署のメンバーへのファイル共有、セミナー参加者への資料配布などがあります。このような状況でも署名付きURLを活用できます。
署名付きURLとは、S3バケットへのアクセス権限を持たないユーザーに対して一時的なアクセスを許可するために発行する一時的なURLです。
プライベートなS3バケットにプライベートのPDFファイルを格納している場合でも、署名付きURLを発行することでURLを共有した人とPDFファイルを共有することができます。
ここでは署名付きURLを発行したクレデンシャル(IAMユーザーなど)の権限でファイルにアクセスされているので、ファイルをダウンロードする人はS3の閲覧権限やAWSアカウントなどは必要ありません。
また、ファイルのダウンロード期限を設定できるのも大きな特徴です。有効期限の上限値は署名付きURL発行時のクレデンシャルで下記表のように決まっています。
署名付きURL発行時に使用するクレデンシャル | 有効期限の上限値 |
---|---|
IAMユーザー | 最大7日間 |
AWS Security Token Service(STS) | 最大36時間 |
IAMインスタンスプロファイル | 最大6時間 |
参考:署名付きURLを使用したオブジェクトの共有 |
※署名付きURLを利用すると、ファイルのダウンロードに加えてアップロードもできますが、本稿ではダウンロードの場合についてのみ説明します。
署名付きURLを発行する方法としては、「AWS Command Line Interface」(CLI)を使う方法と「AWS Software Development Kit」(SDK)を使う方法がありますが、今回はCLIを使った方法で次のように確認します。
下記の通りS3バケットを作成して、署名付きURLを発行して共有するファイルをアップロードしておきます。
バケットの作成時には「パブリックアクセスをすべてブロック」を選択して問題ありません。
続いてCLIから署名付きURLを発行するためのIAMユーザーを作成します。
先ほど解説した通り、署名付きURLをクリックするとそのURLを発行したIAMユーザーの権限でファイルにアクセスするので、IAMユーザーにはS3のGetObjectポリシーや「AmazonS3ReadOnlyAccess」などを付与しておきましょう。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::s3-presigned-url-test-bucket/*" } ] }
手順2で作成したCLIユーザーを利用して下記コマンドを実行すると、署名付きURLを発行できます。
$ aws s3 presign <S3オブジェクトのパス> [--expires-in 有効期限(秒)]
今回は有効期限を60秒として下記コマンドを実行して署名付きURLを発行しました。
$ aws s3 presign s3://s3-presigned-url-test-bucket/sample.txt --expires-in 60
コマンドを実行すると、一部マスキングしていますが次のような形式で署名付きURLが発行されます。
https://s3-presigned-url-test-bucket.s3-ap-northeast-1.amazonaws.com/sample.txt?AWSAccessKeyId=**********&Expires=**********&x-amz-security-token=**********&Signature=**********
こちらのURLにブラウザからアクセスしてみたところ、「sample.txt」の中身を確認できました。
また、署名付きURLの有効期限「1分」を過ぎてから再びアクセスすると「Request has expired」と有効期限切れによってファイルが表示されないことを確認できます。
ちなみに、有効期限はリンクをクリックしたタイミングで判定されるので、ファイルのダウンロード中に有効期限が過ぎてしまっても問題なくダウンロードできます。
今回はS3の署名付きURLを利用してファイルを共有する方法を紹介しました。
ちょっとしたファイルの共有は頻繁に発生する一方で、ファイルの容量を気にしたり、社内のセキュリティ基準を満たすために何らかのツールを利用しなければいけなかったりします。ファイルを共有する際には、S3の署名付きURLを選択肢の一つとして検討してみてはいかがでしょうか。
マルチクラウドへの閉域接続サービスのサービスマネジメント業務に従事した後、AWS案件での基盤構築支援などを担当。社内では、検証・学習用にAWSを完全定額で利用できるサービス「安心サンドボックス」の立ち上げや東京ITスクールのAWS研修におけるコンテンツ開発、Java・AWS研修の講師などを歴任。
Copyright © ITmedia, Inc. All Rights Reserved.