Tutorial ini menggunakan skenario bisnis untuk menunjukkan cara mengonfigurasi izin akses detail halus untuk bucket, folder, dan file OSS. Anda akan mempelajari bagaimana struktur penyimpanan flat dan mekanisme daftar berbasis awalan (prefix listing) di OSS memengaruhi konfigurasi kebijakan, serta cara memberikan izin akses tingkat folder—read/write, read-only, dan deny—kepada Pengguna Resource Access Management (RAM) yang berbeda.
Struktur penyimpanan dan otorisasi
Model penyimpanan OSS
OSS menggunakan model penyimpanan flat yang menyimpan objek sebagai pasangan kunci-nilai secara langsung di dalam bucket. Tidak ada hierarki direktori fisik. Folder yang Anda lihat di Konsol disimulasikan menggunakan awalan kunci objek dan pemisah (/), sehingga memungkinkan pengelompokan, klasifikasi, dan pengelolaan objek.
Untuk bucket examplebucket, struktur folder dan kunci objek yang sesuai ditampilkan di Konsol sebagai berikut:
examplebucket
├── Development/ # Key: Development/ (folder object)
│ ├── Alibaba Cloud.pdf # Key: Development/Alibaba Cloud.pdf
│ ├── ProjectA.docx # Key: Development/ProjectA.docx
│ └── ProjectB.docx # Key: Development/ProjectB.docx
├── Marketing/ # Key: Marketing/ (folder object)
│ ├── data2020.xlsx # Key: Marketing/data2020.xlsx
│ └── data2021.xlsx # Key: Marketing/data2021.xlsx
├── Private/ # Key: Private/ (folder object)
│ └── 2017/ # Key: Private/2017/ (folder object)
│ ├── images.zip # Key: Private/2017/images.zip
│ └── promote.pptx # Key: Private/2017/promote.pptx
└── oss-dg.pdf # Key: oss-dg.pdfKunci objek folder diakhiri dengan /. OSS menggunakan karakter ini sebagai penanda untuk mengidentifikasi objek tersebut sebagai folder. Namun, semua objek—termasuk objek folder—disimpan dalam struktur flat.
Karena OSS tidak memiliki hierarki direktori nyata, pemberian akses ke suatu folder sebenarnya berarti memberikan akses ke semua objek yang memiliki awalan tertentu. Misalnya, memberikan akses ke folder Development/ setara dengan memberikan akses ke semua objek yang kuncinya dimulai dengan Development/.
Perbedaan permintaan untuk bucket, folder, dan file
Operasi pada target berbeda—seperti bucket, folder, dan file—berkorespondensi dengan permintaan API dan konfigurasi Resource yang berbeda. Pemahaman perbedaan ini penting untuk mengonfigurasi kebijakan akses secara tepat.
Mekanisme permintaan ListObjects
Penampilan struktur folder di daftar file Konsol bergantung pada dua parameter inti dari operasi API GetBucket (ListObjects):
Parameter | Fungsi | Nilai contoh |
| Membatasi objek yang dikembalikan hanya pada objek yang kuncinya dimulai dengan awalan ini. |
|
| Karakter yang digunakan untuk mengelompokkan objek. Biasanya |
|
Ketika pengguna mengklik folder Development/ di Konsol, Konsol mengirimkan permintaan berikut ke OSS:
GET /?prefix=Development/&delimiter=/ HTTP/1.1
Host: examplebucket.oss-cn-hangzhou.aliyuncs.comOSS mengembalikan semua objek yang dimulai dengan Development/. Karena parameter delimiter=/ ditentukan, OSS mengembalikan subfolder seperti Development/SubFolder/ sebagai CommonPrefixes alih-alih mencantumkan semua file di dalamnya.
Konfigurasi Resource untuk operasi berbeda
Target operasi | API yang dipicu | Konfigurasi Sumber Daya | Poin penting untuk konfigurasi kebijakan |
Daftar direktori root bucket | ListObjects, dengan prefix kosong dan |
| Elemen Resource mengarah ke bucket itu sendiri, bukan ke path tertentu. |
Masuk ke folder | ListObjects, dengan prefix diatur ke |
| Elemen Resource mengarah ke bucket itu sendiri, bukan ke path tertentu. Rentang yang dapat didaftar dibatasi oleh kondisi |
Baca atau tulis konten file |
| Elemen Resource dapat menentukan path dan mendukung karakter wildcard |
Perbedaan antara akses melalui Konsol dan API/SDK
Mengakses OSS melalui Konsol memerlukan lebih banyak izin dibandingkan akses langsung menggunakan API atau SDK karena pengguna perlu menavigasi dari daftar bucket hingga ke folder target.
Metode akses | Izin yang diperlukan |
API/SDK | Hanya diperlukan izin untuk operasi resource target, seperti |
Konsol | Selain izin pada resource target, diperlukan juga izin tambahan seperti |
Skenario
Asumsikan bahwa daftar kontrol akses (ACL) untuk semua objek di bucket examplebucket diatur ke private secara default. Struktur bucket adalah sebagai berikut:
examplebucket
├── Development/ # Folder departemen Development
│ ├── Alibaba Cloud.pdf
│ ├── ProjectA.docx
│ └── ProjectB.docx
├── Marketing/ # Folder departemen Marketing
│ ├── data2020.xlsx
│ └── data2021.xlsx
├── Private/ # Folder rahasia
│ └── 2017/
│ ├── images.zip
│ └── promote.pptx
└── oss-dg.pdfTujuan kontrol akses adalah sebagai berikut:
Pengguna RAM/Kelompok pengguna | Target otorisasi | Jenis izin |
RAM user Anne | Folder | Izin baca dan tulis |
RAM user Leo | Folder | Izin read-only |
Semua anggota kelompok pengguna tertentu | Folder | Akses ditolak |
Langkah 1: Buat bucket dan unggah file
Buka halaman Daftar Bucket dan klik Create Bucket. Beri nama bucket tersebut
examplebucket.Di dalam bucket, klik Create Folder untuk membuat folder
Development,Marketing, danPrivate. Lalu, buat subfolder2017di dalam folderPrivate.Klik Upload File dan unggah file ke path berikut:
Direktori root:
oss-dg.pdfFolder
Development/:Alibaba Cloud.pdf,ProjectA.docx,ProjectB.docxFolder
Marketing/:data2020.xlsx,data2021.xlsxFolder
Private/2017/:images.zip,promote.pptx
Langkah 2: Buat pengguna RAM Anne dan Leo
Buka halaman Daftar Pengguna dan klik Create User. Buat pengguna Anne dan Leo.
Langkah 3: Berikan izin baca dan tulis kepada Anne untuk folder Development
Pendekatan desain kebijakan
Untuk memberikan akses baca dan tulis ke folder Development/, Anda perlu memberikan dua jenis izin:
Izin daftar: Mengizinkan pengguna untuk mendaftar objek di folder
Development/(oss:ListObjects). SebuahConditionmembatasi daftar hanya pada objek yang dimulai dengan awalanDevelopment.Izin baca dan tulis: Memberikan izin untuk membaca (
oss:GetObject) dan mengunggah (oss:PutObject) file di folderDevelopment/. Elemen Resource mengarah keexamplebucket/Development/*.
Buat dan berikan kebijakan
Buka halaman Kebijakan RAM dan klik Create Policy.
Pilih tab Script Editor dan masukkan konten kebijakan berikut:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:ListObjects", "Resource": "acs:oss:*:*:examplebucket", "Condition": { "StringLike": { "oss:Prefix": [ "Development", "Development/*" ] } } }, { "Effect": "Allow", "Action": [ "oss:GetObject", "oss:PutObject", "oss:GetObjectAcl" ], "Resource": "acs:oss:*:*:examplebucket/Development/*" } ] }Analisis kebijakan:
Pernyataan Pertama: Memberikan izin daftar pada bucket.
Conditiondenganoss:Prefixmembatasi daftar hanya pada konten di dalam folderDevelopmentdan subfoldernya.Pernyataan Kedua: Memberikan izin baca dan tulis. Resource mengarah ke semua objek di path
Development/*.
Klik OK. Masukkan Policy Name, misalnya
AllowAnneAccessDevelopment, lalu klik OK untuk membuat kebijakan.Buka halaman Daftar Pengguna. Temukan RAM user Anne, klik Add Permissions, lalu pilih kebijakan yang baru saja Anda buat.
Langkah 4: Berikan izin read-only kepada Leo untuk folder Marketing
Ikuti prosedur pada Langkah 3 untuk membuat dan memberikan kebijakan read-only kepada RAM user Leo. Satu-satunya perbedaan dari kebijakan baca/tulis adalah elemen Action hanya mencakup operasi terkait pembacaan. Konten kebijakan adalah sebagai berikut:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:ListObjects",
"Resource": "acs:oss:*:*:examplebucket",
"Condition": {
"StringLike": {
"oss:Prefix": [
"Marketing",
"Marketing/*"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:GetObjectAcl"
],
"Resource": "acs:oss:*:*:examplebucket/Marketing/*"
}
]
}Aksi oss:PutObject dihapus. Leo hanya dapat membaca file tetapi tidak dapat mengunggah atau mengubahnya.
Langkah 5: Tolak akses kelompok pengguna tertentu ke folder Private
Anda dapat mengelola izin secara terpusat menggunakan kelompok pengguna. Tambahkan RAM user yang harus ditolak aksesnya ke folder Private/ ke dalam kelompok pengguna yang sama. Kemudian, sambungkan kebijakan deny ke kelompok tersebut.
Metode ini hanya berlaku untuk RAM user yang merupakan anggota kelompok pengguna tersebut. Untuk menolak akses bagi semua RAM user di akun Anda, termasuk yang baru, Anda harus mengonfigurasi kebijakan deny pada bucket menggunakan bucket policy.
Buat kelompok pengguna dan tambahkan anggota
Buka halaman Kelompok Pengguna RAM dan klik Create User Group. Misalnya, beri nama
DenyPrivateAccessGroup.Klik Add Members dan tambahkan RAM user yang harus ditolak aksesnya ke folder
Private/ke dalam kelompok pengguna tersebut.
Buat dan berikan kebijakan deny
Buka halaman Kebijakan RAM dan klik Create Policy.
Pilih tab Script Editor dan masukkan konten kebijakan berikut:
{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": "oss:*", "Resource": "acs:oss:*:*:examplebucket/Private/*" }, { "Effect": "Deny", "Action": "oss:ListObjects", "Resource": "acs:oss:*:*:examplebucket", "Condition": { "StringLike": { "oss:Prefix": [ "Private/", "Private/*" ] } } } ] }Analisis kebijakan:
Pernyataan Pertama: Menolak semua operasi pada objek apa pun di bawah path
Private/.Pernyataan Kedua: Menolak pencantuman isi folder
Private/untuk mencegah pengguna melihat daftar file.
Klik OK. Masukkan Policy Name, misalnya
DenyAccessPrivateFolder, lalu klik OK untuk membuat kebijakan.Buka halaman Kelompok Pengguna RAM. Pada kelompok pengguna tersebut, klik Add Permissions dan pilih kebijakan yang baru saja Anda buat.
Ketika RAM user dalam kelompok tersebut mencoba mengakses folder Private/, OSS akan mengembalikan error permission denied, baik saat mencoba melihat daftar maupun mengunduh file.