Object Storage Service (OSS) は、public-read-write、public-read、private、default の 4 種類のオブジェクトレベルのアクセス制御リスト (ACL) を提供します。このトピックでは、バージョニングされたバケット内のオブジェクト ACL を管理する方法について説明します。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、「OssClient の作成」をご参照ください。
オブジェクトの ACL を設定するには、
oss:PutObjectAcl権限が必要です。オブジェクトの ACL を取得するには、oss:GetObjectAcl権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
オブジェクト ACL
オブジェクト ACL には 4 つのアクセス権限があります。
ACL 値 | 名前 | アクセス制御 |
public-read-write | 公開読み書き | 匿名ユーザーを含むすべてのユーザーが、オブジェクトの読み取りと書き込みを行えます。 |
public-read | 公開読み取り、非公開書き込み | オブジェクト所有者は読み取りおよび書き込み権限を持ちます。匿名ユーザーを含む他のユーザーは読み取り権限のみを持ちます。 |
private | 非公開 | オブジェクト所有者のみが読み取りおよび書き込み権限を持ちます。他のユーザーは権限がない限りオブジェクトにアクセスできません。 |
default | デフォルト | オブジェクトの ACL は、バケットの ACL と同じです。 |
オブジェクトの ACL は、そのオブジェクトが格納されているバケットの ACL よりも優先されます。たとえば、バケットの ACL が public-read で、バケット内のオブジェクトの ACL が private の場合、オブジェクト所有者のみがそのオブジェクトに対する読み取りおよび書き込み権限を持ちます。他のユーザーは権限がない限りオブジェクトにアクセスできません。
オブジェクト ACL の設定
デフォルトでは、putObjectAcl メソッドはオブジェクトの現在のバージョンの ACL を設定します。オブジェクトの現在のバージョンが削除マーカーの場合、OSS は 404 Not Found エラーを返します。リクエストでバージョン ID を指定して、オブジェクトの特定のバージョンの ACL を設定できます。
次のコードは、オブジェクト ACL の設定方法を示しています。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// 次の例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の値に置き換えてください。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。
$bucket= "<yourBucketName>";
// オブジェクトの完全なパスを指定します。パスにバケット名を含めないでください。例:example/test.txt。
$object = "<yourObjectName>";
// オブジェクトのバージョン ID を指定します。
$versionId = "<yourObjectVersionId>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// 指定したバージョンのオブジェクトの ACL を public-read に設定します。
$ossClient->putObjectAcl($bucket, $object, 'public-read', array(OssClient::OSS_VERSION_ID => $versionId));
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");オブジェクト ACL の設定方法の詳細については、「PutObjectACL」をご参照ください。
オブジェクト ACL の取得
デフォルトでは、getObjectAcl メソッドはオブジェクトの現在のバージョンの ACL を取得します。オブジェクトの現在のバージョンが削除マーカーの場合、OSS は 404 Not Found エラーを返します。リクエストでバージョン ID を指定して、オブジェクトの特定のバージョンの ACL を取得できます。
次のコードは、オブジェクト ACL の取得方法を示しています。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// 次の例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の値に置き換えてください。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。
$bucket= "<yourBucketName>";
// オブジェクトの完全なパスを指定します。パスにバケット名を含めないでください。例:example/test.txt。
$object = "<yourObjectName>";
// オブジェクトのバージョン ID を指定します。
$versionId = "<yourObjectVersionId>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// オブジェクトの ACL を取得します。
$acl = $ossClient->getObjectAcl($bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId));
printf($acl . "\n");
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");オブジェクト ACL の取得方法の詳細については、「GetObjectACL」をご参照ください。