[Cloudian #10] Python(boto3)에서 객체 게시를 위한 서명된 URL을 생성해 보기

소개



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이므로 브라우저에서 열려 있습니다)



2. 만료 날짜를 2일(7,200초)로 설정하여 사전 서명된 URL을 생성합니다.



다음 예제에서는 generate_presigned_url() 인수에 이틀 만료일(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이 가리키는 개체가 웹 브라우저에서 참조할 수 있는 PDF 형식이므로 웹 브라우저에서 PDF가 열립니다.



생성된 URL에 2분 이상 경과한 후 액세스



다음과 같은 오류가 반환되어 개체에 대한 액세스가 거부됩니다. 사전 서명 된 URL을 생성 할 때 "ExpiresIn = 120"을 지정했기 때문에 2 분 이상 경과 한 액세스는 다음과 같이 거부됩니다.



요약



Python(boto3)에서 객체 WEB 게시를 위한 서명된 URL을 생성해 보았습니다.

다음 번에도 파이썬에서 객체 스토리지/Cloudian을 여러 가지로 조작하고 싶습니다.

좋은 웹페이지 즐겨찾기