Konfigurasikan kontrol akses detail halus untuk bucket, direktori, dan objek OSS menggunakan kebijakan RAM. Pelajari bagaimana model penyimpanan flat dan daftar berbasis awalan memengaruhi desain kebijakan, serta cara memberikan izin tingkat direktori kepada pengguna RAM yang berbeda.
Struktur penyimpanan dan otorisasi
Model penyimpanan OSS
OSS menggunakan model penyimpanan flat untuk menyimpan objek sebagai pasangan kunci-nilai. Semua objek langsung termasuk dalam suatu bucket, dan tidak ada hierarki direktori fisik. 'Direktori' yang ditampilkan di Konsol dibuat dengan menggunakan awalan kunci objek dan delimiter (/) untuk mensimulasikan hierarki folder.
Untuk bucket examplebucket, Konsol menampilkan struktur direktori dan kunci objek berikut:
examplebucket
├── Development/ # Key: Development/ (objek direktori)
│ ├── Alibaba Cloud.pdf # Key: Development/Alibaba Cloud.pdf
│ ├── ProjectA.docx # Key: Development/ProjectA.docx
│ └── ProjectB.docx # Key: Development/ProjectB.docx
├── Marketing/ # Key: Marketing/ (objek direktori)
│ ├── data2020.xlsx # Key: Marketing/data2020.xlsx
│ └── data2021.xlsx # Key: Marketing/data2021.xlsx
├── Private/ # Key: Private/ (objek direktori)
│ └── 2017/ # Key: Private/2017/ (objek direktori)
│ ├── images.zip # Key: Private/2017/images.zip
│ └── promote.pptx # Key: Private/2017/promote.pptx
└── oss-dg.pdf # Key: oss-dg.pdfKunci objek direktori diakhiri dengan /. OSS menggunakan akhiran ini untuk mengidentifikasi direktori. Di dalam penyimpanan, semua objek, termasuk objek direktori, disimpan secara flat.
Karena OSS tidak memiliki hierarki direktori sebenarnya, memberikan akses ke suatu 'direktori' berarti memberikan akses ke semua objek dengan awalan tertentu. Misalnya, memberikan akses ke direktori Development/ setara dengan memberikan akses ke semua objek yang kuncinya dimulai dengan Development/.
Perbedaan permintaan bucket, direktori, dan objek
Operasi yang berbeda memerlukan permintaan API dan konfigurasi Resource yang berbeda.
Mekanisme permintaan ListObjects
Konsol menampilkan struktur menyerupai direktori dengan menggunakan dua parameter dari operasi API GetBucket (ListObjects):
Parameter | Deskripsi | Nilai contoh |
| Membatasi respons hanya mencakup objek yang kuncinya dimulai dengan awalan yang ditentukan. |
|
| Karakter untuk mengelompokkan objek, biasanya |
|
Mengklik folder Development/ di 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 delimiter=/ ditentukan, OSS mengembalikan subdirektori (seperti Development/SubFolder/) sebagai CommonPrefixes alih-alih mencantumkan semua file di dalamnya.
Resource konfigurasi
Target operasi | API yang dipicu |
| Poin konfigurasi kebijakan |
Daftar direktori root bucket | ListObjects, prefix kosong, delimiter |
|
|
Masuk ke direktori | ListObjects, dengan prefix |
|
|
Baca dan tulis konten file |
| Resource dapat ditentukan hingga ke path dan mendukung wildcard |
Akses Konsol vs. API/SDK
Akses melalui Konsol memerlukan navigasi dari daftar bucket ke direktori target, sehingga membutuhkan lebih banyak izin dibandingkan panggilan API atau SDK langsung.
Metode akses | Izin yang diperlukan |
API/SDK | Hanya diperlukan izin resource target, seperti |
Konsol | Izin resource target ditambah izin tambahan seperti |
Skenario
Asumsikan bahwa ACL baca/tulis default untuk semua file di bucket examplebucket bersifat private. Struktur bucket adalah sebagai berikut:
examplebucket
├── Development/ # Direktori Development
│ ├── Alibaba Cloud.pdf
│ ├── ProjectA.docx
│ └── ProjectB.docx
├── Marketing/ # Direktori Marketing
│ ├── data2020.xlsx
│ └── data2021.xlsx
├── Private/ # Direktori rahasia
│ └── 2017/
│ ├── images.zip
│ └── promote.pptx
└── oss-dg.pdfTujuan kontrol akses:
RAM user/kelompok pengguna | Target otorisasi | Jenis izin |
RAM user Anne | Folder | Baca-tulis |
RAM user Leo | Folder | Read-only |
Semua anggota kelompok pengguna tertentu | Direktori | Tolak akses |
Langkah 1: Buat bucket dan unggah objek
Buka Daftar Bucket dan klik Create Bucket, misalnya
examplebucket.Di dalam bucket, klik Create Directory untuk membuat direktori:
Development,Marketing, danPrivate(serta buat subdirektori2017di bawahPrivate).Klik Upload Object untuk mengunggah objek ke path berikut:
Direktori root:
oss-dg.pdfDirektori
Development/:Alibaba Cloud.pdf,ProjectA.docx,ProjectB.docxDirektori
Marketing/:data2020.xlsx,data2021.xlsxDirektori
Private/2017/:images.zip,promote.pptx
Langkah 2: Buat RAM user Anne dan Leo
Buka halaman Users di Konsol RAM dan klik Create User untuk membuat pengguna Anne dan Leo.
Langkah 3: Berikan akses baca-tulis ke direktori Development
Desain kebijakan
Akses baca/tulis ke Development/ memerlukan dua jenis izin:
Izin daftar: Daftar objek di
Development/(oss:ListObjects), denganConditionyang membatasi daftar hanya pada awalanDevelopment.Izin baca/tulis: Baca dan unggah file di
Development/(oss:GetObject,oss:PutObject), dengan Resource diatur keexamplebucket/Development/*.
Buat dan sambungkan kebijakan
Buka halaman Policies di Konsol RAM dan klik Create Policy.
Di tab JSON, masukkan dokumen 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, menggunakan
Conditiondenganoss:Prefixuntuk membatasi daftar hanya pada direktoriDevelopmentdan subdirektorinya.Pernyataan kedua: Memberikan akses baca/tulis ke semua objek di bawah
Development/*.
Klik OK, masukkan Policy Name (misalnya
AllowAnneAccessDevelopment), lalu klik OK untuk menyelesaikan pembuatan.Buka halaman Users, temukan pengguna RAM Anne, dan klik add permissions untuk menyambungkan kebijakan yang baru dibuat.
Langkah 4: Berikan akses read-only ke direktori Marketing
Buat dan sambungkan kebijakan read-only untuk pengguna RAM Leo dengan prosedur yang sama seperti Langkah 3. Kebijakan ini hanya mencakup operasi baca di Action:
{
"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/*"
}
]
}Karena oss:PutObject tidak termasuk dalam Action, Leo dapat membaca file tetapi tidak dapat mengunggah atau mengubahnya.
Langkah 5: Tolak akses ke direktori Private
Tambahkan pengguna RAM yang tidak boleh mengakses folder Private/ ke kelompok pengguna, lalu sambungkan kebijakan deny ke kelompok tersebut.
Ini hanya berlaku untuk anggota kelompok. Untuk menolak akses bagi semua pengguna RAM di akun Anda, termasuk yang akan dibuat di masa depan, gunakan bucket policy sebagai gantinya.
Buat kelompok pengguna dan tambahkan anggota
Buka daftar kelompok pengguna RAM dan klik Create User Group (misalnya
DenyPrivateAccessGroup).Klik Add Group Members, lalu tambahkan pengguna RAM yang perlu ditolak aksesnya ke folder
Private/ke kelompok pengguna tersebut.
Buat dan sambungkan kebijakan deny
Buka halaman Policies di Konsol RAM dan klik Create Policy.
Di tab JSON, masukkan dokumen 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 di bawah
Private/.Pernyataan kedua: Menolak daftar isi
Private/, mencegah pengguna melihat daftar file.
Klik OK, masukkan Policy Name (misalnya
DenyAccessPrivateFolder), lalu klik OK untuk menyelesaikan pembuatan.Buka halaman Groups, temukan kelompok pengguna tersebut, dan klik add permissions untuk menyambungkan kebijakan yang baru saja dibuat.
Jika anggota kelompok mencoba mendaftar atau mengunduh file di folder Private/, OSS akan mengembalikan error permission denied.