Access point menyediakan titik masuk khusus untuk mengakses bucket. Jika sebuah bucket perlu diakses oleh beberapa aplikasi atau tim dengan izin berbeda, Anda dapat membuat access point terpisah untuk masing-masing pihak tersebut dan mengelola izinnya melalui kebijakan access point (AP Policy). Pendekatan ini menghindari kompleksitas dalam memelihara aturan izin yang rumit dalam satu kebijakan bucket.
Cara kerja
Access point bertindak sebagai lapisan proxy untuk akses bucket. Saat Anda membuat access point, Object Storage Service (OSS) akan menghasilkan alias access point yang unik. Gunakan alias ini menggantikan nama bucket dalam permintaan Anda. Setiap access point dapat memiliki AP Policy-nya sendiri, yang menentukan aksi, resource, dan identitas yang diizinkan, serta origin jaringan, yang bisa berupa Internet atau VPC tertentu. Hal ini memungkinkan akses terisolasi sesuai skenario bisnis yang berbeda.
Ketika pengguna mengakses resource melalui access point, sistem mengevaluasi kebijakan RAM, kebijakan bucket, dan AP Policy. Permintaan hanya diizinkan jika hasil gabungan dari kebijakan RAM dan kebijakan bucket adalah Allow, dan hasil AP Policy juga Allow. Untuk informasi lebih lanjut mengenai logika evaluasi izin secara detail, lihat Logika evaluasi izin.
Secara default, access point tidak dapat mengakses resource bucket. Anda harus terlebih dahulu mengonfigurasi delegasi izin dalam kebijakan bucket. Anda dapat menggunakan kunci kondisi seperti oss:DataAccessPointArn, oss:DataAccessPointAccount, atau oss:AccessPointNetworkOrigin untuk memberikan akses eksplisit ke bucket bagi access point tertentu.
Mulai
Tiga langkah berikut memandu Anda dalam membuat access point, mendelegasikan izin, dan menggunakan access point untuk mengakses resource.
Langkah 1: Buat access point
Buat access point dan konfigurasikan AP Policy-nya. Kebijakan ini menentukan identitas mana yang dapat melakukan aksi apa pada resource OSS mana dalam kondisi apa.
Buka daftar Access Points dan klik Create Access Point.
Masukkan Access Point Name, pilih bucket yang terkait dan origin jaringan, lalu klik Next.
CatatanJika Anda mengatur Network Origin ke VPC, Anda harus memasukkan VPC ID. Anda dapat memperoleh VPC ID dari VPC console.
Wilayah VPC yang Anda masukkan harus merupakan salah satu wilayah yang mendukung OSS gateway endpoints. Jika wilayah tidak cocok, permintaan autentikasi tidak dapat dikaitkan dengan benar ke VPC yang ditentukan, sehingga menyebabkan autentikasi gagal.
Nonaktifkan opsi Block Public Access dan konfigurasikan kebijakan access point.
Tambahkan kebijakan menggunakan editor visual
Item konfigurasi
Deskripsi
Applied To
Pilih apakah akan memberikan izin pada Whole Bucket atau Specific Resources.
Resource Paths
Jika Anda mengatur Applied To ke Whole Bucket, maka Resource Paths adalah
accesspoint/{access-point-name}/*.Jika Anda mengatur Applied To ke Specific Resources, masukkan folder atau objek individual yang ingin diberi izin. Anda dapat menambahkan beberapa catatan.
Authorized User
Tentukan objek otorisasi.
RAM User: Pilih pengguna RAM yang termasuk dalam Akun Alibaba Cloud saat ini.
Akun login saat ini harus berupa Akun Alibaba Cloud atau pengguna RAM yang memiliki izin manajemen atas bucket dan izin
ListUsersdi konsol RAM. Jika tidak, Anda tidak dapat melihat daftar pengguna RAM untuk akun tersebut.Other Account: Masukkan UID akun atau pengguna RAM lain yang ingin diberi izin, atau masukkan pengguna sementara yang diotorisasi yang dimulai dengan
arn:sts, sepertiarn:sts::1798************:assumed-role/role-name/session-name. Anda dapat memberikan izin kepada beberapa pengguna. Masukkan satu pengguna per baris.
Authorized Operation
Basic Settings: Pilih kombinasi umum operasi yang diizinkan. Opsi meliputi Read-Only (excluding ListObject), Read-Only (including ListObject), Read/Write, Full Access, dan Deny Access.
Advanced Settings: Sesuaikan Effect (Allow atau Reject) dan Operations yang diizinkan.
Tambahkan kebijakan menggunakan JSON
Masukkan kebijakan otorisasi dalam format JSON di editor.
Contoh kebijakan: Berikan izin baca/tulis kepada pengguna
20816353761158****.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:GetObject", "oss:PutObject", "oss:GetObjectAcl", "oss:PutObjectAcl", "oss:ListObjects", "oss:AbortMultipartUpload", "oss:ListParts", "oss:RestoreObject", "oss:ListObjectVersions", "oss:GetObjectVersion", "oss:GetObjectVersionAcl", "oss:RestoreObjectVersion" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:oss:{region-id}:179882766168****:accesspoint/{ap-name}/object/*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetObject" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:oss:{region-id}:179882766168****:accesspoint/{ap-name}" ], "Condition": { "StringLike": { "oss:Prefix": [ "*" ] } } }] }Kebijakan otorisasi lengkap mencakup Version dan Statement.
Version: Versi kebijakan akses. Nilainya tetap
1dan tidak dapat diubah.Statement: Isi utama kebijakan, yang berisi satu atau beberapa aturan pemberian atau penolakan izin spesifik. Setiap pernyataan mencakup Effect, Action, Principal, Resource, dan Condition.
Elemen kebijakan
Deskripsi
Effect
Efek kebijakan. Nilai yang valid adalah
AllowdanDeny.Action
Operasi spesifik yang akan dilakukan pada resource. Anda dapat menggunakan karakter wildcard
*.Principal
Entitas yang menjadi subjek kebijakan, seperti pengguna, akun, atau role.
Resource
Cakupan resource yang menjadi subjek kebijakan.
Condition
Kondisi yang harus dipenuhi agar kebijakan berlaku.
Jika Anda mengonfigurasi beberapa kondisi, semua kondisi harus terpenuhi (hubungan AND) agar kebijakan berlaku.
Untuk daftar lengkap elemen otorisasi, lihat Sintaks dan elemen otorisasi.
Klik Submit dan tunggu hingga access point selesai dibuat.
Langkah 2: Delegasikan izin ke access point
Setelah membuat access point, Anda juga harus mendelegasikan izin ke access point tersebut menggunakan kebijakan bucket. Ini menentukan access point mana saja yang dapat mengakses bucket. Tersedia tiga jenis delegasi izin:
oss:DataAccessPointArn: Mendelegasikan izin akses ke access point tertentu.oss:DataAccessPointAccount: Mendelegasikan izin akses ke semua access point di bawah Akun Alibaba Cloud saat ini.oss:AccessPointNetworkOrigin: Mendelegasikan izin akses ke semua access point dari origin jaringan tertentu.
Delegasikan izin ke access point tertentu
Buka daftar Bucket dan klik bucket target.
Di panel navigasi sebelah kiri, pilih , lalu pilih Add JSON Policy.
Klik Edit dan masukkan kebijakan otorisasi dalam format JSON di editor.
CatatanSaat mengonfigurasi kebijakan, ganti UID, nama bucket, ID wilayah, dan nama access point dalam contoh dengan informasi aktual Anda. Jika kebijakan bucket tidak kosong, tambahkan elemen baru ke dalam array
Statementyang sudah ada.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:DataAccessPointArn": [ "acs:oss:oss-{region-id}:179882766168****:accesspoint/{ap-name}" ] } } }] }Klik Save untuk menyelesaikan konfigurasi kebijakan bucket.
Delegasikan izin ke semua access point
Buka daftar Bucket dan klik bucket target.
Di panel navigasi sebelah kiri, pilih , lalu pilih Add JSON Policy.
Klik Edit dan masukkan kebijakan otorisasi dalam format JSON di editor.
CatatanSaat mengonfigurasi kebijakan, ganti UID dan nama bucket dalam contoh dengan informasi aktual Anda. Jika kebijakan bucket tidak kosong, tambahkan elemen baru ke dalam array
Statementyang sudah ada.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:DataAccessPointAccount": [ "179882766168****" ] } } }] }Klik Save untuk menyelesaikan konfigurasi kebijakan bucket.
Delegasikan izin berdasarkan origin jaringan
Buka daftar Bucket dan klik bucket target.
Di panel navigasi sebelah kiri, pilih , lalu pilih Add JSON Policy.
Klik Edit dan masukkan kebijakan otorisasi dalam format JSON di editor.
CatatanSaat mengonfigurasi kebijakan, ganti UID dan nama bucket dalam contoh dengan informasi aktual Anda. Jika kebijakan bucket sudah berisi konten, tambahkan elemen baru ke dalam array
Statementyang sudah ada.Ketika
oss:AccessPointNetworkOrigindiatur keinternet, izin didelegasikan ke semua access point yang origin jaringannya adalah Internet. Konfigurasi ini memungkinkan akses dari jaringan publik maupun VPC. Untuk membatasi akses hanya ke VPC, ubah nilai ini menjadivpc.
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:AccessPointNetworkOrigin": [ "internet" ] } } }] }Klik Save untuk menyelesaikan konfigurasi kebijakan bucket.
Jika Anda menerima pesan yang menunjukkan bahwa kebijakan bucket mengandung semantik akses publik, nonaktifkan terlebih dahulu opsi Block Public Access untuk bucket tersebut, lalu delegasikan izin ke access point.
Langkah 3: Gunakan titik akses untuk mengakses sumber daya
Setelah membuat access point, OSS secara otomatis menghasilkan alias access point. Gunakan identitas yang diotorisasi, seperti pengguna RAM, untuk mengakses resource OSS yang sesuai melalui alias ini.
SDK
Saat ini, hanya Java SDK dan Python SDK yang mendukung akses ke resource OSS menggunakan alias access point.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.StaticCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.GetObjectRequest;
import java.io.File;
/**
* Contoh OSS Java SDK V2: Gunakan access point untuk mengunduh objek ke file lokal.
*/
public class DownloadObjectWithAccessPoint {
public static void main(String[] args) {
// Buat klien OSS.
String accessKeyId = System.getenv("OSS_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("OSS_ACCESS_KEY_SECRET");
CredentialsProvider provider = new StaticCredentialsProvider(accessKeyId, accessKeySecret);
OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region("<region-id>")
.build();
// Gunakan alias access point untuk mengunduh objek ke file lokal.
String bucket = "example-ap-b156d01070a10322664d6704cd1d47****-ossalias";
String key = "example.jpg";
File file = new File("example.jpg");
client.getObjectToFile(GetObjectRequest.newBuilder()
.bucket(bucket)
.key(key)
.build(), file);
System.out.println("File diunduh: " + key + " -> " + file.getPath());
// Tutup klien.
try {
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Contoh OSS Python SDK V2: Gunakan access point untuk mengunduh objek ke file lokal."""
import alibabacloud_oss_v2 as oss
def main() -> None:
"""Fungsi utama"""
# Buat klien OSS.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
config = oss.config.load_default()
config.credentials_provider = credentials_provider
config.region = "<region-id>"
config.endpoint = "oss-<region-id>.aliyuncs.com"
client = oss.Client(config)
# Gunakan alias access point untuk mengunduh objek ke file lokal.
bucket = "example-ap-b156d01070a10322664d6704cd1d47****-ossalias"
key = "example.jpg"
file_path = "example.jpg"
request = oss.GetObjectRequest(bucket, key)
client.get_object_to_file(request, file_path)
print(f"File diunduh: {key} -> {file_path}")
if __name__ == "__main__":
main()
ossutil
Saat menggunakan ossutil untuk mengakses resource OSS, gunakan alias access point sebagai nama bucket.
ossutil cp oss://example-ap-b156d01070a10322664d6704cd1d47****-ossalias/example.jpg /tmpREST API
Saat menggunakan REST API untuk mengakses resource OSS, gunakan alias access point dalam header Host. Contoh formatnya sebagai berikut:
GET /ObjectName HTTP/1.1
Host: example-ap-b156d01070a10322664d6704cd1d47****-ossalias.oss-{region-id}.aliyuncs.com
Date: GMT Date
Authorization: SignatureValueContoh skenario
Contoh berikut menunjukkan cara merancang solusi access point untuk skenario analitik data besar. Solusi ini menggunakan kontrol akses detail halus untuk mencapai akses aman dan terisolasi bagi beberapa departemen.
Deskripsi skenario
Sebuah perusahaan (UID Akun Alibaba Cloud: 137918634953****) menyimpan semua data yang dikumpulkan dalam bucket bernama examplebucket. Bucket ini perlu diakses oleh 10 departemen bisnis berbeda dengan persyaratan sebagai berikut:
Departemen | Cakupan akses | Persyaratan izin | Origin jaringan |
Departemen 1–3 |
| Read-only | Internet |
Departemen 4 | Seluruh bucket | Read/write | Internet |
Departemen 5–10 |
| Read/write | Hanya VPC |
Rancangan solusi
Berdasarkan persyaratan isolasi bisnis dan batas keamanan, solusi ini menggunakan tiga access point untuk skenario akses yang berbeda. AP Policy digunakan untuk menerapkan kontrol izin yang tepat dan pembatasan akses jaringan.
Access point | Nama | Asal Jaringan | Pengguna yang diizinkan | Resource yang diizinkan | Izin |
Access Point 1 |
| Internet | Pengguna RAM dari Departemen 1–3 (UID: |
| Read-only |
Access Point 2 |
| Internet | Pengguna RAM dari Departemen 4 (UID: |
| Read/write |
Access Point 3 |
| VPC | Pengguna RAM dari Departemen 5–10 (UID: |
| Read/write |
Konfigurasi AP Policy
ap-01 (akses read-only untuk Departemen 1–3)
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:GetObjectAcl",
"oss:ListObjects",
"oss:RestoreObject",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal": [
"26571698800555****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-01/object/dir1/*"
]
},{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Principal": [
"26571698800555****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-01"
],
"Condition": {
"StringLike": {
"oss:Prefix": [
"dir1/*"
]
}
}
}]
}ap-02 (akses read/write ke seluruh bucket untuk Departemen 4)
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:ListObjects",
"oss:AbortMultipartUpload",
"oss:ListParts",
"oss:RestoreObject",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal": [
"25770968794578****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-02/object/*"
]
},{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Principal": [
"25770968794578****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-02"
],
"Condition": {
"StringLike": {
"oss:Prefix": [
"*"
]
}
}
}]
}ap-03 (akses read/write melalui VPC untuk Departemen 5–10)
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:ListObjects",
"oss:AbortMultipartUpload",
"oss:ListParts",
"oss:RestoreObject",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal": [
"26806658794579****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-03/object/dir2/*"
]
},{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Principal": [
"26806658794579****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-03"
],
"Condition": {
"StringLike": {
"oss:Prefix": [
"dir2/*"
]
}
}
}]
}Delegasi izin kebijakan bucket
Karena skenario ini melibatkan beberapa access point dalam satu akun yang sama, kami merekomendasikan penggunaan oss:DataAccessPointAccount untuk delegasi terpadu guna menyederhanakan konfigurasi kebijakan bucket. Untuk kontrol yang lebih detail halus, Anda juga dapat menggunakan oss:DataAccessPointArn untuk mendelegasikan izin masing-masing access point secara individual.
Delegasi terpadu
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:137918634953****:examplebucket",
"acs:oss:*:137918634953****:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointAccount": [
"137918634953****"
]
}
}
}]
}Delegasi individual
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:137918634953****:examplebucket",
"acs:oss:*:137918634953****:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointArn": [
"acs:oss:oss-{region-id}:137918634953****:accesspoint/ap-01",
"acs:oss:oss-{region-id}:137918634953****:accesspoint/ap-02",
"acs:oss:oss-{region-id}:137918634953****:accesspoint/ap-03"
]
}
}
}]
}Logika evaluasi izin
Hasil gabungan Kebijakan RAM dan Kebijakan Bucket | Hasil Kebijakan AP | Hasil akhir |
Allow | Allow | Allow |
Allow | Deny | Deny |
Allow | Ignore | Ignore |
Deny | Allow | Deny |
Deny | Deny | Deny |
Deny | Ignore | Deny |
Ignore | Allow | Ignore |
Ignore | Deny | Deny |
Ignore | Ignore | Ignore |
Allow: Permintaan akses sesuai dengan pernyataan Allow dalam kebijakan akses dan tidak sesuai dengan pernyataan Deny apa pun.
Deny (penolakan eksplisit): Permintaan akses sesuai dengan pernyataan Deny dalam kebijakan akses. Bahkan jika juga sesuai dengan pernyataan Allow, hasilnya tetap penolakan eksplisit karena prinsip prioritas penolakan.
Ignore (penolakan implisit): Permintaan akses tidak sesuai dengan pernyataan Allow atau Deny apa pun. Secara default, identitas RAM tidak memiliki izin. Operasi yang tidak secara eksplisit diizinkan akan ditolak secara implisit.
Kuota dan batasan
Batasan | Deskripsi |
Metode pembuatan | Anda dapat membuat access point menggunakan konsol OSS, API, atau ossutil. Anda tidak dapat membuat access point menggunakan SDK. |
Quantity |
|
Aturan modifikasi | Setelah access point dibuat, Anda hanya dapat memodifikasi kebijakan access point-nya. Anda tidak dapat memodifikasi informasi dasarnya, seperti nama atau alias access point. |
Metode akses | Akses anonim tidak didukung. |
FAQ
Apakah izin access point mendukung Daftar putih alamat IP?
Ya. Anda dapat menambahkan kebijakan access point menggunakan JSON dan menyertakan kondisi seperti "IpAddress": {"acs:SourceIp": ["xxx"]} untuk membatasi akses.
Izin apa saja yang diperlukan agar pengguna RAM dapat membuat access point?
Izin berikut diperlukan: oss:CreateAccessPoint, oss:GetAccessPoint, oss:DeleteAccessPoint, oss:ListAccessPoints, oss:PutAccessPointPolicy, oss:GetAccessPointPolicy, oss:DeleteAccessPointPolicy, oss:PutBucketPolicy, oss:GetBucketPolicy, dan oss:DeleteBucketPolicy.