このトピックでは、ファイルのアクセス権限を管理する方法について説明します。
前提条件
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「OssClient の作成」をご参照ください。
ファイルのアクセス権限を設定するには、
oss:PutObjectAcl権限が必要です。ファイルのアクセス権限を取得するには、oss:GetObjectAcl権限が必要です。詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。
アクセス制御リストの種類
ファイルには、4 種類のアクセス制御リスト (ACL) があります:
アクセス権限 | 説明 | アクセス権限の値 |
バケットから継承 | ファイルはバケットのアクセス権限を継承します。 | default |
非公開 | ファイル所有者と認可されたユーザーは、ファイルの読み書き権限を持ちます。他のユーザーはファイルにアクセスできません。 | private |
公開読み取り | ファイル所有者と認可されたユーザーは、ファイルの読み書き権限を持ちます。他のユーザーは読み取り権限のみを持ちます。この権限は注意して使用してください。 | public-read |
公開読み書き | すべてのユーザーがファイルの読み書き権限を持ちます。この権限は注意して使用してください。 | public-read-write |
ファイルの ACL は、バケットの ACL よりも優先されます。たとえば、バケットが非公開であっても、バケット内のファイルが公開読み書きに設定されている場合、すべてのユーザーがそのファイルの読み書き権限を持ちます。ファイルに ACL が設定されていない場合、ファイルはそのバケットの 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\Core\OssException;
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、エンドポイントは中国 (杭州) に設定されています。実際のエンドポイントを指定してください。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";
$object = "yourObjectName";
// ファイルの ACL を public-read に設定します。デフォルトでは、バケットの ACL を継承します。
$acl = "public-read";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
$ossClient->putObjectAcl($bucket, $object, $acl);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
ファイルのアクセス権限の取得
次のコードは、オブジェクトの 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\Core\OssException;
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、エンドポイントは中国 (杭州) に設定されています。実際のエンドポイントを指定してください。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";
$object = "yourObjectName";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
$objectAcl = $ossClient->getObjectAcl($bucket, $object);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
var_dump($objectAcl);