URL署名を使用してアクセスを承認する
署名付きのURLを生成することによって、ユーザーに一時的なアクセスURLを提供できます。URLの生成中に、URLの有効期限を指定して、ユーザーのアクセス時間を制限することができます。
注:以下のシナリオの完全なコードは、GitHubにあります。
プライベートダウンロードリンクを使用する
GetObjectの署名付きURLを生成する例を以下に示します。
<?php
/**
* Generate a signed URL for GetObject for read access control when the private permission is assigned
*
* @param $ossClient OssClient OSSClient instance
* @param $bucket string Bucket name
* @return null
*/
function getSignedUrlForGettingObject($ossClient, $bucket)
{
$object = "test/test-signature-test-upload-and-download.txt";
$timeout = 3600; // The validity period for the URL is 3,600 seconds
try{
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": signedUrl: " . $signedUrl. "\n");
/**
* You can use similar code to access the signed URL, or access the signed URL in a browser
*/
$request = new RequestCore($signedUrl);
$request->set_method('GET');
$request->send_request();
$res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code());
if ($res->isOK()) {
print(__FUNCTION__ . ": OK" . "\n");
} else {
print(__FUNCTION__ . ": FAILED" . "\n");
};
}
注意:デフォルトでは、生成されたURLはGETアクセスをサポートしているため、ユーザーはブラウザ経由で関連コンテンツに直接アクセスできます。
プライベートアップロードリンクを使用する
ユーザーが他の一時的な操作(オブジェクトのアップロードや削除など)を実行できるようにするには、別のメソッドのURLに署名する必要があります。次のコードは、PUTメソッドのURLに署名します。
<?php
/**
* Generate a signed URL for PutObject for write access control when the private permission is assigned
*
* @param OssClient $ossClient OSSClient instance
* @param string $bucket Bucket name
* @return null
* @throws OssException
*/
function getSignedUrlForPuttingObject($ossClient, $bucket)
{
$object = "test/test-signature-test-upload-and-download.txt";
$timeout = 3600;
$options = NULL;
try{
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT");
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": signedUrl: " . $signedUrl. "\n");
$content = file_get_contents(__FILE__);
$request = new RequestCore($signedUrl);
$request->set_method('PUT');
$request->add_header('Content-Type', '');
$request->add_header('Content-Length', strlen($content));
$request->set_body($content);
$request->send_request();
$res = new ResponseCore($request->get_response_header(),
$request->get_response_body(), $request->get_response_code());
if ($res->isOK()) {
print(__FUNCTION__ . ": OK" . "\n");
} else {
print(__FUNCTION__ . ": FAILED" . "\n");
};
}
一時的な資格情報(STS)でアップロードしてダウンロードする
はじめに
OSSは、Alibaba Cloud STSサービスを介したアクセスの許可を一時的に付与することができます。Alibaba Cloud STS(Security Token Service)は、クラウドコンピューティングユーザーに一時的なアクセストークンを提供するWebサービスです。STSを使用すると、サードパーティのアプリケーションまたは連合ユーザー(ユーザーIDを管理できます)に、カスタム有効期間とアクセス権を持つアクセス資格情報を割り当てることができます。STSの詳細については、STS の概要を参照してください。
STS証明書を使用してOSSClientを作成する
STSの一時証明書を取得した後、ユーザのクライアントは、含まれているセキュリティトークン(SecurityToken)と一時アクセスキー(AccessKeyId、AccessKeySecret)を使用してOSSClientを生成します。
次のコードでは、一時的なSTS資格情報を使用してOSSClientを作成しています。
<?php
$accessKeyId = "<accessKeyId>";
$accessKeySecret = "<accessKeySecret>";
$securityToken = "<securityToken>";
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);