LoginSignup
0
1

More than 3 years have passed since last update.

[Cloudian #10] Python(boto3)で、オブジェクト公開のための署名付きURLを生成してみる

Last updated at Posted at 2020-12-19

はじめに

Cloudianは、AWSのS3完全互換のAPIを持ったオブジェクトストレージです。
前回は、Python(boto3)で、オブジェクトのメタデータを表示してみました。

今回は、Python(boto3)で、オブジェクトをWEB公開するための、署名付きURLを生成してみようと思います。

事前署名付き URL の生成 / generate_presigned_url ()

Cloudian に格納されたオブジェクトの共有に使用できるパブリックURLを、 generate_presigned_url()を呼び出して生成することができます。

1. デフォルトの有効期間(3,600 秒)で事前署名付き URL を生成

以下の例では、generate_presigned_url()のクライアントメソッドに「get_object」 を設定し、バケット「pythonbucket3」に保存されているキー「HyperStoreInstallGuide_v-7.2.1.pdf」のオブジェクトを取得できる事前署名付きURLを生成しています。

有効期間を指定せずに URL を生成した場合、その URL の有効期間はデフォルトで 3,600 秒(1 時間)に設定されます。

test1.py
import boto3

client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)


# オブジェクトWEB公開のための署名付きURLを生成
client.generate_presigned_url(
    'get_object',
    Params={
        'Bucket': 'pythonbucket3',
        'Key': 'HyperStoreInstallGuide_v-7.2.1.pdf'
    }
)
'http://s3-region1.admin-tech.tokyo/pythonbucket3/HyperStoreInstallGuide_v-7.2.1.pdf?
AWSAccessKeyId=xxxxxxxxxxxxxxxxxxxx&Signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&Expires=xxxxxxxxxx'

この例で生成された URL を開くと、下図のように指定したオブジェクトを取得することが できます
(ブラウザで表示可能な PDF であるため、ブラウザで開いています)

3-9-1.png

2. 有効期限を 2 日間(7,200 秒)に設定して事前署名付き URL を生成

以下の例では、generate_presigned_url()の引数に 2 日間の有効期限 (ExpiresIn=7200)を設定し、事前署名付き URL を生成しています。

test1.py
import boto3

client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)


# オブジェクトWEB公開のための署名付きURLを生成
client.generate_presigned_url(
    'get_object',
    Params={
        'Bucket': 'pythonbucket3',
        'Key': 'HyperStoreInstallGuide_v-7.2.1.pdf',
        },
    ExpiresIn=7200
)
'http://s3-region1.admin-tech.tokyo/pythonbucket3/HyperStoreInstallGuide_v-7.2.1.pdf?
AWSAccessKeyId=xxxxxxxxxxxxxxxxxxxx&Signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&Expires=xxxxxxxxxx'

3. 有効期限を 2 分(120 秒)に設定して事前署名付き URL を生成

以下の例では、generate_presigned_url()の引数に非常に短時間の有効期限 (この例の場合、「ExpiresIn=120」)を設定し、事前署名付き URL を生成してその挙動 を確認しています。

有効期限 2 分の事前署名付き URL を生成

test1.py
import boto3

client = boto3.client(
    's3',
    endpoint_url='https://xxx.yyy.com'
)


# オブジェクトWEB公開のための署名付きURLを生成
client.generate_presigned_url(
    'get_object',
    Params={
        'Bucket': 'pythonbucket3',
        'Key': 'HyperStoreInstallGuide_v-7.2.1.pdf',
        },
    ExpiresIn=120
)
'http://s3-region1.admin-tech.tokyo/pythonbucket3/HyperStoreInstallGuide_v-7.2.1.pdf?AWSAccessKeyId=xxxxxxxxxxxxxxxxxxxx&Signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&Expires=xxxxxxxxxx'

生成されたURLに、2分以内にアクセス

事前署名付き URL が指しているオブジェクトが Web ブラウザで参照できる PDF形式であるため、Webブラウザで PDFが開かれています。

3-9-1.png

生成されたURLに、2分以上経過した後にアクセス

以下のようなエラーが返されて、オブジェクトへのアクセスが拒否されます。事前署名付きURLを生成した際に「ExpiresIn=120」を指定しているため、2 分以上経過したア クセスは以下のように拒否されます。

3-9-3.png

まとめ

Python(boto3)で、オブジェクトWEB公開のための署名付きURLを生成してみました。

次回も、Pythonでオブジェクトストレージ/Cloudianをいろいろ操作していきたいと思います。

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