このトピックでは、Harmony 用 Object Storage Service (OSS) SDK を使用してオブジェクトのアクセス制御リスト (ACL) を管理する方法について説明します。
使用上の注意
リージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
オブジェクトの ACL を設定するには、
oss:PutObjectAcl
権限が必要です。オブジェクトの ACL を照会するには、oss:GetObjectAcl
権限が必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。
ACL の種類
次の表に、オブジェクトに設定できる ACL について説明します。
ACL | 説明 | 値 |
バケットから継承 | オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL と同じです。 | default |
非公開 | オブジェクトの所有者と承認されたユーザーのみが、オブジェクトに対する読み取り権限と書き込み権限を持ちます。他のユーザーはオブジェクトにアクセスできません。 | private |
公開読み取り | オブジェクトの所有者と承認されたユーザーのみが、オブジェクトに対する読み取り権限と書き込み権限を持ちます。他のユーザーは、オブジェクトに対する読み取り権限のみを持ちます。オブジェクトの ACL をこの値に設定する場合は注意してください。 | public-read |
公開読み書き | すべてのユーザーが、オブジェクトに対する読み取り権限と書き込み権限を持ちます。オブジェクトの ACL をこの値に設定する場合は注意してください。 | public-read-write |
オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL よりも優先されます。たとえば、非公開バケット内のオブジェクトの ACL が 公開読み取り に設定されている場合、匿名ユーザーを含むすべてのユーザーがオブジェクトを読み取ることができます。オブジェクトの ACL が設定されていない場合、オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL と同じになります。
例
オブジェクトの ACL を設定する
import Client, { EObjectAcl, RequestError } from '@aliyun/oss';
// OSSClient インスタンスを作成します。
const client = new Client({
// Security Token Service (STS) から取得した AccessKey ID を指定します。
accessKeyId: 'yourAccessKeyId',
// STS から取得した AccessKey シークレットを指定します。
accessKeySecret: 'yourAccessKeySecret',
// STS から取得したセキュリティトークンを指定します。
securityToken: 'yourSecurityToken',
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
region: 'oss-cn-hangzhou',
});
// バケットの名前を指定します。
const bucket = 'yourBucketName';
// ACL を設定するオブジェクトの名前を指定します。
const key = 'yourObjectName';
/**
* オブジェクトの ACL を設定します。
* putObjectAcl メソッドを使用して、オブジェクトの ACL を設定します。
*/
const putObjectAcl = async () => {
try {
// putObjectAcl メソッドを使用して、オブジェクトの ACL を設定します。
const res = await client.putObjectAcl({
bucket, // バケットの名前を指定します。
key, // オブジェクトの名前を指定します。
acl: EObjectAcl.PRIVATE, // オブジェクトの ACL を private に設定します。
});
// リクエストの結果を表示します。
console.log(JSON.stringify(res));
} catch (err) {
// リクエスト中の例外をキャプチャします。
if (err instanceof RequestError) {
// 既知の種類のエラーが存在する場合は、エラーコード、エラーメッセージ、リクエスト ID、HTTP ステータスコード、EC などの情報を表示します。
console.log('code: ', err.code); // エラーコード。
console.log('message: ', err.message); // エラーメッセージ。
console.log('requestId: ', err.requestId); // リクエスト ID。
console.log('status: ', err.status); // HTTP ステータスコード。
console.log('ec: ', err.ec); // EC。
} else {
// その他の不明な種類のエラーを表示します。
console.log('unknown error: ', err);
}
}
};
// putObjectAcl 関数を呼び出して、オブジェクトの ACL を設定します。
putObjectAcl();
オブジェクトの ACL を照会する
import Client, { RequestError } from '@aliyun/oss';
// OSSClient インスタンスを作成します。
const client = new Client({
// Security Token Service (STS) から取得した AccessKey ID を指定します。
accessKeyId: 'yourAccessKeyId',
// STS から取得した AccessKey シークレットを指定します。
accessKeySecret: 'yourAccessKeySecret',
// STS から取得したセキュリティトークンを指定します。
securityToken: 'yourSecurityToken',
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
region: 'oss-cn-hangzhou',
});
// バケットの名前を指定します。
const bucket = 'yourBucketName';
// ACL を照会するオブジェクトの名前を指定します。
const key = 'yourObjectName';
/**
* オブジェクトの ACL を照会します。
* getObjectAcl メソッドを使用して、オブジェクトの ACL を照会します。
*/
const getObjectAcl = async () => {
try {
// getObjectAcl メソッドを使用して、オブジェクトの ACL を照会します。
const res = await client.getObjectAcl({
bucket, // バケットの名前を指定します。
key, // オブジェクトの名前を指定します。
});
// オブジェクトの ACL を表示します。
console.log(JSON.stringify(res));
} catch (err) {
// リクエスト中の例外をキャプチャします。
if (err instanceof RequestError) {
// 既知の種類のエラーが存在する場合は、エラーコード、エラーメッセージ、リクエスト ID、HTTP ステータスコード、EC などの情報を表示します。
console.log('code: ', err.code); // エラーコード。
console.log('message: ', err.message); // エラーメッセージ。
console.log('requestId: ', err.requestId); // リクエスト ID。
console.log('status: ', err.status); // HTTP ステータスコード。
console.log('ec: ', err.ec); // EC。
} else {
// その他の不明な種類のエラーを表示します。
console.log('unknown error: ', err);
}
}
};
// getObjectAcl 関数を呼び出して、オブジェクトの ACL を照会します。
getObjectAcl();