リファラーホワイトリストまたはリファラーブラックリストを設定し、Object Storage Service (OSS) バケットに空のリファラーを含むリクエストを許可するかどうかを指定して、バケット内のリソースへの不正アクセスと予期しないトラフィック料金を防止できます。
使用上の注意
ホットリンク保護を設定する前に、この機能に慣れていることを確認してください。 詳細については、「ホットリンク保護」をご参照ください。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
ホットリンク保護を設定するには、
oss:PutBucketReferer
権限が必要です。 ホットリンク保護設定をクエリするには、oss:GetBucketReferer
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
バケットのホットリンク保護の設定
次のサンプルコードは、バケットのホットリンク保護を設定する方法の例を示しています。
PutBucketRefererRequest request = new PutBucketRefererRequest();
request.setBucketName("examplebucket");
// リファラーホワイトリストを指定します。 リファラーでは、アスタリスク (*) と疑問符 (?) をワイルドカード文字として使用できます。
ArrayList<String> リファラー=new ArrayList<String>();
referers.add("http://www.aliyun.com");
referers.add("https://www.aliyun.com");
// リファラー. add("http://www.help.alibabacloud.com");
// referers.add("http:// www.?.aliyuncs.com");
request.setReferers (リファラー);
OSSAsyncTask task = oss.asyncPutBucketReferer(request, new OSSCompletedCallback<PutBucketRefererRequest, PutBucketRefererResult>() {
@オーバーライド
public void onSuccess(PutBucketRefererRequestリクエスト, PutBucketRefererResult結果) {
OSSLog.logInfo("code: " + result.getStatusCode());
}
@オーバーライド
public void onFailure(PutBucketRefererRequestリクエスト, ClientException clientException, ServiceException serviceException) {
OSSLog.logError("error: " + serviceException.getRawMessage());
}
});
task.waitUntilFinished();
バケットのホットリンク保護設定の照会
次のサンプルコードは、バケットのホットリンク設定を照会する方法の例を示しています。
GetBucketRefererRequest request = new GetBucketRefererRequest();
request.setBucketName("yourBucketName");
OSSAsyncTask task = oss.asyncGetBucketReferer(request, new OSSCompletedCallback<GetBucketRefererRequest, GetBucketRefererResult>() {
@オーバーライド
public void onSuccess(GetBucketRefererRequestリクエスト, GetBucketRefererResult結果) {
// バケットのリファラーホワイトリストを照会します。
ArrayList<String> list = result.getReferers();
for (String ref : list){
OSSLog.logInfo("info: " + ref);
}
}
@オーバーライド
public void onFailure(GetBucketRefererRequestリクエスト, ClientException clientException, ServiceException serviceException) {
OSSLog.logError("error: " + serviceException.getRawMessage());
}
});
task.waitUntilFinished();
バケットのホットリンク保護設定をクリアする
次のサンプルコードは、バケットのホットリンク保護設定を削除する方法の例を示しています。
PutBucketRefererRequest request = new PutBucketRefererRequest();
request.setBucketName("yourBucketName");
request.setAllowEmpty(true);
// バケットのホットリンク保護設定を直接クリアすることはできません。 既存のホットリンク保護設定を上書きするには、空のRefererヘッダーを持つリクエストを許可する新しいホットリンク保護ルールを設定する必要があります。
ArrayList<String> リファラー=new ArrayList<String>();
request.setReferers (リファラー);
OSSAsyncTask task = oss.asyncPutBucketReferer(request, new OSSCompletedCallback<PutBucketRefererRequest, PutBucketRefererResult>() {
@オーバーライド
public void onSuccess(PutBucketRefererRequestリクエスト, PutBucketRefererResult結果) {
OSSLog.logInfo("code: " + result.getStatusCode());
}
@オーバーライド
public void onFailure(PutBucketRefererRequestリクエスト, ClientException clientException, ServiceException serviceException) {
OSSLog.logError("error: " + serviceException.getRawMessage());
}
});
task.waitUntilFinished();
参考資料
hotlink保護の完全なサンプルコードについては、『GitHub』をご参照ください。
バケットのホットリンク保護を設定するために呼び出すことができるAPI操作の詳細については、「PutBucketReferer」をご参照ください。
バケットのホットリンク保護設定を照会するために呼び出すことができるAPI操作の詳細については、「GetBucketReferer」をご参照ください。