Object Storage Service (OSS) バケット内の特定のオブジェクトに対する読み取り権限と書き込み権限は、オブジェクトのアクセス制御リスト (ACL) を構成することで付与できます。オブジェクト ACL を使用すると、他のオブジェクトへのアクセス権限に影響を与えることなく、特定のオブジェクトに対する権限を管理できます。オブジェクトの ACL は、公開読み取り、公開読み書き、または非公開に設定できます。オブジェクトの ACL は、オブジェクトの作成時または既存のオブジェクトの ACL の変更時に構成できます。
使用上の注意
RAM ユーザーは、
oss:PutObjectAcl
権限を持っている必要があります。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。
オブジェクトの ACL を構成しない場合、デフォルトのオブジェクト ACL が使用されます。この場合、オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL と同じになります。
オブジェクト ACL をバケット ACL と異なる値に設定すると、オブジェクト ACL が優先されます。たとえば、バケット内のオブジェクトの ACL を公開読み取りに設定すると、バケットの ACL に関係なく、匿名リクエストを使用してオブジェクトにアクセスできます。
ACL の種類
次の表に、オブジェクトに構成できる ACL を示します。
ACL | 説明 |
public-read-write | 匿名ユーザーを含むすべてのユーザーが、オブジェクトのデータを読み書きできます。 警告 オブジェクト ACL をこの値に設定すると、すべてのユーザーがインターネット経由でオブジェクトにアクセスしてデータを書き込むことができます。これにより、バケット内のデータへの不正アクセスや高額な費用が発生する可能性があります。ユーザーが禁止されているデータまたは情報をバケットにアップロードした場合、お客様の正当な利益と権利が侵害される可能性があります。そのため、必要な場合を除き、バケットの ACL を public-read-write に設定しないことをお勧めします。 |
public-read | オブジェクト所有者のみがオブジェクトにデータを書き込むことができます。匿名ユーザーを含む他のユーザーは、オブジェクトを読み取るしかできません。 警告 これにより、バケット内のデータへの不正アクセスや高額な費用が発生する可能性があります。オブジェクト ACL を public-read に設定する場合は注意してください。 |
private | オブジェクト所有者のみが、バケット内のオブジェクトのデータを読み書きできます。他のユーザーはオブジェクトにアクセスできません。 説明 オブジェクト URL を送信して、非公開のオブジェクトをパートナーと共有できます。詳細については、「(推奨) URL に V4 署名を含める」をご参照ください。 |
default | オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL と同じです。 |
方法
OSS コンソールを使用する
OSS コンソール にログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションツリーで、オブジェクト管理 > オブジェクト を選択します。
オブジェクトの ACL を指定します。
[ACL の設定] パネルに移動します。
次のいずれかの方法で [ACL の設定] パネルに移動できます。
オブジェクトリストでオブジェクトを見つけ、[アクション] 列の 詳細 をクリックします。次に、[オブジェクト ACL] の横にある ACLを設定 をクリックします。
オブジェクトリストでオブジェクトを見つけ、[アクション] 列の
> ACLを設定 を選択します。
ACLを設定 パネルで、ビジネス要件に基づいて ACL を構成します。
OK をクリックします。
ossbrowser を使用する
ossbrowser を使用すると、OSS コンソールで実行できるのと同じオブジェクトレベルの操作を実行できます。 ossbrowser の画面の指示に従って、オブジェクトの ACL を変更できます。詳細については、「ossbrowser を使用する」をご参照ください。
OSS SDK を使用する
次のサンプルコードは、一般的なプログラミング言語の OSS SDK を使用してオブジェクトの ACL を変更する方法の例を示しています。他のプログラミング言語の OSS SDK を使用してオブジェクトの ACL を変更する方法の詳細については、「概要」をご参照ください。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
public class Demo {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際のエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めないでください。例: testfolder/exampleobject.txt。
String objectName = "testfolder/exampleobject.txt";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// オブジェクトの ACL を公開読み取りに設定します。
ossClient.setObjectAcl(bucketName, objectName, CannedAccessControlList.PublicRead);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
<?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 は、オブジェクトが格納されているバケットの 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");
const oss = require('ali-oss');
const client = oss({
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
region: 'yourregion',
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET を構成済みであることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケットの名前を指定します。
bucket: 'yourbucketname'
});
async function setACL() {
try {
// オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めないでください。
await client.putACL('yourObjectName', 'private');
console.log('Set ACL successfully');
} catch (e) {
console.error(e);
}
}
setACL();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
// Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めないでください。
bucket.put_object_acl('yourObjectName', oss2.OBJECT_ACL_PUBLIC_READ)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
<script>
const client = new OSS({
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
region: "yourRegion",
authorizationV4: true,
// STS から取得した一時的な AccessKey ペアを指定します。 AccessKey ペアは、AccessKey ID と AccessKey シークレットで構成されます。
accessKeyId: "yourAccessKeyId",
accessKeySecret: "yourAccessKeySecret",
// STS から取得したセキュリティトークンを指定します。
stsToken: "yourSecurityToken",
// バケットの名前を指定します。例: examplebucket。
bucket: "examplebucket",
});
async function getACL() {
try {
result = await client.getACL("examplefile.txt");
console.log(result.acl);
await client.putACL("examplefile.txt", "public-read");
result = await client.getACL("examplefile.txt");
console.log(result.acl);
} catch (e) {
console.log(e);
}
}
getACL();
</script>
</body>
</html>
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めないでください。例: exampledir/exampleobject.txt。
var objectName = "exampleobject.txt";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメータを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
// オブジェクトの ACL を構成します。
try
{
// SetObjectAcl を呼び出して、オブジェクトの ACL を構成します。
client.SetObjectAcl(bucketName, objectName, CannedAccessControlList.PublicRead);
Console.WriteLine("Set Object:{0} ACL succeeded ", objectName);
}
catch (Exception ex)
{
Console.WriteLine("Set Object ACL failed with error info: {0}", ex.Message);
}
// オブジェクトの ACL をクエリします。
try
{
// GetObjectAcl を呼び出して、オブジェクトの ACL をクエリします。
var result = client.GetObjectAcl(bucketName, objectName);
Console.WriteLine("Get Object ACL succeeded, Id: {0} ACL: {1}",
result.Owner.Id, result.ACL.ToString());
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID: {2}\tHostID: {3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
// バケットの名前とオブジェクトの完全なパスを指定します。この例では、バケットの名前は examplebucket で、オブジェクトの完全なパスは exampledir/exampleobject.txt です。完全なパスにはバケット名を含めないでください。
GetObjectACLRequest request = new GetObjectACLRequest("examplebucket", "exampledir/exampleobject.txt");
// Android 用 OSS SDK を使用してオブジェクトの ACL を構成することはできません。 Android 用 OSS SDK を使用してオブジェクトの ACL を取得することしかできません。
// 次のサンプルコードは、オブジェクトの ACL をクエリする方法の例を示しています。
oss.asyncGetObjectACL(request, new OSSCompletedCallback<GetObjectACLRequest, GetObjectACLResult>() {
@Override
public void onSuccess(GetObjectACLRequest request, GetObjectACLResult result) {
Log.d("GetObjectACL", "Success!");
Log.d("ObjectAcl", result.getObjectACL());
Log.d("Owner", result.getObjectOwner());
Log.d("ID", result.getObjectOwnerID());
}
@Override
public void onFailure(GetObjectACLRequest request, ClientException clientException, ServiceException serviceException) {
// リクエスト例外を処理します。
if (clientException != null) {
// クライアント側の例外 (ネットワークエラーなど) を処理します。
clientException.printStackTrace();
}
if (serviceException != null) {
// サーバー側の例外を処理します。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
OSSPutObjectACLRequest *request = [OSSPutObjectACLRequest new];
// バケットの名前を指定します。例: examplebucket。
request.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めないでください。例: exampleobject.txt。
request.objectKey = @"exampleobject.txt";
/**
* オブジェクト ACL を構成します。
* public-read
* private
* public-read-write
* default
*/
request.acl = @"private";
OSSTask * putObjectACLTask = [client putObjectACL:request];
[putObjectACLTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"put object ACL success!");
} else {
NSLog(@"put object ACL failed, error: %@", task.error);
}
return nil;
}];
// タスクが完了するまで同期ブロッキングを実装します。
// [putObjectACLTask waitUntilFinished];
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS へのアクセスに使用するアカウントに関する情報を初期化します。 */
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
std::string Region = "yourRegion";
/* バケットの名前を指定します。例: examplebucket。 */
std::string BucketName = "examplebucket";
/* オブジェクトの完全なパスを指定します。オブジェクトの完全なパスにはバケット名を含めないでください。例: exampledir/exampleobject.txt。 */
std::string ObjectName = "exampledir/exampleobject.txt";
/* ネットワークリソースなどのリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* オブジェクトの ACL を構成します。 */
SetObjectAclRequest request(BucketName, ObjectName);
request.setAcl(CannedAccessControlList::Private);
auto outcome = client.SetObjectAcl(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。 */
std::cout << "SetObjectAcl fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースなどのリソースを解放します。 */
ShutdownSdk();
return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケットの名前を指定します。例: examplebucket。 */
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めないでください。例: exampledir/exampleobject.txt。 */
const char *object_name = "exampledir/exampleobject.txt";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t 型のデータを初期化します。 */
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
// 2 つの追加パラメータを指定します。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME を使用するかどうかを指定します。値 0 は、CNAME が使用されていないことを示します。 */
options->config->is_cname = 0;
/* タイムアウト期間などのネットワークパラメータを指定します。 */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリを管理するためのメモリプールを作成します。 aos_pool_t は apr_pool_t と同等です。メモリプールを作成するために使用されるコードは、APR ライブラリに含まれています。 */
aos_pool_t *pool;
/* メモリプールを作成します。2 番目のパラメータの値は NULL です。この値は、プールが他のメモリプールを継承しないことを示します。 */
aos_pool_create(&pool, NULL);
/* オプションを作成して初期化します。このパラメータには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル構成情報が含まれます。 */
oss_request_options_t *oss_client_options;
/* メモリプールのメモリリソースをオプションに割り当てます。 */
oss_client_options = oss_request_options_create(pool);
/* oss_client_options を初期化します。 */
init_options(oss_client_options);
/* パラメータを初期化します。 */
aos_string_t bucket;
aos_string_t object;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
oss_acl_e oss_acl = OSS_ACL_PRIVATE;
/* オブジェクトの ACL を構成します。 */
resp_status = oss_put_object_acl(oss_client_options, &bucket, &object, oss_acl, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("put object acl success!\n");
} else {
printf("put object aclfailed!\n");
}
/* オブジェクトの ACL をクエリします。 */
aos_string_t oss_acl_string;
resp_status = oss_get_object_acl(oss_client_options, &bucket, &object, &oss_acl_string, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("get object acl success!\n");
printf("acl: %s \n", oss_acl_string.data);
} else {
printf("get object acl failed!\n");
}
/* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。 */
aos_pool_destroy(pool);
/* 割り当てられたグローバルリソースを解放します。 */
aos_http_io_deinitialize();
return 0;
}
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際のエンドポイントを指定してください。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケットの名前を指定します。例: examplebucket。
bucket = client.get_bucket('examplebucket')
# オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めないでください。例: exampledir/example.txt。
# オブジェクトのアップロード時に指定されたオブジェクト ACL をクエリします。
acl = bucket.get_object_acl('exampledir/example.txt')
puts acl
# オブジェクト ACL を変更します。
bucket.set_object_acl('exampledir/example.txt', Aliyun::OSS::ACL::PUBLIC_READ)
acl = bucket.get_object_acl('exampledir/example.txt')
puts acl
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
objectName string // オブジェクトの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// オブジェクトの名前が指定されているかどうかを確認します。
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// オブジェクトの ACL を構成するリクエストを作成します。
putRequest := &oss.PutObjectAclRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
Key: oss.Ptr(objectName), // オブジェクトの名前。
Acl: oss.ObjectACLPrivate, // オブジェクトの ACL を private に設定します。
}
// ACL を構成する操作を実行します。
putResult, err := client.PutObjectAcl(context.TODO(), putRequest)
if err != nil {
log.Fatalf("failed to put object acl %v", err)
}
// 結果を表示します。
log.Printf("put object acl result:%#v\n", putResult)
// ACL をクエリするリクエストを作成します。
getRequest := &oss.GetObjectAclRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
Key: oss.Ptr(objectName), // オブジェクトの名前。
}
// クエリ操作を実行します。
getResult, err := client.GetObjectAcl(context.TODO(), getRequest)
if err != nil {
log.Fatalf("failed to get object acl %v", err)
}
// クエリ結果を表示します。
log.Printf("get object acl result:%#v\n", getResult)
}
ossutil を使用する
ossutil を使用して、オブジェクトの ACL を構成または変更できます。 ossutil のインストールについては、「ossutil をインストールする」をご参照ください。
次のコードは、examplebucket の ACL を private に設定する方法を示しています。
ossutil api put-object-acl --bucket examplebucket --key exampleobject --object-acl private
詳細については、「put-object-acl」をご参照ください。
関連 API 操作
上記で説明したメソッドは、基本的に RESTful API に基づいて実装されています。ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。詳細については、「PutObjectACL」をご参照ください。
参考資料
非公開のオブジェクトを他のユーザーと共有するには、「プレサイン URL を使用してオブジェクトをダウンロードする」をご参照ください。
ブラウザを使用してオブジェクトにアクセスするときにオブジェクトをプレビューするには、「オブジェクトにアクセスしたときにオブジェクトをプレビューできない場合の対処方法」をご参照ください。