Python SDK を使用して、OSS で Referer リクエストヘッダーに基づくアクセスルールを設定できます。これらのルールには、Referer ホワイトリスト、Referer ブラックリスト、および Empty Referer のルールが含まれます。これにより、特定のソースからのアクセスをブロックし、OSS ファイルのホットリンクを防止し、不要なトラフィック料金を回避できます。
注意事項
ホットリンク保護を設定する前に、この機能について理解を深めておく必要があります。詳細については、「ホットリンク保護」をご参照ください。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
ホットリンク保護を設定またはクリアするには、
oss:PutBucketReferer権限が必要です。ホットリンク保護の構成をクエリするには、oss:GetBucketReferer権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
ホットリンク保護の設定
次のコードは、ホットリンク保護を設定する方法を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import BucketReferer
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは V4 署名に必要ですのでご注意ください。
region = "cn-hangzhou"
# yourBucketName をバケットの名前に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Empty Referer を許可します。
allow_empty_referer = True
# Referer ホワイトリストを設定します。
referers = ['http://www.aliyun.com', 'https://www.aliyun.com']
# Referer ブラックリストを設定します。
# black_referers = ['http://example.com', 'http://*.example.com']
# クエリ文字列を切り捨てます。
allow_truncate_query_string = True
# ホットリンク保護ルールを設定します。
bucket.put_bucket_referer(BucketReferer(allow_empty_referer=allow_empty_referer, referers=referers, black_referers=black_referers,allow_truncate_query_string=allow_truncate_query_string))ホットリンク保護情報の取得
次のコードは、ホットリンク保護の構成を取得する方法を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは V4 署名に必要ですのでご注意ください。
region = "cn-hangzhou"
# yourBucketName をバケットの名前に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
config = bucket.get_bucket_referer()
print('allow empty referer={0}, referers={1}'.format(config.allow_empty_referer, config.referers))ホットリンク保護ルールのクリア
次のコードは、ホットリンク保護の構成をクリアする方法を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.models import BucketReferer
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (例: cn-hangzhou) を指定します。このパラメーターは V4 署名に必要ですのでご注意ください。
region = "cn-hangzhou"
# yourBucketName をバケットの名前に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# ホットリンク保護ルールを直接クリアすることはできません。Empty Referer を許可する新しいルールを作成して、以前のルールを上書きする必要があります。
bucket.put_bucket_referer(BucketReferer(True, []))関連ドキュメント
ホットリンク保護ルールを設定するための API 操作の詳細については、「PutBucketReferer」をご参照ください。
ホットリンク保護の構成を取得するための API 操作の詳細については、「GetBucketReferer」をご参照ください。