Object Storage Service (OSS) mendukung otorisasi berbasis sumber daya, memungkinkan Anda mengatur kebijakan akses di tingkat bucket, bukan di tingkat pengguna. Kebijakan bucket dapat digunakan untuk memberikan izin kepada satu atau beberapa Pengguna RAM atau peran RAM di bawah Akun Alibaba Cloud Anda atau akun lainnya untuk mengakses sumber daya tertentu dalam sebuah bucket. Selain menggunakan sintaksis kebijakan, Anda juga dapat menggunakan antarmuka pengguna grafis (GUI) untuk memberikan izin dengan cepat sesuai skenario bisnis Anda.
Peringatan
Secara default, Akun Alibaba Cloud memiliki izin untuk mengonfigurasi kebijakan bucket. Jika ingin menggunakan Pengguna RAM atau Layanan Token Keamanan (STS) untuk mengonfigurasi kebijakan bucket, Anda harus memiliki izin
oss:PutBucketPolicy. Untuk informasi lebih lanjut, lihat Memberikan izin khusus kepada Pengguna RAM.Pemilik bucket dapat mengonfigurasi kebijakan bucket di Konsol OSS menggunakan GUI atau sintaksis kebijakan. Sebelum mengonfigurasi kebijakan bucket menggunakan sintaksis kebijakan, Anda harus memahami klasifikasi dari aksi OSS, sumber daya, dan kondisi. Untuk informasi lebih lanjut, lihat Kebijakan RAM.
Saat mengonfigurasi kebijakan bucket, jika Anda memberikan izin kepada semua akun (*), termasuk permintaan anonim, tanpa menyertakan elemen Condition, kebijakan bucket berlaku untuk semua pengguna kecuali pemilik bucket. Namun, jika Anda memberikan izin kepada semua akun (*) dan menyertakan elemen Condition, kebijakan bucket berlaku untuk semua pengguna, termasuk pemilik bucket.
PentingJika bidang Principal diatur sebagai daftar kosong (contohnya,
Principal:[]), perilakunya identik dengan mengaturnya ke semua akun (contohnya,Principal:["*"]). Ini memungkinkan semua pengguna, termasuk pengguna anonim, untuk mengakses sumber daya tersebut. Jangan menafsirkan daftar Principal kosong sebagai "tolak akses untuk semua pengguna." Hal ini dapat menyebabkan risiko akses publik yang tidak disengaja. Untuk membatasi akses, konfigurasikan UID pengguna tertentu secara eksplisit atau gunakan efek Deny.Anda dapat menambahkan beberapa kebijakan bucket. Namun, ukuran total dari semua kebijakan bucket tidak boleh melebihi 16 KB. Panjang setiap bidang dalam kebijakan bucket tidak boleh melebihi 4.095 byte.
Skenario
Kebijakan bucket biasanya digunakan untuk otorisasi dalam skenario berikut:
Memberikan akses lintas akun atau memberikan akses kepada pengguna tertentu untuk mengelola seluruh bucket atau sumber daya tertentu di dalam bucket.
Memberikan izin yang berbeda, seperti read-only, baca/tulis, atau Kontrol penuh, kepada Pengguna RAM yang berbeda di bawah akun yang sama untuk mengakses atau mengelola sumber daya bucket.
Konfigurasikan kebijakan otorisasi
Konfigurasikan kebijakan bucket
Konsol
Metode 1: Konfigurasikan kebijakan bucket menggunakan GUI
Di panel navigasi di sebelah kiri, klik Buckets. Di halaman Buckets, temukan dan klik bucket yang diinginkan.
Di panel navigasi di sebelah kiri, pilih Permission Control > Bucket Policy.
Di halaman Bucket Policy, klik tab Add in GUI lalu klik Authorize.
Di panel Authorize, konfigurasikan parameter seperti yang dijelaskan dalam tabel berikut lalu klik OK.
Parameter
Deskripsi
Applied To
Berikan akses pengguna lain ke seluruh bucket atau sumber daya tertentu dalam bucket.
Whole Bucket: Kebijakan berlaku untuk seluruh bucket.
Specific Resources: Kebijakan hanya berlaku untuk sumber daya yang ditentukan. Anda dapat mengonfigurasi beberapa kebijakan untuk sumber daya yang ditentukan.
Berikan izin pada tingkat folder
Untuk memberikan akses ke semua subdirektori dan file dalam sebuah folder, tambahkan karakter wildcard (*) ke nama folder. Misalnya, untuk memberikan akses ke semua subdirektori dan file dalam folder abc, masukkan
abc/*.Berikan izin ke file tertentu
Untuk memberikan akses ke file tertentu dalam sebuah folder, masukkan jalur lengkap file tanpa nama bucket. Misalnya, untuk memberikan akses ke file myphoto.png dalam folder abc, masukkan
abc/myphoto.png.
Authorized User
Berikan akses ke sumber daya kepada pengguna yang berbeda dengan memilih jenis akun.
All Accounts (*): Pilih opsi ini untuk memberikan semua pengguna akses ke sumber daya yang ditentukan.
RAM User: Pilih opsi ini untuk memberikan pengguna RAM di bawah akun saat ini akses ke sumber daya yang ditentukan. Lalu, pilih pengguna RAM target dari daftar drop-down. Untuk memberikan izin kepada banyak pengguna RAM, masukkan kata kunci nama pengguna RAM di kotak pencarian untuk pencocokan fuzzy.
PentingAkun Anda harus berupa Akun Alibaba Cloud atau Pengguna RAM yang memiliki izin manajemen pada bucket dan izin ListUsers di konsol RAM. Jika tidak, Anda tidak dapat melihat daftar pengguna RAM untuk akun saat ini. Untuk informasi lebih lanjut tentang cara memberikan izin ListUsers kepada Pengguna RAM, lihat Berikan izin kepada Pengguna RAM.
Other Account: Pilih opsi ini untuk memberikan izin akses ke akun Alibaba Cloud lain, Pengguna RAM, dan Peran RAM.
Saat Anda memberikan izin kepada akun Alibaba Cloud lain atau Pengguna RAM, masukkan UID akun yang diberi otorisasi.
Saat Anda memberikan izin kepada Peran RAM, gunakan format
arn:sts::{RoleOwnerUid}:assumed-role/{RoleName}/{RoleSessionName}. Sebagai contoh, jika peran RAM adalah testrole, UID pemilik peran adalah137918634953xxxx, dan nama sesi peran adalah testsession, masukkanarn:sts::137918634953xxxx:assumed-role/testrole/testsession. Untuk memberikan izin ke semua peran RAM, gunakan karakter wildcard (*). Sebagai contoh, masukkanarn:sts::*:*/*/*. Untuk informasi lebih lanjut, lihat AssumeRole - Dapatkan kredensial identitas sementara dari peran RAM.
PentingSaat objek yang diberi otorisasi adalah peran RAM, akun tidak dapat mengakses sumber daya yang diberi otorisasi melalui konsol OSS. Anda dapat mengakses sumber daya yang diberi otorisasi menggunakan ossutil, SDK OSS, atau API OSS. Sebagai contoh, untuk mengakses sumber daya yang diberi otorisasi menggunakan ossutil, konfigurasikan kredensial akses dengan mengikuti instruksi di Akses sumber daya menggunakan token sementara. Kemudian, minta sumber daya OSS untuk memverifikasi bahwa kebijakan bucket efektif.
Authorized Operation
Anda dapat memberikan izin menggunakan Basic Settings atau Advanced Settings.
Pengaturan Dasar
Pilih opsi ini dan konfigurasikan izin akses berdasarkan skenario Anda. Arahkan mouse ke ikon
di sebelah setiap izin untuk melihat daftar tindakan yang sesuai.Read-Only (excluding ListObject): Memberikan izin untuk melihat dan mengunduh sumber daya terkait.
Read-Only (including ListObject): Memberikan izin untuk melihat, mencantumkan, dan mengunduh sumber daya terkait.
Read/Write: Memberikan izin baca dan tulis pada sumber daya terkait.
Full Access: Memberikan semua izin pada sumber daya terkait, termasuk izin baca, tulis, dan hapus.
Deny Access: Menolak semua operasi pada sumber daya terkait.
PentingUntuk memastikan bahwa pengguna layanan OSS-HDFS dapat mengakses folder .dlsdata/ dan objeknya, jangan atur Tindakan ke Tolak Akses saat Anda mengonfigurasi kebijakan bucket untuk bucket dengan OSS-HDFS diaktifkan.
Jika Anda mengonfigurasi beberapa aturan kebijakan bucket untuk pengguna, izin pengguna tersebut adalah gabungan dari semua aturan kebijakan. Jika salah satu dari kebijakan bucket ini mencakup izin penolakan, izin penolakan akan diutamakan. Sebagai contoh, jika Anda pertama kali memberikan izin hanya-baca kepada pengguna dan kemudian memberikan izin baca/tulis, izin akhir pengguna adalah baca/tulis. Jika Anda kemudian memberikan izin tolak akses, izin akhir pengguna adalah tolak akses.
Efek otorisasi untuk Hanya-Baca, Baca/Tulis, dan Kontrol Penuh adalah Izinkan. Efek otorisasi untuk Tolak Akses adalah Tolak.
Pengaturan Lanjutan
Pilih opsi ini dan lengkapi konfigurasi berikut.
Effect: Efek otorisasi. Nilai valid: Izinkan dan Tolak.
Actions: Semua tindakan yang didukung oleh OSS. Untuk informasi lebih lanjut tentang klasifikasi tindakan, lihat Kebijakan RAM.
Condition (Opsional)
Anda juga dapat memilih opsi ini dalam mode Pengaturan Dasar dan Pengaturan Lanjutan untuk membatasi akses ke sumber daya OSS hanya kepada pengguna yang memenuhi kondisi.
Access Method: Secara default, HTTP dan HTTPS didukung. Jika Anda ingin kebijakan saat ini hanya mengizinkan akses ke sumber daya bucket melalui HTTPS, pilih HTTPS. Jika Anda ingin kebijakan saat ini hanya mengizinkan akses ke sumber daya bucket melalui HTTP, pilih HTTP. HTTPS memberikan keamanan yang lebih tinggi dibandingkan HTTP.
Untuk menegakkan metode akses tertentu, seperti HTTPS, untuk semua permintaan ke sumber daya dalam bucket, Anda harus menggunakan sintaksis kebijakan. Untuk informasi lebih lanjut, lihat Bagaimana cara mengonfigurasi permintaan HTTPS dan sertifikat?.
IP =: Mengatur alamat IP agar sama dengan alamat IP atau blok CIDR tertentu. Jika ada beberapa alamat IP, pisahkan dengan koma (,).
IP ≠: Mengatur alamat IP agar tidak sama dengan alamat IP atau blok CIDR tertentu. Jika ada beberapa alamat IP, pisahkan dengan koma (,).
VPC=: Mengizinkan akses ke sumber daya hanya dari VPC tertentu atau beberapa VPC. Anda dapat memilih ID VPC dari VPC yang dibuat di bawah akun saat ini, atau klik Enter Other VPC Account untuk memasukkan ID VPC dari VPC yang dibuat di bawah akun saat ini atau akun lain. Untuk informasi lebih lanjut tentang cara membuat VPC, lihat Buat VPC dan vSwitch.
VPC ≠: Menolak akses ke sumber daya dari VPC tertentu. Anda dapat memilih ID VPC dari VPC yang dibuat di bawah akun saat ini, atau klik Enter Other VPC Account untuk memasukkan ID VPC dari VPC yang dibuat di bawah akun saat ini atau akun lain. Untuk informasi lebih lanjut tentang cara membuat VPC, lihat Buat VPC dan vSwitch.
CatatanJika Anda menentukan baik kondisi VPC (sama dengan atau tidak sama dengan) maupun kondisi IP (sama dengan atau tidak sama dengan) dalam kebijakan bucket, kondisi tersebut digabungkan dengan logika AND. Ini berarti permintaan harus memenuhi kedua kondisi VPC dan IP.
Klik OK.
Metode 2: Konfigurasikan kebijakan bucket menggunakan sintaksis kebijakan
Di panel navigasi di sebelah kiri, pilih Permission Control > Bucket Policy.
Di halaman Bucket Policy, klik tab Add By Syntax lalu klik Edit.
Di editor kebijakan, masukkan kebijakan bucket.
Anda dapat menulis sintaksis kebijakan yang berbeda untuk skenario yang berbeda guna menerapkan manajemen izin yang detail halus. Contoh berikut menunjukkan kebijakan bucket yang dikonfigurasi oleh pemilik sumber daya (UID:
174649585760xxxx) untuk skenario otorisasi yang berbeda.Contoh 1: Berikan semua pengguna izin untuk mencantumkan semua file dalam bucket examplebucket. Sid (Statement ID) dalam contoh berikut memberikan pengenal unik yang mudah dibaca untuk pernyataan dalam kebijakan. Digunakan untuk diferensiasi, manajemen, dan audit, dan tidak memengaruhi izin itu sendiri.
{ "Statement": [ { "Sid": "AllowListObjects", "Action": [ "oss:ListObjects", "oss:ListObjectVersions" ], "Effect": "Allow", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ] } ], "Version": "1" }Contoh 2: Tolak semua pengguna yang alamat IP sumbernya tidak berada dalam rentang
192.168.0.0/16untuk melakukan operasi apa pun pada bucket examplebucket.{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": "oss:*", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ], "Condition":{ "NotIpAddress": { "acs:SourceIp": ["192.168.0.0/16"] } } } ] }Contoh 3: Berikan pengguna RAM tertentu (UID:
20214760404935xxxx) izin hanya-baca pada direktorihangzhou/2020danhangzhou/2015dalam bucket examplebucket.{ "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" }
Klik Save. Di kotak dialog yang muncul, klik OK.
ossutil
Anda dapat menggunakan ossutil, alat baris perintah, untuk menetapkan kebijakan untuk bucket. Untuk menginstal ossutil, lihat Instal ossutil.
Perintah berikut menetapkan kebijakan akses untuk bucket examplebucket. Kebijakan menolak pengguna dengan ID 1234567890 izin untuk melakukan operasi PutObject dan GetObject pada semua objek dalam bucket.
ossutil api put-bucket-policy --bucket examplebucket --body "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:PutObject\",\"oss:GetObject\"],\"Effect\":\"Deny\",\"Principal\":[\"1234567890\"],\"Resource\":[\"acs:oss:*:1234567890:*/*\"]}]}"Untuk informasi lebih lanjut tentang perintah ini, lihat put-bucket-policy.
SDK
Kode berikut memberikan contoh cara mengonfigurasi kebijakan bucket menggunakan kit pengembangan perangkat lunak (SDK) umum. Untuk informasi tentang cara mengonfigurasi kebijakan bucket menggunakan SDK lainnya, lihat Pengenalan SDK OSS.
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 {
// Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
String region = "cn-hangzhou";
// Buat instance OSSClient.
// Untuk melepaskan sumber daya, matikan instance OSSClient ketika tidak lagi diperlukan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Dalam contoh berikut, pemilik bucket (UID 174649585760xxxx) menggunakan kebijakan bucket untuk memberikan izin kepada pengguna RAM (UID 20214760404935xxxx) untuk melihat dan mencantumkan semua objek dalam examplebucket.
String policyText = "{\"Statement\": [{\"Effect\": \"Allow\", \"\"Action\": [\"oss:GetObject\", \"oss:ListObjects\"], \"Principal\": [\"20214760404935xxxx\"], \"Resource\": [\"acs:oss:*:174649585760xxxx:examplebucket/*\"]}], \"Version\": \"1\"}";
// Konfigurasikan kebijakan bucket.
ossClient.setBucketPolicy(bucketName, policyText);
} catch (OSSException oe) {
System.out.println("Tangkap OSSException, yang berarti permintaan Anda sampai di OSS, "
+ "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Tangkap ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Kesalahan:" + 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;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
$provider = new EnvironmentVariableCredentialsProvider();
// Wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan wilayah sesuai kebutuhan.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket. Contohnya, examplebucket.
$bucket= "examplebucket";
// Contoh berikut menunjukkan bagaimana pemilik sumber daya (pemilik bucket dengan UID 174649585760xxxx) menggunakan kebijakan bucket untuk memberikan izin kepada pengguna tertentu (pengguna RAM dengan UID 20214760404935xxxx) untuk mencantumkan semua file dalam bucket 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);
// Tetapkan kebijakan bucket.
$ossClient->putBucketPolicy($bucket, $policy);
} catch (OssException $e) {
printf(__FUNCTION__ . ": GAGAL\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");const OSS = require('ali-oss')
const client = new OSS({
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Tentukan nama bucket. Contoh: examplebucket.
bucket: 'examplebucket'
});
// Dalam contoh berikut, pemilik bucket dengan UID 174649585760xxxx menggunakan kebijakan bucket untuk memberikan izin kepada pengguna RAM dengan UID 20214760404935xxxx untuk mencantumkan semua objek dalam bucket 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
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"
# Tentukan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Dalam contoh berikut, pemilik bucket dengan UID 174649585760xxxx menggunakan kebijakan bucket untuk memberikan izin kepada pengguna RAM dengan UID 20214760404935xxxx untuk mencantumkan semua objek dalam examplebucket.
policy_text = '{"Statement": [{"Effect": "Allow", "Action": ["oss:GetObject", "oss:ListObjects"], "Principal": ["20214760404935xxxx"], "Resource": ["acs:oss:*:174649585760xxxx:examplebucket/*"]}], "Version": "1"}'
# Konfigurasikan kebijakan bucket.
bucket.put_bucket_policy(policy_text)using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket.
var bucketName = "examplebucket";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instance ClientConfiguration dan modifikasi parameter sesuai kebutuhan.
var conf = new ClientConfiguration();
// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instance OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
// Dalam contoh berikut, pemilik bucket dengan UID 174649585760xxxx menggunakan kebijakan bucket untuk memberikan izin kepada pengguna RAM dengan UID 20214760404935xxxx untuk mencantumkan semua objek dalam bucket 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 berhasil ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Gagal dengan kode kesalahan: {0}; Informasi kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Gagal dengan informasi kesalahan: {0}", ex.Message);
}#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
/* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Inisialisasi sumber daya, seperti sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Dalam contoh berikut, pemilik bucket dengan UID 174649585760xxxx menggunakan kebijakan bucket untuk memberikan izin kepada pengguna RAM dengan UID 20214760404935xxxx untuk mencantumkan semua objek dalam bucket 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()) {
/* Tangani pengecualian. */
std::cout << "Set Bucket Policy gagal" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
}
/* Lepaskan sumber daya, seperti sumber daya jaringan. */
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"
)
// Definisikan variabel global.
var (
region string // Wilayah.
bucketName string // Nama bucket.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Muat konfigurasi default dan atur penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Definisikan kebijakan bucket.
policy := `{
"Version": "1",
"Statement": [
{
"Action": [
"oss:PutObject",
"oss:GetObject"
],
"Effect": "Deny",
"Principal": ["1234567890"],
"Resource": ["acs:oss:*:1234567890:*/*"]
}
]
}`
// Buat permintaan untuk menetapkan kebijakan bucket.
request := &oss.PutBucketPolicyRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
Body: strings.NewReader(policy), // Kebijakan bucket.
}
// Jalankan operasi untuk menetapkan kebijakan bucket.
result, err := client.PutBucketPolicy(context.TODO(), request)
if err != nil {
log.Fatalf("gagal menetapkan kebijakan bucket %v", err)
}
// Cetak hasil penetapan kebijakan bucket.
log.Printf("hasil penetapan kebijakan bucket:%#v\n", result)
}
ossbrowser
Gunakan alat GUI ossbrowser
API
Panggil operasi PutBucketPolicy untuk menetapkan kebijakan otorisasi untuk bucket.
Konfigurasikan kebijakan otorisasi untuk bucket vektor
Konsol
Di halaman Bucket Vektor, klik bucket target. Di panel navigasi di sebelah kiri, pilih Kontrol Izin > Kebijakan Bucket.
Klik Add By Syntax dan masukkan konten kebijakan di editor kebijakan. Sebagai contoh, untuk memberikan izin baca dan tulis pada data vektor kepada pengguna di
my-vector-bucket:{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:PutVectors", "oss:GetVectors" ], "Principal": [ "*" ], "Resource": [ "acs:ossvector:*:*:my-vector-bucket/my-index/*" ] } ] }Klik OK untuk membuat kebijakan.
ossutil
Contoh berikut menunjukkan cara menetapkan kebijakan bucket menggunakan file konfigurasi JSON bernama vector-policy.json. File tersebut berisi konten berikut:
{
"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.jsonAnda dapat menetapkan kebijakan bucket untuk bucket vektor menggunakan parameter konfigurasi JSON:
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="contoh put bucket policy vektor")
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--account_id', help='ID akun.', required=True)
def main():
args = parser.parse_args()
# Memuat nilai kredensial dari variabel lingkungan
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Menggunakan konfigurasi default 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'kode status: {result.status_code},'
f' ID permintaan: {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", "", "Wilayah tempat bucket vektor berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket vektor.")
flag.StringVar(&accountId, "account-id", "", "ID akun vektor.")
}
func main() {
flag.Parse()
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, accountId diperlukan")
}
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("gagal menetapkan kebijakan bucket vektor %v", err)
}
log.Printf("hasil penetapan kebijakan bucket vektor:%#v\n", result)
}
API
Panggil operasi PutBucketPolicy untuk menetapkan kebijakan otorisasi untuk bucket vektor.
Mengakses sumber daya yang diizinkan
Setelah mengonfigurasi kebijakan bucket, Anda dapat mengakses sumber daya yang diizinkan dengan cara berikut:
URL File (hanya jika pihak yang diizinkan adalah semua pengguna)
Di browser, gunakan nama domain default atau nama domain kustom dari bucket dan jalur file untuk mengakses sumber daya. Sebagai contoh,
http://mybucket.oss-cn-beijing.aliyuncs.com/file/myphoto.png. Untuk informasi lebih lanjut, lihat Mengakses OSS melalui IPv6.Konsol
Masuk ke konsol OSS. Di panel navigasi di sebelah kiri, klik tanda tambah (+) di sebelah My Favorite Paths untuk menambahkan bucket dan jalur file yang Anda izinkan untuk diakses. Untuk informasi lebih lanjut, lihat Jalur Akses.
Antarmuka Baris Perintah ossutil
Anda dapat menggunakan akun yang diizinkan untuk mengakses sumber daya yang diizinkan melalui ossutil. Untuk informasi lebih lanjut, lihat ossutil.
Alat GUI ossbrowser
Masuk ke ossbrowser dengan akun yang diizinkan. Di bidang Preset OSS Path, masukkan direktori file yang Anda izinkan untuk diakses. Untuk informasi lebih lanjut, lihat ossbrowser 1.0.
SDK OSS
Anda dapat mengakses sumber daya yang diizinkan menggunakan SDK Java, PHP, Node.js, Python, Browser.js, .NET, Android, Go, iOS, C++, dan C.
Referensi
Tutorial: Gunakan Kebijakan VPC dan kebijakan bucket untuk mengontrol keamanan akses data
Tutorial: Gunakan kebijakan bucket untuk membatasi akses publik ke OSS
Tutorial: Gunakan kebijakan bucket untuk berbagi data antar departemen
Tutorial: Gunakan kebijakan bucket untuk menerapkan akses lintas akun ke OSS