Titik akses menyediakan titik masuk independen ke bucket. Buat titik akses terpisah untuk setiap aplikasi atau tim, lalu gunakan kebijakan titik akses untuk mengelola izin secara individual—menghindari aturan kompleks dalam satu kebijakan bucket.
Cara kerja
Titik akses berfungsi sebagai lapisan proxy untuk sebuah bucket. Saat dibuat, OSS menghasilkan alias titik akses unik yang menggantikan nama bucket dalam permintaan. Setiap titik akses memiliki kebijakan titik akses sendiri (yang menentukan tindakan, sumber daya, dan identitas yang diizinkan) serta origin jaringan (Internet atau VPC tertentu) untuk akses terisolasi sesuai skenario.
Saat pengguna melakukan permintaan melalui titik akses, sistem mengevaluasi kebijakan RAM, kebijakan bucket, dan kebijakan titik akses secara bersamaan. Permintaan berhasil hanya jika kebijakan RAM/bucket gabungan dan kebijakan titik akses sama-sama dievaluasi sebagai Allow. Logika evaluasi izin.
Secara default, titik akses tidak memiliki akses ke bucket. Konfigurasikan delegasi izin dalam kebijakan bucket menggunakan kunci kondisi oss:DataAccessPointArn, oss:DataAccessPointAccount, atau oss:AccessPointNetworkOrigin untuk memberikan akses eksplisit dari titik akses ke bucket.
Mulai cepat
Buat titik akses, delegasikan izin dalam kebijakan bucket, lalu akses sumber daya melalui alias titik akses.
Langkah 1: Buat titik akses
Buat titik akses dan konfigurasikan kebijakan titik aksesnya untuk menentukan siapa yang dapat melakukan tindakan apa pada sumber daya OSS mana dan dalam kondisi apa.
-
Buka Daftar Titik Akses dan klik Create Access Point.
-
Masukkan Access Point Name, pilih bucket terkait dan Network Origin, lalu klik Next.
Catatan-
Jika Anda mengatur Network Origin ke VPC, Anda harus memasukkan VPC ID. Anda dapat memperoleh VPC ID dari VPC Console.
-
Wilayah VPC yang ditentukan harus merupakan salah satu wilayah yang mendukung endpoint gateway OSS. Jika wilayah tidak cocok, permintaan autentikasi tidak dapat dikaitkan dengan benar ke VPC yang ditentukan, sehingga menyebabkan kegagalan autentikasi.
-
-
Nonaktifkan opsi Block Public Access dan konfigurasikan kebijakan titik akses.
GUI
Parameter
Deskripsi
Applied To
Pilih apakah akan memberikan otorisasi akses ke Whole Bucket atau Specific Resources.
Resource Paths
-
Jika Anda mengatur Applied To ke Whole Bucket, maka Resource Paths diatur ke
accesspoint/{Access Point Name}/*. -
Jika Anda mengatur Applied To ke Specific Resources, masukkan direktori atau objek individual yang akan diberi otorisasi. Anda dapat menambahkan beberapa entri.
Authorized User
Tentukan penerima izin.
-
RAM user: Pilih pengguna RAM yang termasuk dalam Akun Alibaba Cloud saat ini.
Akun yang sedang login harus berupa Akun Alibaba Cloud atau pengguna RAM dengan izin manajemen bucket dan izin
ListUsers. Jika tidak, daftar pengguna RAM tidak dapat ditampilkan. -
Other Account: Masukkan UID akun lain atau pengguna RAM, atau pengguna assumed-role yang ARN-nya dimulai dengan
arn:sts, sepertiarn:sts::1798************:assumed-role/role-name/session-name. Anda dapat memberikan izin kepada beberapa pengguna, satu entri per baris.
Authorized Operation
-
Simple Settings: Pilih kombinasi umum operasi yang diizinkan. Opsi mencakup Read-Only (excluding ListObject), Read-Only (including ListObject), Read/Write, Full Access, dan Deny Access.
-
Advanced Settings: Sesuaikan Effect (Allow atau Reject) dan Action.
Sintaks
Masukkan kebijakan otorisasi 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": [ "*" ] } } }] }Dokumen kebijakan berisi Version dan Statement.
-
Version: Versi kebijakan. Nilainya tetap
1dan tidak dapat diubah. -
Statement: Aturan kebijakan. Setiap pernyataan mencakup Effect, Action, Principal, Resource, dan Condition.
Elemen kebijakan
Deskripsi
Effect
Efek kebijakan. Nilai yang valid adalah
AllowdanDeny.Action
Operasi yang dilakukan pada sumber daya. Mendukung wildcard asterisk (
*).Principal
Pengguna, akun, atau role yang menjadi subjek kebijakan.
Resource
Sumber daya yang menjadi subjek kebijakan.
Condition
Kondisi yang harus dipenuhi agar kebijakan berlaku.
Jika beberapa kondisi ditentukan, semuanya dievaluasi menggunakan logika AND; semua kondisi harus terpenuhi agar kebijakan berlaku.
Semua elemen kebijakan didefinisikan dalam Sintaks dan Elemen Otorisasi.
-
-
Klik Submit dan tunggu hingga titik akses dibuat.
Langkah 2: Delegasikan izin
Setelah membuat titik akses, konfigurasikan delegasi izin dalam kebijakan bucket untuk memberikan akses bucket ke titik akses tersebut. Tersedia tiga jenis delegasi:
-
oss:DataAccessPointArn: Mendelegasikan izin akses untuk titik akses tertentu. -
oss:DataAccessPointAccount: Mendelegasikan izin akses untuk semua titik akses di bawah Akun Alibaba Cloud saat ini. -
oss:AccessPointNetworkOrigin: Mendelegasikan izin akses untuk semua titik akses yang memiliki origin jaringan tertentu.
Titik akses tertentu
-
Buka Daftar Bucket dan klik nama bucket target.
-
Di panel navigasi sebelah kiri, pilih , lalu klik tab Add Rule by Syntax.
-
Klik Edit dan masukkan kebijakan otorisasi dalam format JSON di editor.
CatatanGanti UID, nama bucket, ID wilayah, dan nama titik akses dengan nilai aktual Anda. Jika kebijakan bucket sudah memiliki pernyataan, tambahkan aturan ini ke dalam array
Statement.{ "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 menerapkan kebijakan bucket.
Semua titik akses
-
Buka Daftar Bucket dan klik nama bucket target.
-
Di panel navigasi sebelah kiri, pilih , lalu klik tab Add Rule by Syntax.
-
Klik Edit dan masukkan kebijakan otorisasi dalam format JSON di editor.
CatatanGanti UID dan nama bucket dengan nilai aktual Anda. Jika kebijakan bucket sudah memiliki pernyataan, tambahkan aturan ini ke dalam array
Statement.{ "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 menerapkan kebijakan bucket.
Berdasarkan origin jaringan
-
Buka Daftar Bucket dan klik nama bucket target.
-
Di panel navigasi sebelah kiri, pilih , lalu klik tab Add Rule by Syntax.
-
Klik Edit dan masukkan kebijakan otorisasi dalam format JSON di editor.
Catatan-
Ganti UID dan nama bucket dengan nilai aktual Anda. Jika kebijakan bucket sudah memiliki pernyataan, tambahkan aturan ini ke dalam array
Statement. -
Saat
oss:AccessPointNetworkOrigindiatur keinternet, izin didelegasikan ke semua titik akses yang origin jaringannya adalah internet. Konfigurasi ini memungkinkan akses dari internet maupun VPC. Untuk membatasi akses hanya ke VPC, ubah nilainya 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 menerapkan kebijakan bucket.
Jika Anda menerima error seperti "The bucket policy contains public access semantics," nonaktifkan Block Public Access untuk bucket sebelum mendelegasikan izin.
Langkah 3: Akses sumber daya
Identitas yang diizinkan (seperti pengguna RAM) menggunakan alias titik akses untuk mengakses sumber daya OSS.
SDK
Hanya SDK Java dan Python yang mendukung 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;
/**
* Contoh OSS Java SDK V2: 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("Unduhan selesai: " + 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: 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"Unduhan selesai: {key} -> {file_path}")
if __name__ == "__main__":
main()
ossutil
Gunakan alias titik akses sebagai nama bucket dalam perintah ossutil.
ossutil cp oss://example-ap-b156d01070a10322664d6704cd1d47****-ossalias/example.jpg /tmp
REST API
Gunakan alias titik akses dalam header Host:
GET /ObjectName HTTP/1.1
Host: example-ap-b156d01070a10322664d6704cd1d47****-ossalias.oss-{region-id}.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Anda dapat menggunakan curl untuk memverifikasi dengan cepat konektivitas dan konfigurasi izin titik akses Anda:
curl -v \
-H "Date: <GMT time>" \
-H "Authorization: OSS <AccessKeyId>:<Signature>" \
"https://<access-point-alias>.oss-<region-id>.oss-accesspoint.aliyuncs.com/<ObjectName>" \
-o <local-file-path>
Contoh skenario
Contoh ini menggunakan titik akses untuk menyediakan akses aman dan terisolasi bagi beberapa departemen dalam skenario analitik data besar.
Skenario
Sebuah perusahaan (Akun Alibaba Cloud UID: 137918634953****) menyimpan data yang dikumpulkan secara terpusat dalam bucket bernama examplebucket. Sepuluh departemen bisnis berbeda harus mengakses bucket ini dengan persyaratan 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 |
Desain solusi
Rancang tiga titik akses untuk skenario akses berbeda, gunakan kebijakan titik akses untuk kontrol izin dan pembatasan jaringan.
|
Titik akses |
Parameter |
Origin jaringan |
Penerima izin |
Sumber daya yang diizinkan |
Izin |
|
Titik Akses 1 |
|
Internet |
Pengguna RAM untuk Departemen 1–3 (UID: |
|
Hanya baca |
|
Titik Akses 2 |
|
Internet |
Pengguna RAM untuk Departemen 4 (UID: |
|
Baca/Tulis |
|
Titik Akses 3 |
|
VPC |
Pengguna RAM untuk Departemen 5–10 (UID: |
|
Baca/Tulis |
Kebijakan titik akses
ap-01: Akses 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: Akses 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: Akses baca/tulis melalui 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
Skenario ini menggunakan oss:DataAccessPointAccount untuk delegasi terpadu di semua titik akses dalam akun yang sama. Untuk kontrol lebih rinci, gunakan oss:DataAccessPointArn untuk mendelegasikan per titik akses.
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 kebijakan RAM dan bucket |
Hasil kebijakan titik akses |
Hasil akhir |
|
Allow |
Allow |
Allow |
|
Allow |
Deny |
Deny |
|
Allow |
Implicit Deny |
Implicit Deny |
|
Deny |
Allow |
Deny |
|
Deny |
Deny |
Deny |
|
Deny |
Implicit Deny |
Deny |
|
Implicit Deny |
Allow |
Implicit Deny |
|
Implicit Deny |
Deny |
Deny |
|
Implicit Deny |
Implicit Deny |
Implicit Deny |
-
Allow: Permintaan sesuai dengan pernyataan Allow dan tidak ada pernyataan Deny.
-
Deny eksplisit: Permintaan sesuai dengan pernyataan Deny. Deny didahulukan daripada Allow.
-
Deny implisit: Permintaan tidak sesuai dengan pernyataan Allow maupun Deny. Secara default, identitas RAM tidak memiliki izin. Setiap tindakan yang tidak secara eksplisit diizinkan secara implisit ditolak.
Kuota dan batasan
|
Batasan |
Deskripsi |
|
Metode pembuatan |
Buat titik akses menggunakan Konsol OSS, API, atau ossutil. SDK tidak didukung untuk pembuatan. |
|
Jumlah titik akses |
Maksimum 1.000 titik akses per Akun Alibaba Cloud. |
|
Aturan modifikasi |
Setelah dibuat, hanya kebijakan titik akses yang dapat dimodifikasi. Nama dan alias tidak dapat diubah. |
|
Metode akses |
Akses anonim tidak didukung. |
FAQ
Apakah kebijakan titik akses mendukung daftar IP yang diizinkan?
Ya. Tambahkan kondisi acs:SourceIp ke kebijakan titik akses Anda untuk kontrol akses berbasis IP. Contoh:
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": ["oss:GetObject"],
"Principal": ["*"],
"Resource": ["acs:oss:{region-id}:179882766168****:accesspoint/{ap-name}/object/*"],
"Condition": {
"IpAddress": {
"acs:SourceIp": ["192.168.1.0/24", "203.0.113.5"]
}
}
}]
}
Kebijakan ini hanya mengizinkan permintaan dari IP atau rentang CIDR yang ditentukan untuk mengakses sumber daya melalui titik akses. Contoh ini menggunakan "203.0.113.5" (IP tanpa mask), yang merupakan cara yang direkomendasikan untuk menentukan satu IP. Jika Anda lebih suka Notasi CIDR (seperti /32 untuk satu IP), pilih operator kondisi yang sesuai:
|
Operator kondisi |
Perilaku |
Kasus penggunaan |
|
|
Mengecualikan IP batas (alamat jaringan dan broadcast) |
IP mentah atau rentang /1~/31 |
|
|
Termasuk IP batas |
Saat menggunakan /32 untuk satu IP |
IpAddress mengecualikan IP batas (alamat jaringan dan broadcast) saat mengevaluasi rentang CIDR. Dengan mask /32, IP itu sendiri merupakan alamat batas dan dikecualikan, sehingga kebijakan tidak berlaku. Gunakan IpAddressIncludeBorder sebagai gantinya:
"Condition": {
"IpAddressIncludeBorder": {
"acs:SourceIp": ["203.0.113.5/32"]
}
}
Izin yang diperlukan untuk pembuatan
Izin berikut diperlukan: oss:CreateAccessPoint, oss:GetAccessPoint, oss:DeleteAccessPoint, oss:ListAccessPoints, oss:PutAccessPointPolicy, oss:GetAccessPointPolicy, oss:DeleteAccessPointPolicy, oss:PutBucketPolicy, oss:GetBucketPolicy, dan oss:DeleteBucketPolicy.