Tencent CloudでCDN+COSで署名付きURLを発行してみた
こんにちは!
Tencent Cloudについて猛烈勉強中のひよっこエンジニアです。
今回は署名付きURLの発行方法について、まとめてみました!
Webサイトなどを公開するときにURLを特定のユーザだけに配信するケースがあるかと思います。(セミナー登壇後の資料など)
その際の方法をGUIで発行する方法/モジュール化して発行する方法を検証してみました!
最後には、Tencent Cloudでの特徴もまとめてみましたので参考にして頂けると嬉しいです!
構成図
今回はこのような構成となり、GUI上で発行する場合は※の設定は不要になります。
参考:https://intl.cloud.tencent.com/jp/document/product/228/35237
事前準備
まずは、対象のサイトを作成します。
別の記事で『Tencent Cloudで静的コンテンツを配置する方法』をまとめているのでこちらを参考にしていただければと思います!
こちらを実装できれば、準備完了です!
CDN設定~GUI ver~
CDNコンソールの「Access Control」をクリックし、「Authentication Configuration」より設定を行います。
設定必要な情報は以下の通りです。
※認証方法は4つあり、任意のものを選択します。
項目 | 値 | 備考 |
---|---|---|
Authentication Key | Auto-create | 今回は自動発行で設定を行います。 |
Sigunature Paramater Name | sign | デフォルトのものをそのまま活用しました。 |
Access Path | /goro.jpg | 配置したCOSバケット内のパスを明記 |
Valid Time | 100 | URLの有効期限を設定します。 |
全ての情報を入力出来たら「Generate」をクリックします。
URLが発行され、無事ログインできました!
CDN設定~モジュール化 ver~
CDNコンソールの「Access Control」をクリックし、「Authentication Configuration」より設定を行います。
「Authentication Configuration」を「On」にし、必要な情報を入力します。
※認証方法は4つあり、任意のものを選択します。
Select a mode
項目 | 値 | 備考 |
---|---|---|
Authentication Mode | TypeA | 4つの認証方法より任意のものを選択します。 |
Configure Parameter
項目 | 値 | 備考 |
---|---|---|
Authentication Key | Auto-create | 今回は自動発行で設定を行います。 |
Sigunature Paramater Name | sign | デフォルトのものをそのまま活用しました。 |
Valid Time | 100 | URLの有効期限を設定します。 |
項目 | 値 | 備考 |
---|---|---|
Authentication Scope | ALL |
下記サンプコードが提供されていますので、下記を実行します。
#import requests
import json
import sys
import time
import hashlib
def generate_url(category, ts=None):
print(category);
url = '〓ドメイン〓'
path = '/goro.jpg'
suffix = ''
key = 'gfSg5c8fGz'
now = int(time.mktime(time.strptime(ts, "%Y%m%d%H%M%S")) if ts else time.time())
sign_key = 'sign'
time_key = 't'
ttl_format = 100
if category == 'A':
ts = now
rand_str = '123abc'
sign = hashlib.md5('%s-%s-%s-%s-%s' % (path, ts, rand_str, 0, key)).hexdigest()
request_url = '%s%s?%s=%s' % (url, path, sign_key, '%s-%s-%s-%s' % (ts, rand_str, 0, sign))
print(request_url)
elif category == 'B':
ts = time.strftime('%Y%m%d%H%M', time.localtime(now))
sign = hashlib.md5('%s%s%s' % (key, ts, path)).hexdigest()
request_url = '%s/%s/%s%s%s' % (url, ts, sign, path, suffix)
print(request_url)
elif category == 'C': #Type C
ts = hex(now)[2:]
sign = hashlib.md5('%s%s%s' % (key, path, ts)).hexdigest()
request_url = '%s/%s/%s%s%s' % (url, sign, ts, path, suffix)
print(request_url)
elif category == 'D': #Type D
ts = now if ttl_format == 10 else hex(now)[2:]
sign = hashlib.md5('%s%s%s' % (key, path, ts)).hexdigest()
request_url = '%s%s?%s=%s&%s=%s' % (url, path, sign_key, sign, time_key, ts)
print(request_url)
if __name__ == '__main__':
if len(sys.argv) == 1:
print('usage: python generate_url.py A 20200501000000')
args = sys.argv[1:]
generate_url(*args)
実行すると、URLが発行されます。
[root@goro-auth work]# python2 goro-auth2.py A
A
〓対象URL〓?sign=1647239459-123abc-0-30c8d4e600086b3edb5xxxxxxxxxxxxxx
無事アクセスできました!!
さいごに
今回は、認証付きURLを発行してみました。
方法としてはGUI上からも発行することができるの、楽だし、簡単だなと感じました!
AWSなどと比べても、極端に難しいこともないのでコスト的にもTencent Cloudの方が安いので、簡単なコンテンツの配置レベルであれば、Tencent Cloudでの実装もぜひ、検討してみてください!
その他にもアクセス制限ではIP制限もCDNの設定からホワイトリスト、ブラックリストと設定可能みたいです。
Tencent Cloud CDNについては、他のクラウドにはないPull型としての機能もあるみたいなので、その機能についてもまた、紹介していきたいと思います!
Author And Source
この問題について(Tencent CloudでCDN+COSで署名付きURLを発行してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/b1a4jcsbgs23/items/c286452b2c199dcbd149著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .