LoginSignup
0
1

More than 1 year has passed since last update.

Tencent CloudでCDN+COSで署名付きURLを発行してみた

Posted at

こんにちは!
Tencent Cloudについて猛烈勉強中のひよっこエンジニアです。

今回は署名付きURLの発行方法について、まとめてみました!

Webサイトなどを公開するときにURLを特定のユーザだけに配信するケースがあるかと思います。(セミナー登壇後の資料など)
その際の方法をGUIで発行する方法/モジュール化して発行する方法を検証してみました!

最後には、Tencent Cloudでの特徴もまとめてみましたので参考にして頂けると嬉しいです!

構成図

今回はこのような構成となり、GUI上で発行する場合は※の設定は不要になります。
image.png

参考:https://intl.cloud.tencent.com/jp/document/product/228/35237

事前準備

まずは、対象のサイトを作成します。
別の記事で『Tencent Cloudで静的コンテンツを配置する方法』をまとめているのでこちらを参考にしていただければと思います!

こちらを実装できれば、準備完了です!

CDN設定~GUI ver~

CDNコンソールの「Access Control」をクリックし、「Authentication Configuration」より設定を行います。
Annotation 2022-03-27 150637.png
Annotation 2022-03-27 150759.png

設定必要な情報は以下の通りです。
※認証方法は4つあり、任意のものを選択します。

項目 備考
Authentication Key Auto-create 今回は自動発行で設定を行います。
Sigunature Paramater Name sign デフォルトのものをそのまま活用しました。
Access Path /goro.jpg 配置したCOSバケット内のパスを明記
Valid Time 100 URLの有効期限を設定します。

全ての情報を入力出来たら「Generate」をクリックします。

image.png

URLが発行され、無事ログインできました!

image.png

CDN設定~モジュール化 ver~

CDNコンソールの「Access Control」をクリックし、「Authentication Configuration」より設定を行います。
Annotation 2022-03-27 150637.png
Annotation 2022-03-27 150759.png
「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

設定が完了したら下記のようになります。
image.png

下記サンプコードが提供されていますので、下記を実行します。

#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

無事アクセスできました!!

image.png

さいごに

今回は、認証付きURLを発行してみました。

方法としてはGUI上からも発行することができるの、楽だし、簡単だなと感じました!
AWSなどと比べても、極端に難しいこともないのでコスト的にもTencent Cloudの方が安いので、簡単なコンテンツの配置レベルであれば、Tencent Cloudでの実装もぜひ、検討してみてください!

その他にもアクセス制限ではIP制限もCDNの設定からホワイトリスト、ブラックリストと設定可能みたいです。

Tencent Cloud CDNについては、他のクラウドにはないPull型としての機能もあるみたいなので、その機能についてもまた、紹介していきたいと思います!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1