メール添付&パスワード後送をやめたいときの「Amazon S3」の「署名付きURL」によるファイル共有AWSチートシート

「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は「Amazon S3」の「署名付きURL」を使ってファイルを共有する方法を紹介する。

» 2021年07月15日 05時00分 公開
[天野盛介東京ITスクール]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回はAWSのストレージサービス「Amazon S3」の「署名付きURL」を紹介します。

 Amazon S3には、ファイルの保存やバックアップ、静的ファイルの配信などさまざまな活用方法がありますが、何かのファイルを他の人に共有したいときに便利なのが署名付きURLです。

 ファイルの共有といっても特に次のような条件がある場面を考えてみましょう。

  • S3バケットをパブリックアクセス(誰でもアクセス可能な状況)にしたくない
  • 「AWS Identity and Access Management」(IAM)のユーザーを作成して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を利用したファイル共有手順

 署名付きURLを発行する方法としては、「AWS Command Line Interface」(CLI)を使う方法と「AWS Software Development Kit」(SDK)を使う方法がありますが、今回はCLIを使った方法で次のように確認します。

  1. S3バケットを作成してサンプルファイルをアップロード
  2. CLI用のIAMユーザーを作成
  3. CLIを利用して署名付きURLを発行

手順1. S3バケットを作成してサンプルファイルをアップロード

 下記の通りS3バケットを作成して、署名付きURLを発行して共有するファイルをアップロードしておきます。

 バケットの作成時には「パブリックアクセスをすべてブロック」を選択して問題ありません。

  • バケット名:s3-presigned-url-test-bucket
  • 対象ファイル:s3://s3-presigned-url-test-bucket/sample.txt

図1 S3バケットを作成してファイルをアップロード

手順2. CLI用のIAMユーザーを作成

 続いて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/*"
        }
    ]
}

手順3. CLIを利用して署名付きURLを発行

 手順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」の中身を確認できました。

図2 発行した署名付きURLを利用したファイルへのアクセス

 また、署名付きURLの有効期限「1分」を過ぎてから再びアクセスすると「Request has expired」と有効期限切れによってファイルが表示されないことを確認できます。

図3 署名付きURLの有効期限が切れている場合の表示

 ちなみに、有効期限はリンクをクリックしたタイミングで判定されるので、ファイルのダウンロード中に有効期限が過ぎてしまっても問題なくダウンロードできます。

終わりに

 今回はS3の署名付きURLを利用してファイルを共有する方法を紹介しました。

 ちょっとしたファイルの共有は頻繁に発生する一方で、ファイルの容量を気にしたり、社内のセキュリティ基準を満たすために何らかのツールを利用しなければいけなかったりします。ファイルを共有する際には、S3の署名付きURLを選択肢の一つとして検討してみてはいかがでしょうか。

筆者紹介

天野盛介(あまのせいすけ)

株式会社システムシェアード

マルチクラウドへの閉域接続サービスのサービスマネジメント業務に従事した後、AWS案件での基盤構築支援などを担当。社内では、検証・学習用にAWSを完全定額で利用できるサービス「安心サンドボックス」の立ち上げや東京ITスクールのAWS研修におけるコンテンツ開発、Java・AWS研修の講師などを歴任。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。