このトピックでは、OSS SDK for PHP を使用してオブジェクトのアクセス制御リスト (ACL) を管理する方法について説明します。
使用上の注意
このトピックのサンプルコードでは、
cn-hangzhouを使用しています。 デフォルトでは、バケットへのリクエストはパブリックエンドポイントを使用します。 ただし、同じリージョン内の別の Alibaba Cloud サービスからバケットにアクセスする場合は、パフォーマンスとセキュリティを向上させるために内部エンドポイントを使用してください。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。オブジェクトの ACL を構成するには、
oss:PutObjectAcl権限が必要です。 オブジェクトの ACL を照会するには、oss:GetObjectAcl権限が必要です。 詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。
ACL の種類
次の表に、オブジェクトに構成できる ACL を示します。
ACL | 説明 | 値 |
バケットから継承 | オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL と同じです。 | oss.ObjectACLDefault |
非公開 | オブジェクトの所有者と承認されたユーザーのみが、オブジェクトに対する読み取り権限と書き込み権限を持ちます。他のユーザーはオブジェクトにアクセスできません。 | oss.ObjectACLPrivate |
公開読み取り | オブジェクトの所有者と承認されたユーザーのみが、オブジェクトに対する読み取り権限と書き込み権限を持ちます。他のユーザーは、オブジェクトに対する読み取り権限のみを持ちます。オブジェクト ACL をこの値に設定する場合は注意してください。 | ObjectACLPublicRead |
公開読み取り/書き込み | すべてのユーザーが、オブジェクトに対する読み取り権限と書き込み権限を持ちます。オブジェクト ACL をこの値に設定する場合は注意してください。 | oss.ObjectACLPublicReadWrite |
オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL よりも優先されます。たとえば、非公開バケット内のオブジェクトの ACL が 公開読み取り に設定されている場合、匿名ユーザーを含むすべてのユーザーがオブジェクトを読み取ることができます。オブジェクトの ACL が構成されていない場合、オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL と同じです。
サンプルコード
1. オブジェクトの ACL を設定します。
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"bucket" => ['help' => 'The name of the bucket', 'required' => True],
"key" => ['help' => 'The name of the object', 'required' => True],
];
// Create an array of long options required by getopt. Example: --region:.
$longopts = array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Parse the command line parameters.
$options = getopt("", $longopts);
// Check whether the required parameters are missing.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
// Print the help information and exit if required parameters are missing.
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help\n";
exit(1);
}
}
// Extract the values of the parameters.
$region = $options["region"];
$bucket = $options["bucket"];
$key = $options["key"];
// 環境変数からアクセス認証情報 (AccessKey ID と AccessKey シークレット) を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
// エンドポイントパラメーターが指定されている場合は、カスタムアクセス URL として構成されます。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを初期化します。
$client = new Oss\Client($cfg);
// PutObjectAclRequest オブジェクトを作成し、バケット名、オブジェクトキー、および ACL を指定します。
$request = new Oss\Models\PutObjectAclRequest($bucket, $key, Oss\Models\ObjectACLType::PUBLIC_READ);
// オブジェクトの ACL を public-read に設定します。
$result = $client->putObjectAcl($request);
// レスポンスから HTTP ステータスコードとリクエスト ID を出力します。
printf(
'status code:' . $result->statusCode . PHP_EOL .
'request id:' . $result->requestId
);
2. バケットの ACL を照会します。
<?php
// 依存ライブラリを読み込むための autoload ファイルを導入します。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメータの説明を指定します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名', 'required' => False], // (オプション) OSS エンドポイントを指定します。
"bucket" => ['help' => 'バケットの名前', 'required' => True], // (必須) バケットの名前を指定します。
"key" => ['help' => 'オブジェクトの名前', 'required' => True], // (必須) オブジェクトの名前を指定します。
];
// コマンドラインパラメータを解析するための長いオプションリストを生成します。
$longopts = \array_map(function ($key) {
return "$key:"; // 各パラメータの末尾にコロン (:) を追加して、値が必要であることを示します。
}, array_keys($optsdesc));
// コマンドラインパラメータを解析します。
$options = getopt("", $longopts);
// 必須パラメータが欠落しているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 必須パラメータが表示されない場合に表示します。
exit(1);
}
}
// コマンドラインパラメータの値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
// 環境変数から AccessKey ID と AccessKey シークレットを読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト構成を使用します。
$cfg = Oss\Config::loadDefault();
// 認証プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);
// リージョンを指定します。
$cfg->setRegion($region);
// エンドポイントが指定されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// オブジェクトの ACL を取得するためのリクエストオブジェクトを作成します。
$request = new Oss\Models\GetObjectAclRequest(bucket: $bucket, key: $key);
// getObjectAcl メソッドを使用して、オブジェクトの ACL を照会します。
$result = $client->getObjectAcl($request);
// 結果を表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
'request id:' . $result->requestId . PHP_EOL . // リクエスト ID。
'acl:' . $result->accessControlList->grant // オブジェクトの ACL。
);
関連情報
オブジェクトの ACL を構成するために使用される完全なサンプルコードについては、GitHub にアクセスしてください。
オブジェクトの ACL を構成するために呼び出すことができる API 操作については、「PutObjectACL」をご参照ください。
オブジェクトの ACL を照会するために使用される完全なサンプルコードについては、GitHub にアクセスしてください。
オブジェクトの ACL を照会するために呼び出すことができる API 操作については、「GetObjectACL」をご参照ください。