バケットポリシーは、Object Storage Service (OSS) のバケットに対する権限付与ポリシーです。 バケットポリシーを使用すると、Alibaba Cloud アカウント、Resource Access Management (RAM) ユーザー、RAM ロールなどの認証済みユーザー、または匿名ユーザーに対して、指定された OSS リソースへの詳細なアクセスを許可または拒否できます。 たとえば、別の Alibaba Cloud アカウントに属する RAM ユーザーに、指定された OSS リソースに対する読み取り専用権限を付与できます。
注意事項
バケットポリシーを設定する前に、この機能について理解してください。詳細については、「バケットポリシー」をご参照ください。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。 サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「OssClient の作成」をご参照ください。
バケットポリシーを設定するには、
oss:PutBucketPolicy権限が必要です。 バケットポリシーを取得するには、oss:GetBucketPolicy権限が必要です。 バケットポリシーを削除するには、oss:DeleteBucketPolicy権限が必要です。 詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。
バケットポリシーの設定
次のコードは、バケットポリシーを設定する方法を示しています:
<?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 = "https://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。 例:examplebucket。
$bucket= "examplebucket";
// 次の例では、バケットの所有者 (UID 174649585760xxxx) が、RAM ユーザー (UID 20214760404935xxxx) に examplebucket バケット内のすべてのファイルを一覧表示する権限を付与する方法を示します。
$policy = <<< BBBB
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:GetObject",
"oss:ListObjects"
],
"Principal": [
"20214760404935xxxx"
],
"Effect":"Allow",
"Resource":["acs:oss:*:174649585760xxxx:examplebucket/*"]
}
]
}
BBBB;
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// バケットポリシーを設定します。
$ossClient->putBucketPolicy($bucket, $policy);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");バケットポリシーの取得
次のコードは、バケットポリシーを取得する方法を示しています:
<?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";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// バケットポリシー構成を取得します。
$policy = $ossClient->getBucketPolicy($bucket);
// バケットポリシー構成を出力します。
print($policy);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");バケットポリシーの削除
次のコードは、バケットポリシーを削除する方法を示しています:
<?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";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// バケットポリシーを削除します。
$ossClient->deleteBucketPolicy($bucket);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");関連ドキュメント
バケットポリシーを設定する API 操作の詳細については、「PutBucketPolicy」をご参照ください。
バケットポリシーを取得する API 操作の詳細については、「GetBucketPolicy」をご参照ください。
バケットポリシーを削除する API 操作の詳細については、「DeleteBucketPolicy」をご参照ください。