「取引先にS3バケットへのアクセス権限を渡したくないんだけど、
一時的にS3に保管してあるPDFファイルを共有したいんだよなぁ・・・。」
このようなケース、結構あると思います。
例えば”DropBox”や”GoogleDrive”といった、いわるゆるネットワークストレージであれば、
ユーザー登録をしていない人であっても一時的なURLを払い出してファイル共有することができるという機能があります。
S3にもそのような一時的なURLを払い出す機能があるのでしょうか?
実は、あります!!
それが、Amazon S3の署名付きURL(Pre-Signed URL)です。
今回は、Amazon S3の署名付きURLについてご紹介していきます。
S3の署名付きURLとは?
冒頭でもご説明したように、
S3の特定のオブジェクト(ファイル)をダウンロード(またはアップロード)することができるURLです。
実際には以下のようなURLとなります。
1 |
https://hidesan-web-test.s3.amazonaws.com/aaa.txt?AWSAccessKeyId=ASIAYHWQ52RBQF7MQ6EI&Expires=1547121784&x-amz-security-token=FQoGZXIvYXdzEE0aDC7nuTvntPqVAZj55SK3A%2F61HX1A%2BehtrkD%2FeYqbnMg3sz2gbcyZRUeUNVHCAj8gXSQCK%2Bclql5QMYRrya6cPGz4Nxyc%2FKmzFX9dxHYLeNTw3ZSQHI56P6U37HCmmeJWDmFXM%2F0kQvHOkb6OG4lpn4Bs7QpSdtgmUWhbf4He6q4g4qfz9X4YJ4nyx%2FcZ%2Bftx9g9nv7r6JrbWaYRohRz4PrefI1Mlc61BIvT7b9qCLPXq1QwaDhTJ1dlEX2hCPQp2crd0Qm90SS7SQUWM25ygGM4iaJlPXJKwpSZ8tvChGqzVNDiBfr8WhLlZq4GgYUGT0FOOpCrXRUR%2Fl9ddCRJ2KvwEN5JR6y6URdfiIe5Ih%2FFymRui52wLAtA%2FQj%2BuyO%2F0hMmWMKDo6TBh2Xa4I2UubEHCfaMCTCRbyHhfUGkcI0kMCkPmPq%2B5XHTIegB4iP1i5CFzQYyB%2FzZ8EsoNR1c8cvVAxptApcZhssHcE2oGLS3ccHln%2FGNvIQYQ0LW58FUEsI%2FrIx8B6NI60w6t1Wcn2Nc1zGb8FTkNfY7OAFd%2FRbZRIwfMzl9ExR8pncXcN5WAzdTS87g%2FgJtvGZDBu5Ng5u4MGDIfs50os%2Bjc4QU%3D&Signature=nPrmWlulmzurDNHRpW3WrbXN6og%3D |
この署名付きURLは、AWSユーザーでなくても使えます。
インターネットに接続できる環境で、ブラウザを使うことができればダウンロード(またはアップロード)できます。
※社内ネットワーク等でダウンロードやアップロード自体を許可していないような環境ではもちろんできませんよ。
その他、署名付きURLには、大きな魅力が2つ存在します。
1つ目が、このURLには一定の有効期限が設定できることです。
※設定できる有効期限には一定の制限がありますので、その点は次のセクションでご紹介します。
2つ目が、特にS3バケットのセキュリティ設定を変更しなくても署名付きURLが使えるということです。
この署名付きURLを受け取った人だけがオブジェクトへのアクセス権限を得られ、受け取っていない人は、通常通りS3バケットのアクセス制御の制限を受けることになります。
署名付きURLの期限設定に制限はないのか?
署名付きURLには有効期限を設けることが可能です。
ですが、有効期限には一定の制限があります。
詳しくはAWSサイトのこちらのページをご確認いただきたいのですが、以下のような記載があります。
署名付き URL の作成に使用できる認証情報には以下が含まれます。
- AWS Identity and Access Management (IAM) インスタンスプロファイル: 最大 6 時間有効
- AWS Security Token Service (STS): 最大 36 時間有効 (AWS アカウントユーザーや IAM ユーザーの認証情報など、永続的認証情報を使用して署名した場合)
- IAM ユーザー: 最大 7 日間有効
署名付きURLをどのような権限を持った人が発行するかによって有効期限の上限値が変わるということです。
ここは見落とされがちですので、十分注意してください。
署名付きURLを払い出す方法
Amazon S3の署名付きURLを払い出すには、以下の2つの方法があります。
- AWS CLIを使って払い出す方法
- AWS SDKを使って払い出す方法
1は、AWS CLIというコマンドラインベースのツールを使う方法です。
次のセクションでAWS CLIを使ってAmazon S3の署名付きURLを払い出す方法をご紹介します。
2は、AWS SDKというAWSのアプリケーション開発用ツールを使ってアプリケーション内で署名付きURLを払い出す方法となります。
AWS CLIによる署名付きURLの発行方法
今回は、EC2からAWS CLIを使って以下のオブジェクト(ファイル)に対する署名付きURLを発行したいと思います。
S3バケット名:hidesan-web-test
発行対象のオブジェクト名:aaa.txt
ファイルには「テストページ」というテキストのみ記載されております。
また、署名付きURLの有効期限は1分(60秒)にしたいと思います。
EC2は、S3に格納されている対象オブジェクトの参照権限を持っていないと署名付きURLが発行できません。
“AmazonS3ReadOnlyAccess”というAWS管理ポリシーをアタッチしたIAMロールをEC2に割り当てておくことが前提となります。
EC2へログインし、以下のコマンドをたたきましょう。
“–expires-in”オプションは、有効期限の設定値(秒)となります。60=60秒ですね。
1 |
aws s3 presign s3://hidesan-web-test/aaa.txt --expires-in 60 |
コマンドをたたくと、以下のようなURLが発行されます。
1 |
https://hidesan-web-test.s3.amazonaws.com/aaa.txt?AWSAccessKeyId=ASIAYHWQ52RBQF7MQ6EI&Expires=1547121784&x-amz-security-token=FQoGZXIvYXdzEE0aDC7nuTvntPqVAZj55SK3A%2F61HX1A%2BehtrkD%2FeYqbnMg3sz2gbcyZRUeUNVHCAj8gXSQCK%2Bclql5QMYRrya6cPGz4Nxyc%2FKmzFX9dxHYLeNTw3ZSQHI56P6U37HCmmeJWDmFXM%2F0kQvHOkb6OG4lpn4Bs7QpSdtgmUWhbf4He6q4g4qfz9X4YJ4nyx%2FcZ%2Bftx9g9nv7r6JrbWaYRohRz4PrefI1Mlc61BIvT7b9qCLPXq1QwaDhTJ1dlEX2hCPQp2crd0Qm90SS7SQUWM25ygGM4iaJlPXJKwpSZ8tvChGqzVNDiBfr8WhLlZq4GgYUGT0FOOpCrXRUR%2Fl9ddCRJ2KvwEN5JR6y6URdfiIe5Ih%2FFymRui52wLAtA%2FQj%2BuyO%2F0hMmWMKDo6TBh2Xa4I2UubEHCfaMCTCRbyHhfUGkcI0kMCkPmPq%2B5XHTIegB4iP1i5CFzQYyB%2FzZ8EsoNR1c8cvVAxptApcZhssHcE2oGLS3ccHln%2FGNvIQYQ0LW58FUEsI%2FrIx8B6NI60w6t1Wcn2Nc1zGb8FTkNfY7OAFd%2FRbZRIwfMzl9ExR8pncXcN5WAzdTS87g%2FgJtvGZDBu5Ng5u4MGDIfs50os%2Bjc4QU%3D&Signature=nPrmWlulmzurDNHRpW3WrbXN6og%3D |
このURLでブラウザを開いてみると、以下のように表示されます。
1分ほどして同じURLでブラウザを開くと、エラーが表示されてしまいました。
きちんと有効期限が設定されているということですね。
いかがでしたでしょうか?
意外と簡単に署名付きURLの発行ができますよね。
署名付きURLは使われる場面が多いと思いますので、ぜひ知っておいてください。
以上、hidesanでした!