Object Storage Service (OSS) は、リソースベースの権限付与をサポートしています。これにより、ユーザーレベルではなくバケットレベルでアクセスポリシーを設定できます。 バケットポリシーを使用すると、Alibaba Cloud アカウントまたは他の Alibaba Cloud アカウント配下にある 1 つ以上の Resource Access Management (RAM) ユーザーまたは RAM ロールに、バケット内の指定されたリソースへのアクセスを許可できます。 ポリシー構文を使用するだけでなく、グラフィカルユーザーインターフェイス (GUI) を使用して、ビジネスシナリオに基づいて権限を迅速に付与することもできます。
注意事項
デフォルトでは、Alibaba Cloud アカウントにはバケットポリシーを設定する権限があります。 RAM ユーザーまたはセキュリティトークンサービス (STS) を使用してバケットポリシーを設定する場合は、
oss:PutBucketPolicy権限が必要です。 詳細については、「RAM ユーザーにカスタム権限を付与する」をご参照ください。バケットの所有者は、OSS コンソールで GUI またはポリシー構文を使用してバケットポリシーを設定できます。 ポリシー構文を使用してバケットポリシーを設定する前に、OSS の操作、リソース、および条件の分類を理解する必要があります。 詳細については、「RAM ポリシー」をご参照ください。
バケットポリシーを設定するときに、匿名リクエストを含むすべてのアカウント (*) に権限を付与し、Condition 要素を含めない場合、バケットポリシーはバケットの所有者を除くすべてのユーザーに適用されます。 すべてのアカウント (*) に権限を付与し、Condition 要素を含める場合、バケットポリシーはバケットの所有者を含むすべてのユーザーに適用されます。
重要Principal フィールドが空のリスト (例:
Principal:[]) に設定されている場合、その動作はすべてのアカウント (例:Principal:["*"]) に設定した場合と同じです。 これにより、匿名ユーザーを含むすべてのユーザーがリソースにアクセスできるようになります。 空の Principal リストを「すべてのユーザーへのアクセスを拒否する」と解釈しないでください。 これにより、意図しないパブリックアクセスのリスクが生じる可能性があります。 アクセスを制限するには、特定のユーザー UID を明示的に設定するか、Deny 効果を使用します。複数のバケットポリシーを追加できます。 ただし、すべてのバケットポリシーの合計サイズは 16 KB を超えることはできません。 バケットポリシーの各フィールドの長さは 4,095 バイトを超えることはできません。
シナリオ
バケットポリシーは通常、次のシナリオでの権限付与に使用されます。
クロスアカウントアクセスを許可するか、指定されたユーザーにバケット全体またはバケット内の特定のリソースを管理するためのアクセスを許可します。
読み取り専用、読み取り/書き込み、完全制御など、さまざまな権限を同じアカウントの異なる RAM ユーザーに付与して、バケットリソースにアクセスまたは管理させます。
権限付与ポリシーの設定
バケットポリシーの設定
コンソール
方法 1: GUI を使用してバケットポリシーを設定する
左側のナビゲーションウィンドウで、バケット をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、権限管理 > バケット承認ポリシー を選択します。
バケット承認ポリシー ページで、GUI で追加 タブをクリックし、新規権限 をクリックします。
新規権限 パネルで、次の表の説明に従ってパラメーターを設定し、OK をクリックします。
パラメーター
説明
関連リソース
他のユーザーにバケット全体またはバケット内の特定のリソースへのアクセスを許可します。
バケット全体: ポリシーはバケット全体に適用されます。
指定されたリソース: ポリシーは指定されたリソースにのみ適用されます。 指定されたリソースに対して複数のポリシーを設定できます。
フォルダレベルで権限を付与する
フォルダ内のすべてのサブディレクトリとファイルへのアクセスを許可するには、フォルダ名の末尾にワイルドカード文字 (*) を追加します。 たとえば、abc フォルダ内のすべてのサブディレクトリとファイルへのアクセスを許可するには、
abc/*と入力します。特定のファイルに権限を付与する
フォルダ内の特定のファイルへのアクセスを許可するには、バケット名なしでファイルの完全なパスを入力します。 たとえば、abc フォルダ内の myphoto.png ファイルへのアクセスを許可するには、
abc/myphoto.pngと入力します。
承認されたユーザー
アカウントタイプを選択して、さまざまなユーザーにリソースへのアクセスを許可します。
すべてのアカウント (*): このオプションを選択して、すべてのユーザーに指定されたリソースへのアクセスを許可します。
RAM ユーザー: このオプションを選択して、現在のアカウントの RAM ユーザーに指定されたリソースへのアクセスを許可します。 次に、ドロップダウンリストからターゲットの RAM ユーザーを選択します。 多くの RAM ユーザーに権限を付与するには、検索ボックスに RAM ユーザー名のキーワードを入力してあいまい一致させます。
重要アカウントは、Alibaba Cloud アカウントまたはバケットに対する管理権限と RAM コンソールでの ListUsers 権限を持つ RAM ユーザーである必要があります。 そうでない場合、現在のアカウントの RAM ユーザーのリストを表示できません。 RAM ユーザーに ListUsers 権限を付与する方法の詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
その他のアカウント: このオプションを選択して、他の Alibaba Cloud アカウント、RAM ユーザー、および RAM ロールにアクセス権限を付与します。
別の Alibaba Cloud アカウントまたは RAM ユーザーに権限を付与する場合は、承認されたアカウントの UID を入力します。
RAM ロールに権限を付与する場合は、
arn:sts::{RoleOwnerUid}:assumed-role/{RoleName}/{RoleSessionName}の形式を使用します。 たとえば、RAM ロールが testrole、ロール所有者の UID が137918634953xxxx、ロールセッション名が testsession の場合、arn:sts::137918634953xxxx:assumed-role/testrole/testsessionと入力します。 すべての RAM ロールに権限を付与するには、ワイルドカード文字 (*) を使用します。 たとえば、arn:sts::*:*/*/*と入力します。 詳細については、「AssumeRole - RAM ロールの一時的な ID 認証情報を取得する」をご参照ください。
重要承認されたオブジェクトが RAM ロールの場合、アカウントは OSS コンソールを介して承認されたリソースにアクセスできません。 ossutil、OSS SDK、または OSS API を使用して承認されたリソースにアクセスできます。 たとえば、ossutil を使用して承認されたリソースにアクセスするには、「一時的なトークンを使用してリソースにアクセスする」の指示に従ってアクセス資格情報を設定します。 次に、OSS リソースをリクエストして、バケットポリシーが有効であることを確認します。
許可された操作
[基本設定] または [詳細設定] を使用して権限を付与できます。
基本設定
このオプションを選択し、シナリオに基づいてアクセス権限を設定します。 各権限の横にある
アイコンにマウスを合わせると、対応する操作のリストが表示されます。読み取り専用 (ListObject を除く): 関連リソースの表示およびダウンロード権限を付与します。
読み取り専用 (ListObject を除く): 関連リソースの表示、一覧表示、およびダウンロード権限を付与します。
読み書き: 関連リソースに対する読み取りおよび書き込み権限を付与します。
フルコントロール: 読み取り、書き込み、削除権限を含む、関連リソースに対するすべての権限を付与します。
アクセス拒否: 関連リソースに対するすべての操作を拒否します。
重要OSS-HDFS サービスのユーザーが .dlsdata/ フォルダとそのオブジェクトにアクセスできるようにするには、OSS-HDFS が有効になっているバケットのバケットポリシーを設定するときに、[操作] を [アクセス拒否] に設定しないでください。
ユーザーに対して複数のバケットポリシールールを設定した場合、ユーザーの権限はすべてのポリシールールの合計になります。 これらのバケットポリシーのいずれかに拒否権限が含まれている場合、拒否権限が優先されます。 たとえば、最初にユーザーに読み取り専用権限を付与し、次に読み取り/書き込み権限を付与した場合、ユーザーの最終的な権限は読み取り/書き込みになります。 次にアクセス拒否権限を付与した場合、ユーザーの最終的な権限はアクセス拒否になります。
読み取り専用、読み取り/書き込み、およびフルコントロールの権限付与効果は Allow です。 アクセス拒否の権限付与効果は Deny です。
詳細設定
このオプションを選択し、次の設定を完了します。
効果: 権限付与の効果。 有効な値: Allow および Deny。
操作: OSS がサポートするすべての操作。 操作の分類の詳細については、「RAM ポリシー」をご参照ください。
条件 (オプション)
基本設定および詳細設定モードでこのオプションを選択して、条件を満たすユーザーのみに OSS リソースへのアクセスを制限することもできます。
アクセス方法: デフォルトでは、HTTP と HTTPS がサポートされています。 現在のポリシーで HTTPS 経由でのみバケットリソースへのアクセスを許可する場合は、[HTTPS] を選択します。 現在のポリシーで HTTP 経由でのみバケットリソースへのアクセスを許可する場合は、[HTTP] を選択します。 HTTPS は HTTP よりも高いセキュリティを提供します。
バケット内のリソースへのすべてのリクエストに対して HTTPS などの特定のアクセス方法を強制するには、ポリシー構文を使用する必要があります。 詳細については、「HTTPS リクエストと証明書を設定するにはどうすればよいですか?」をご参照ください。
IP =: IP アドレスを特定の IP アドレスまたは CIDR ブロックと等しくなるように設定します。 複数の IP アドレスがある場合は、カンマ (,) で区切ります。
IP ≠: IP アドレスを特定の IP アドレスまたは CIDR ブロックと等しくならないように設定します。 複数の IP アドレスがある場合は、カンマ (,) で区切ります。
VPC=: 特定の VPC または複数の VPC からのみリソースへのアクセスを許可します。 現在のアカウントで作成された VPC の VPC ID を選択するか、[他の VPC アカウントを入力] をクリックして、現在のアカウントまたは別のアカウントで作成された VPC の VPC ID を入力できます。 VPC の作成方法の詳細については、「VPC と vSwitch を作成する」をご参照ください。
VPC ≠: 特定の VPC からのリソースへのアクセスを拒否します。 現在のアカウントで作成された VPC の VPC ID を選択するか、[他の VPC アカウントを入力] をクリックして、現在のアカウントまたは別のアカウントで作成された VPC の VPC ID を入力できます。 VPC の作成方法の詳細については、「VPC と vSwitch を作成する」をご参照ください。
説明バケットポリシーで VPC (等しいまたは等しくない) と IP (等しいまたは等しくない) の両方の条件を指定した場合、条件は AND ロジックで結合されます。 これは、リクエストが VPC と IP の両方の条件を満たす必要があることを意味します。
[OK] をクリックします。
方法 2: ポリシー構文を使用してバケットポリシーを設定する
左側のナビゲーションウィンドウで、権限管理 > バケット承認ポリシー を選択します。
バケット承認ポリシー ページで、[構文で追加] タブをクリックし、[編集] をクリックします。
ポリシーエディターに、バケットポリシーを入力します。
さまざまなシナリオに対して異なるポリシー構文を記述して、詳細な権限管理を実装できます。 次の例は、リソース所有者 (UID:
174649585760xxxx) がさまざまな権限付与シナリオに対して設定したバケットポリシーを示しています。例 1: すべてのユーザーに examplebucket バケット内のすべてのファイルを一覧表示する権限を付与します。 次の例の Sid (ステートメント ID) は、ポリシー内のステートメントに対して読み取り可能な一意の識別子を提供します。 これは、区別、管理、および監査に使用され、権限自体には影響しません。
{ "Statement": [ { "Sid": "AllowListObjects", "Action": [ "oss:ListObjects", "oss:ListObjectVersions" ], "Effect": "Allow", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ] } ], "Version": "1" }例 2: ソース IP アドレスが
192.168.0.0/16の範囲にないすべてのユーザーが examplebucket バケットで何らかの操作を実行することを拒否します。{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": "oss:*", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ], "Condition":{ "NotIpAddress": { "acs:SourceIp": ["192.168.0.0/16"] } } } ] }例 3: 指定された RAM ユーザー (UID:
20214760404935xxxx) に、examplebucket バケット内のhangzhou/2020およびhangzhou/2015ディレクトリに対する読み取り専用権限を付与します。{ "Statement": [ { "Action": [ "oss:GetObject", "oss:GetObjectAcl", "oss:GetObjectVersion", "oss:GetObjectVersionAcl" ], "Effect": "Allow", "Principal": [ "20214760404935xxxx" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*", "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2015/*" ] }, { "Action": [ "oss:ListObjects", "oss:ListObjectVersions" ], "Condition": { "StringLike": { "oss:Prefix": [ "hangzhou/2020/*", "hangzhou/2015/*" ] } }, "Effect": "Allow", "Principal": [ "20214760404935xxxx" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ] } ], "Version": "1" }
[保存] をクリックします。 表示されるダイアログボックスで、[OK] をクリックします。
ossutil
コマンドラインツールである ossutil を使用して、バケットのポリシーを設定できます。 ossutil をインストールするには、「ossutil をインストールする」をご参照ください。
次のコマンドは、examplebucket バケットのアクセスポリシーを設定します。 このポリシーは、ID が 1234567890 のユーザーがバケット内のすべてのオブジェクトに対して PutObject および GetObject 操作を実行する権限を拒否します。
ossutil api put-bucket-policy --bucket examplebucket --body "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:PutObject\",\"oss:GetObject\"],\"Effect\":\"Deny\",\"Principal\":[\"1234567890\"],\"Resource\":[\"acs:oss:*:1234567890:*/*\"]}]}"このコマンドの詳細については、「put-bucket-policy」をご参照ください。
SDK
次のコードは、一般的なソフトウェア開発キット (SDK) を使用してバケットポリシーを設定する方法の例を示しています。 他の SDK を使用してバケットポリシーを設定する方法については、「OSS SDK の概要」をご参照ください。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
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";
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// リソースを解放するには、不要になったときに OSSClient インスタンスをシャットダウンします。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 次の例では、バケット所有者 (UID 174649585760xxxx) がバケットポリシーを使用して、RAM ユーザー (UID 20214760404935xxxx) に examplebucket 内のすべてのオブジェクトを一覧表示する権限を付与します。
String policyText = "{\"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"oss:GetObject\", \"oss:ListObjects\"], \"Principal\": [\"20214760404935xxxx\"], \"Resource\": [\"acs:oss:*:174649585760xxxx:examplebucket/*\"]}], \"Version\": \"1\"}";
// バケットポリシーを設定します。
ossClient.setBucketPolicy(bucketName, policyText);
} 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 = "https://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。 たとえば、examplebucket です。
$bucket= "examplebucket";
// 次の例は、リソース所有者 (UID 174649585760xxxx のバケットの所有者) がバケットポリシーを使用して、指定されたユーザー (UID 20214760404935xxxx の RAM ユーザー) に 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");const OSS = require('ali-oss')
const client = new 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,
// バケットの名前を指定します。 例: examplebucket。
bucket: 'examplebucket'
});
// 次の例では、UID が 174649585760xxxx のバケット所有者がバケットポリシーを使用して、UID が 20214760404935xxxx の RAM ユーザーに examplebucket バケット内のすべてのオブジェクトを一覧表示する権限を付与します。
const policy = {
Version: '1',
Statement: [
{
Action: ['oss:ListObjects', 'oss:GetObject'],
Effect: 'Allow',
Principal: ['20214760404935xxxx'],
Resource: ['acs:oss:*:174649585760xxxx:examplebucket']
}
]
};
async function putPolicy() {
const result = await client.putBucketPolicy('examplebucket', policy);
console.log(result)
}
putPolicy()# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import json
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、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"
# エンドポイントにマッピングされるリージョンの ID を指定します。 例: cn-hangzhou。 このパラメーターは、署名アルゴリズム V4 を使用する場合に必要です。
region = "cn-hangzhou"
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# 次の例では、UID が 174649585760xxxx のバケット所有者がバケットポリシーを使用して、UID が 20214760404935xxxx の RAM ユーザーに examplebucket 内のすべてのオブジェクトを一覧表示する権限を付与します。
policy_text = '{"Statement": [{"Effect": "Allow", "Action": ["oss:GetObject", "oss:ListObjects"], "Principal": ["20214760404935xxxx"], "Resource": ["acs:oss:*:174649585760xxxx:examplebucket/*"]}], "Version": "1"}'
# バケットポリシーを設定します。
bucket.put_bucket_policy(policy_text)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");
// バケットの名前を指定します。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);
try
{
// 次の例では、UID が 174649585760xxxx のバケット所有者がバケットポリシーを使用して、UID が 20214760404935xxxx の RAM ユーザーに examplebucket バケット内のすべてのオブジェクトを一覧表示する権限を付与します。
string policy = "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:ListObjects\",\"oss:GetObject\"], \"Principal": \"20214760404935xxxx"\, \"Resource\": \"acs:oss:*:174649585760xxxx:examplebucket\*",\"Effect\": \"Allow\"}]}\n";
var request = new SetBucketPolicyRequest(bucketName, policy);
client.SetBucketPolicy(request);
Console.WriteLine("Set bucket:{0} Policy succeeded ", bucketName);
}
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);
}#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";
/* ネットワークリソースなどのリソースを初期化します。 */
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);
/* 次の例では、UID が 174649585760xxxx のバケット所有者がバケットポリシーを使用して、UID が 20214760404935xxxx の RAM ユーザーに examplebucket バケット内のすべてのオブジェクトを一覧表示する権限を付与します。 */
std::string policy =
R"(
{
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:ListObjects"
],
"Principal": [
"20214760404935xxxx"
],
"Effect" : "Allow",
"Resource" : ["acs:oss:*:174649585760xxxx:examplebucket/*"]
}
],
"Version": "1"
}
)";
SetBucketPolicyRequest request(BucketName);
request.setPolicy(policy);
auto outcome = client.SetBucketPolicy(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。 */
std::cout << "Set Bucket Policy fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
}
/* ネットワークリソースなどのリソースを解放します。 */
ShutdownSdk();
return 0;
}package main
import (
"context"
"flag"
"log"
"strings"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // リージョン。
bucketName string // バケット名。
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットポリシーを定義します。
policy := `{
"Version": "1",
"Statement": [
{
"Action": [
"oss:PutObject",
"oss:GetObject"
],
"Effect": "Deny",
"Principal": ["1234567890"],
"Resource": ["acs:oss:*:1234567890:*/*"]
}
]
}`
// バケットポリシーを設定するリクエストを作成します。
request := &oss.PutBucketPolicyRequest{
Bucket: oss.Ptr(bucketName), // バケット名。
Body: strings.NewReader(policy), // バケットポリシー。
}
// バケットポリシーを設定する操作を実行します。
result, err := client.PutBucketPolicy(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket policy %v", err)
}
// バケットポリシーの設定結果を出力します。
log.Printf("put bucket policy result:%#v\n", result)
}
ossbrowser
ossbrowser GUI ツールを使用する
API
PutBucketPolicy 操作を呼び出して、バケットの権限付与ポリシーを設定します。
ベクターバケットの権限付与ポリシーの設定
コンソール
[ベクターバケット] ページで、ターゲットバケットをクリックします。 左側のナビゲーションウィンドウで、[権限管理] > [バケットポリシー] を選択します。
[構文で追加] をクリックし、ポリシーエディターにポリシーの内容を入力します。 たとえば、
my-vector-bucket内のベクトルデータに対する読み取りおよび書き込み権限をユーザーに付与するには、次のようにします。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:PutVectors", "oss:GetVectors" ], "Principal": [ "*" ], "Resource": [ "acs:ossvector:*:*:my-vector-bucket/my-index/*" ] } ] }[OK] をクリックしてポリシーを作成します。
ossutil
次の例は、vector-policy.json という名前の JSON 設定ファイルを使用してバケットポリシーを設定する方法を示しています。 このファイルには次の内容が含まれています。
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:PutVectors",
"oss:GetVectors"
],
"Effect":"Deny",
"Principal":["1234567890"],
"Resource":["acs:ossvector:cn-hangzhou:1234567890:*"]
}
]
}ossutil vectors-api put-bucket-policy --bucket vector-example --body file://vector-policy.jsonJSON 設定パラメーターを使用して、ベクターバケットのバケットポリシーを設定できます。
ossutil vectors-api put-bucket-policy --bucket vector-example --body "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:PutVectors\",\"oss:GetVectors\",\"oss:QueryVectors\"],\"Effect\":\"Allow\",\"Principal\":[\"1234567890\"],\"Resource\":[\"acs:ossvector:cn-hangzhou:1234567890:bucket/vector-example/*\"]}]}"SDK
Python
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors
parser = argparse.ArgumentParser(description="vector put bucket policy sample")
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--account_id', help='アカウント ID。', required=True)
def main():
args = parser.parse_args()
# 環境変数から資格情報の値を読み込む
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定を使用する
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
cfg.account_id = args.account_id
if args.endpoint is not None:
cfg.endpoint = args.endpoint
vector_client = oss_vectors.Client(cfg)
policy_content = '''
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:PutVectors",
"oss:GetVectors"
],
"Effect":"Deny",
"Principal":["1234567890"],
"Resource":["acs:ossvector:cn-hangzhou:1234567890:*"]
}
]
}
'''
result = vector_client.put_bucket_policy(oss_vectors.models.PutBucketPolicyRequest(
bucket=args.bucket,
body=policy_content
))
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
if __name__ == "__main__":
main()Go
package main
import (
"context"
"flag"
"log"
"strings"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/vectors"
)
var (
region string
bucketName string
accountId string
)
func init() {
flag.StringVar(®ion, "region", "", "ベクターバケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "ベクターバケットの名前。")
flag.StringVar(&accountId, "account-id", "", "ベクターアカウントの ID。")
}
func main() {
flag.Parse()
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, accountId required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId)
client := vectors.NewVectorsClient(cfg)
request := &vectors.PutBucketPolicyRequest{
Bucket: oss.Ptr(bucketName),
Body: strings.NewReader(`{
"Version":"1",
"Statement":[
{
"Action":[
"oss:PutVectors",
"oss:GetVectors"
],
"Effect":"Deny",
"Principal":["1234567890"],
"Resource":["acs:ossvector:cn-hangzhou:1234567890:*"]
}
]
}`),
}
result, err := client.PutBucketPolicy(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put vector bucket policy %v", err)
}
log.Printf("put vector bucket policy result:%#v\n", result)
}
API
PutBucketPolicy 操作を呼び出して、ベクターバケットの権限付与ポリシーを設定します。
承認されたリソースへのアクセス
バケットポリシーを設定した後、次の方法で承認されたリソースにアクセスできます。
ファイル URL (承認されたプリンシパルがすべてのユーザーである場合のみ)
ブラウザで、バケットのデフォルトドメイン名またはカスタムドメイン名とファイルパスを使用してリソースにアクセスします。 たとえば、
http://mybucket.oss-cn-beijing.aliyuncs.com/file/myphoto.pngです。 詳細については、「IPv6 経由で OSS にアクセスする」をご参照ください。コンソール
OSS コンソールにログインします。 左側のナビゲーションウィンドウで、[お気に入りのパス] の横にあるプラス記号 (+) をクリックして、アクセスが許可されているバケットとファイルパスを追加します。 詳細については、「アクセスパス」をご参照ください。
ossutil コマンドラインインターフェイス
承認されたアカウントを使用して、ossutil を介して承認されたリソースにアクセスできます。 詳細については、「ossutil」をご参照ください。
ossbrowser GUI ツール
承認されたアカウントで ossbrowser にログオンします。[プリセット OSS パス] フィールドに、アクセス権限のあるファイルディレクトリを入力します。詳細については、「ossbrowser 1.0」をご参照ください。
OSS SDK
Java、PHP、Node.js、Python、Browser.js、.NET、Android、Go、iOS、C++、および C SDK を使用して、承認されたリソースにアクセスできます。