Untuk mengelola akses bagi beberapa aplikasi atau tim yang memerlukan izin berbeda terhadap bucket yang sama, Anda dapat membuat titik akses terpisah untuk masing-masing entitas. Pendekatan ini menggunakan kebijakan titik akses khusus untuk setiap entitas, sehingga menghindari kompleksitas kebijakan bucket tunggal yang rumit.
Cara kerja
Titik akses berfungsi sebagai lapisan proxy untuk akses bucket. Saat Anda membuat titik akses, Object Storage Service (OSS) menghasilkan alias titik akses unik yang menggantikan nama bucket dalam permintaan Anda. Setiap titik akses dapat dikonfigurasi dengan kebijakan titik akses sendiri, yang menentukan aksi, resource, dan identitas yang diizinkan, serta origin jaringan (Internet atau Virtual Private Cloud (VPC) tertentu), sehingga memungkinkan akses terisolasi sesuai kasus penggunaan Anda.
Saat Anda membuat permintaan melalui titik akses, sistem mengevaluasi tiga jenis kebijakan: Kebijakan RAM, Kebijakan Bucket, dan Kebijakan Titik Akses (AP Policy). Permintaan hanya diizinkan jika hasil gabungan dari Kebijakan RAM dan Kebijakan Bucket adalah Allow, dan Kebijakan Titik Akses juga Allow. Untuk detail logika evaluasi izin, lihat Logika evaluasi izin.
Secara default, titik akses tidak dapat mengakses resource bucket. Anda harus terlebih dahulu mengonfigurasi delegasi izin dalam kebijakan bucket dengan menggunakan kunci kondisi oss:DataAccessPointArn, oss:DataAccessPointAccount, atau oss:AccessPointNetworkOrigin untuk secara eksplisit memberi otorisasi kepada titik akses tertentu agar dapat mengakses bucket tersebut.
Panduan cepat
Bagian ini memandu Anda melalui tiga langkah untuk mulai menggunakan titik akses: membuat titik akses, mengonfigurasi delegasi izin, dan menggunakan titik akses untuk mengakses resource.
Langkah 1: Buat titik akses
Buat titik akses dan konfigurasikan kebijakannya untuk menentukan "identitas mana" yang dapat melakukan "aksi apa" terhadap "resource OSS mana" dalam "kondisi apa".
Buka daftar Titik Akses dan klik Create Access Point.
Masukkan Access point name, pilih bucket terkait dan origin jaringan, lalu klik Next.
CatatanJika Anda mengatur Network origin ke VPC, Anda harus memasukkan VPC ID. Anda dapat memperoleh ID tersebut dari Konsol VPC.
Wilayah VPC yang ditentukan harus merupakan wilayah yang mendukung endpoint gateway OSS. Ketidaksesuaian wilayah akan menyebabkan permintaan autentikasi tidak dapat dikaitkan dengan benar ke VPC, sehingga autentikasi gagal.
Nonaktifkan opsi block public access dan konfigurasikan kebijakan titik akses.
Editor visual
Parameter
Deskripsi
Applied To
Pilih apakah akan memberikan izin pada Whole Bucket atau Specific Resources.
Resource Paths
Jika Anda memilih Applied To untuk Whole Bucket, maka Resource Paths adalah
accesspoint/{access-point-name}/*.Jika Anda memilih Applied To untuk Specific Resources, masukkan direktori atau objek individual. Anda dapat menambahkan beberapa entri.
Authorized User
Tentukan identitas yang akan diberikan izin.
RAM user: Pilih pengguna RAM di bawah Akun Alibaba Cloud saat ini.
Untuk melihat daftar pengguna RAM akun saat ini, akun yang login harus merupakan Akun Alibaba Cloud atau pengguna RAM dengan izin manajemen untuk bucket ini dan izin
ListUsersuntuk Konsol Resource Access Management (RAM).Other accounts: Masukkan UID akun lain atau pengguna RAM, atau ARN pengguna sementara yang dimulai dengan
arn:sts(misalnya,arn:sts::1798************:assumed-role/role-name/session-name). Anda dapat memberi otorisasi kepada beberapa pengguna, satu entri per baris.
Authorized Operation
Simple settings: Pilih dari kombinasi umum izin. Opsi termasuk Read-Only (excluding ListObject), Read-Only (including ListObject), Read/Write, Full Access, dan Deny Access.
Advanced settings: Sesuaikan Effect (Allow atau Reject) dan actions yang diizinkan.
Editor JSON
Masukkan kebijakan dalam format JSON di editor.
Contoh kebijakan: Memberikan 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 lengkap mencakup Version dan satu atau beberapa elemen Statement.
Version: Versi kebijakan. Nilainya tetap
1dan tidak dapat diubah.Statement: Badan utama kebijakan, yang berisi satu atau beberapa aturan yang memberikan atau menolak izin. Setiap pernyataan mencakup effect, action, principal, resource, dan condition.
Elemen kebijakan
Deskripsi
Effect
Efek kebijakan, yang dapat berupa
AllowatauDeny.Action
Operasi spesifik yang akan dilakukan pada resource. Karakter wildcard (
*) didukung.Principal
Identitas (misalnya, pengguna, akun, atau role) yang menjadi subjek kebijakan.
Resource
Resource yang menjadi subjek kebijakan.
Condition
Kondisi yang harus dipenuhi agar kebijakan berlaku.
Saat beberapa kondisi dikonfigurasi, semua kondisi harus terpenuhi (hubungan AND) agar kebijakan berlaku.
Untuk daftar lengkap elemen otorisasi, lihat Sintaks dan struktur kebijakan.
Klik Submit dan tunggu hingga titik akses dibuat.
Langkah 2: Delegasikan izin
Setelah membuat titik akses, Anda juga harus membuat kebijakan bucket untuk mendelegasikan izin. Kebijakan ini menentukan titik akses mana yang dapat mengakses bucket. Terdapat tiga jenis delegasi izin untuk titik akses:
oss:DataAccessPointArn: Mendelegasikan izin akses untuk titik akses tertentu.oss:DataAccessPointAccount: Mendelegasikan izin akses untuk semua titik akses di bawah akun saat ini.oss:AccessPointNetworkOrigin: Mendelegasikan izin akses untuk semua titik akses dari origin jaringan tertentu.
Delegasikan ke titik akses tertentu
Buka daftar Buckets dan klik bucket target.
Di panel navigasi sebelah kiri, klik , lalu pilih Add by Policy Syntax.
Klik Edit dan masukkan kebijakan dalam format JSON di editor.
CatatanSaat mengonfigurasi, ganti UID, nama bucket, ID wilayah, dan nama titik akses dalam contoh dengan nilai Anda sendiri. Jika kebijakan bucket tidak kosong, tambahkan elemen
Statementke kebijakan yang 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 ke semua titik akses
Buka daftar Buckets dan klik bucket target.
Di panel navigasi sebelah kiri, klik , lalu pilih Add by Policy Syntax.
Klik Edit dan masukkan kebijakan dalam format JSON di editor.
CatatanSaat mengonfigurasi, ganti UID dan nama bucket dalam contoh dengan nilai Anda sendiri. Jika kebijakan bucket tidak kosong, tambahkan elemen
Statementke kebijakan yang 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 berdasarkan origin jaringan
Buka daftar Buckets dan klik bucket target.
Di panel navigasi sebelah kiri, klik , lalu pilih Add by Policy Syntax.
Klik Edit dan masukkan kebijakan dalam format JSON di editor.
CatatanSaat mengonfigurasi, ganti UID dan nama bucket dalam contoh dengan nilai Anda sendiri. Jika kebijakan bucket sudah berisi konten, tambahkan elemen baru ke array
Statementdalam kebijakan yang sudah ada.Saat
oss:AccessPointNetworkOrigindiatur keinternet, izin didelegasikan ke semua titik akses dengan origin jaringan Internet. Konfigurasi ini memungkinkan akses dari Internet 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 "The bucket policy contains public access semantics," nonaktifkan opsi block public access untuk bucket sebelum mendelegasikan izin ke titik akses.
Langkah 3: Akses resource melalui titik akses
Saat Anda membuat titik akses, OSS secara otomatis menghasilkan alias titik akses. Identitas yang berwenang, seperti pengguna RAM, kemudian dapat menggunakan alias ini untuk mengakses resource OSS yang sesuai.
SDK
Saat ini, hanya Java SDK dan Python SDK yang mendukung akses ke resource OSS menggunakan alias titik akses.
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;
/**
* Ini adalah contoh OSS Java SDK v2 yang menunjukkan cara mengunduh objek ke file lokal menggunakan titik akses.
*/
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();
// Unduh objek ke file lokal menggunakan alias titik akses.
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 -*-
"""Ini adalah contoh OSS Python SDK v2 yang menunjukkan cara mengunduh objek ke file lokal menggunakan titik akses."""
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)
# Unduh objek ke file lokal menggunakan alias titik akses.
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 titik akses sebagai nama bucket.
ossutil cp oss://example-ap-b156d01070a10322664d6704cd1d47****-ossalias/example.jpg /tmpREST API
Saat menggunakan REST API untuk mengakses resource OSS, gunakan alias titik akses dalam header Host. Berikut contohnya:
GET /ObjectName HTTP/1.1
Host: example-ap-b156d01070a10322664d6704cd1d47****-ossalias.oss-{region-id}.aliyuncs.com
Date: GMT Date
Authorization: SignatureValueKasus penggunaan
Contoh berikut menunjukkan cara merancang solusi titik akses untuk skenario analitik data besar, memungkinkan akses aman dan terisolasi bagi beberapa departemen melalui pengendalian izin detail halus.
Skenario
Perusahaan dengan UID Akun Alibaba Cloud 137918634953**** menyimpan data yang dikumpulkan secara terpusat dalam bucket bernama examplebucket. Sepuluh departemen bisnis harus mengakses bucket ini dengan persyaratan sebagai berikut:
Departemen | Ruang lingkup akses | Izin | Origin jaringan |
Departemen 1–3 | Direktori | Hanya baca | Internet |
Departemen 4 | Seluruh bucket | Baca/Tulis | Internet |
Departemen 5–10 | Direktori | Baca/Tulis | Hanya VPC |
Rancangan solusi
Berdasarkan persyaratan isolasi bisnis dan keamanan, solusi ini menggunakan tiga titik akses untuk skenario akses berbeda. Kebijakan titik akses digunakan untuk menerapkan pengendalian izin presisi dan pembatasan akses jaringan.
Titik akses | Nama | Origin jaringan | Pengguna yang berwenang | Resource yang berwenang | Izin |
Titik Akses 1 |
| Internet | Pengguna RAM dari departemen 1–3 (UID: |
| Hanya baca |
Titik Akses 2 |
| Internet | Pengguna RAM dari departemen 4 (UID: |
| Baca/Tulis |
Titik Akses 3 |
| VPC | Pengguna RAM dari departemen 5–10 (UID: |
| Baca/Tulis |
Konfigurasi kebijakan titik akses
ap-01: Hanya baca
{
"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: Baca/tulis
{
"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: Baca/tulis VPC
{
"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 kebijakan bucket
Karena skenario ini melibatkan beberapa titik akses di bawah akun yang sama, kami merekomendasikan menggunakan oss:DataAccessPointAccount untuk delegasi terpadu. Pendekatan ini menyederhanakan konfigurasi kebijakan bucket. Untuk kontrol lebih rinci, Anda juga dapat menggunakan oss:DataAccessPointArn untuk mendelegasikan izin ke masing-masing titik akses 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
RAM dan Kebijakan bucket | Kebijakan titik akses | 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 izin dan tidak sesuai dengan pernyataan Deny apa pun.
Deny (penolakan eksplisit): Permintaan akses sesuai dengan pernyataan Deny dalam kebijakan izin. Pernyataan Deny selalu didahulukan daripada pernyataan Allow, sehingga menghasilkan penolakan eksplisit.
Ignore (penolakan implisit): Permintaan akses tidak sesuai dengan pernyataan Allow atau Deny apa pun. Secara default, pengguna RAM tidak memiliki izin untuk melakukan operasi apa pun. Tindakan apa pun yang tidak secara eksplisit diizinkan akan ditolak secara implisit.
Batasan
Item | Deskripsi |
Metode pembuatan | Anda dapat membuat titik akses menggunakan Konsol OSS, API, atau ossutil, tetapi tidak dengan SDK. |
Jumlah | Anda dapat membuat hingga 1.000 titik akses per Akun Alibaba Cloud. |
Aturan modifikasi | Setelah titik akses dibuat, Anda hanya dapat memodifikasi kebijakan titik aksesnya. Informasi dasarnya, seperti nama atau alias, tidak dapat diubah. |
Metode akses | Akses anonim tidak didukung. |
FAQ
Dukungan untuk daftar putih alamat IP
Ya. Anda dapat menambahkan kondisi berbasis alamat IP seperti "IpAddress": {"acs:SourceIp": ["xxx"]} ke kebijakan titik akses menggunakan editor JSON.
Izin untuk membuat titik akses
Izin berikut diperlukan: oss:CreateAccessPoint, oss:GetAccessPoint, oss:DeleteAccessPoint, oss:ListAccessPoints, oss:PutAccessPointPolicy, oss:GetAccessPointPolicy, oss:DeleteAccessPointPolicy, oss:PutBucketPolicy, oss:GetBucketPolicy, dan oss:DeleteBucketPolicy.