はじめに
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 時間)に設定されます。
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 であるため、ブラウザで開いています)
2. 有効期限を 2 日間(7,200 秒)に設定して事前署名付き URL を生成
以下の例では、generate_presigned_url()の引数に 2 日間の有効期限 (ExpiresIn=7200)を設定し、事前署名付き URL を生成しています。
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 を生成
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が開かれています。
生成されたURLに、2分以上経過した後にアクセス
以下のようなエラーが返されて、オブジェクトへのアクセスが拒否されます。事前署名付きURLを生成した際に「ExpiresIn=120」を指定しているため、2 分以上経過したア クセスは以下のように拒否されます。
まとめ
Python(boto3)で、オブジェクトWEB公開のための署名付きURLを生成してみました。
次回も、Pythonでオブジェクトストレージ/Cloudianをいろいろ操作していきたいと思います。