Topik ini menggunakan skenario perusahaan untuk menjelaskan cara mengonfigurasi otorisasi detail halus untuk bucket, direktori, dan objek OSS. Anda akan mempelajari bagaimana model penyimpanan flat OSS dan daftar berbasis awalan memengaruhi konfigurasi kebijakan, serta cara memberikan izin tingkat direktori tertentu 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 dari kunci objek dan delimiter (/) untuk mensimulasikan hierarki folder. Fitur ini memungkinkan Anda mengelompokkan, mengklasifikasikan, dan mengelola file.
Untuk bucket examplebucket, struktur direktori yang ditampilkan di Konsol dan Object Keys yang sesuai adalah sebagai 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.pdf
Kunci objek direktori diakhiri dengan /. Inilah cara OSS mengenalinya sebagai 'direktori'. Dalam sistem penyimpanan aktual, semua objek, termasuk objek direktori, disimpan dalam struktur flat.
Karena OSS tidak memiliki hierarki direktori sebenarnya, ketika Anda memberikan akses ke suatu 'direktori', Anda sebenarnya 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
Target operasi yang berbeda memerlukan permintaan API dan konfigurasi Resource yang berbeda. Memahami perbedaan ini sangat penting untuk mengonfigurasi kebijakan secara tepat.
Mekanisme permintaan ListObjects
Konsol menampilkan struktur seperti direktori dengan menggunakan dua parameter dari operasi API GetBucket (ListObjects):
|
Parameter |
Deskripsi |
Nilai contoh |
|
|
Membatasi respons agar hanya mencakup objek yang kuncinya dimulai dengan awalan yang ditentukan. |
|
|
|
Karakter untuk mengelompokkan objek, biasanya |
|
Ketika pengguna mengklik folder Development/ di Konsol, Konsol mengirim permintaan berikut ke OSS:
GET /?prefix=Development/&delimiter=/ HTTP/1.1
Host: examplebucket.oss-cn-hangzhou.aliyuncs.com
OSS 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.
Konfigurasi Resource
|
Target operasi |
API yang dipicu |
Konfigurasi |
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 tertentu dan mendukung wildcard |
Akses melalui Konsol vs. API/SDK
Ketika Anda mengakses OSS menggunakan Konsol, Anda harus menavigasi dari daftar bucket ke direktori target. Hal ini memerlukan lebih banyak izin dibandingkan melakukan panggilan API atau SDK secara langsung.
|
Metode akses |
Izin yang diperlukan |
|
API/SDK |
Hanya diperlukan izin untuk resource target, seperti |
|
Console |
Selain izin untuk resource target, Anda juga memerlukan izin tambahan seperti |
Skenario
Asumsikan bahwa ACL baca/tulis default untuk semua file dalam 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.pdf
Tujuan kontrol akses adalah sebagai berikut:
|
Pengguna/grup pengguna RAM |
Target otorisasi |
Jenis izin |
|
RAM user Anne |
Folder |
Baca-tulis |
|
RAM user Leo |
Folder |
Read-only |
|
Semua anggota grup 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.pdf -
Direktori
Development/:Alibaba Cloud.pdf,ProjectA.docx,ProjectB.docx -
Direktori
Marketing/:data2020.xlsx,data2021.xlsx -
Direktori
Private/2017/:images.zip,promote.pptx
-
Langkah 2: Buat pengguna RAM 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
Untuk mengaktifkan akses baca/tulis ke folder Development/, Anda perlu memberikan dua jenis izin:
-
Izin daftar: Mengizinkan pengguna untuk mendaftar objek di folder
Development/(oss:ListObjects), denganConditionyang membatasi daftar hanya pada objek yang dimulai dengan awalanDevelopment. -
Izin baca/tulis: Mengizinkan pengguna membaca dan mengunggah file di direktori
Development/(oss:GetObject,oss:PutObject). Resource diatur keexamplebucket/Development/*.
Buat dan sambungkan kebijakan
-
Buka halaman Policies di Konsol RAM dan klik Create Policy.
-
Pada 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 untuk mendaftar objek dengan bucket itu sendiri sebagai Resource, dan menggunakan kondisi
oss:Prefixdalam blokConditionuntuk membatasi daftar hanya pada direktoriDevelopmentdan subdirektorinya. -
Pernyataan kedua: Memberikan izin baca dan tulis, dengan Resource ditentukan sebagai semua objek di path
Development/*.
-
-
Klik OK, masukkan Policy Name (misalnya
AllowAnneAccessDevelopment), lalu klik OK untuk menyelesaikan pembuatan. -
Buka halaman Users, temukan pengguna RAM Anne, lalu klik add permissions untuk menyambungkan kebijakan yang baru dibuat.
Langkah 4: Berikan akses read-only ke direktori Marketing
Ikuti prosedur pada Langkah 3 untuk membuat dan menyambungkan kebijakan read-only untuk pengguna RAM Leo. Kebijakan ini mirip dengan kebijakan baca/tulis, tetapi elemen Action hanya mencakup operasi terkait baca. Dokumen 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/*"
}
]
}
Jika oss:PutObject dihapus dari Action, Leo hanya dapat membaca file tetapi tidak dapat mengunggah atau mengubahnya.
Langkah 5: Tolak akses ke direktori Private
Kelola izin secara terpusat dengan menambahkan pengguna RAM yang ingin dicegah mengakses folder Private/ ke grup pengguna yang sama, lalu konfigurasikan kebijakan tolak untuk grup pengguna tersebut.
Metode ini hanya berlaku untuk pengguna RAM yang merupakan anggota grup pengguna. Untuk menerapkan aturan ini bagi semua pengguna RAM di akun Anda, termasuk yang dibuat di masa depan, kami menyarankan Anda mengonfigurasi kebijakan tolak di sisi resource dengan bucket policy.
Buat grup pengguna dan tambahkan anggota
-
Buka daftar grup 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 dalam grup pengguna tersebut.
Buat dan sambungkan kebijakan tolak
-
Buka halaman Policies di Konsol RAM dan klik Create Policy.
-
Pada 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 semua file di bawah path
Private/. -
Pernyataan kedua: Menolak daftar isi folder
Private/untuk mencegah pengguna melihat daftar file.
-
-
Klik OK, masukkan Policy Name (misalnya
DenyAccessPrivateFolder), lalu klik OK untuk menyelesaikan pembuatan. -
Buka halaman Groups, temukan grup pengguna tersebut, lalu klik add permissions untuk menyambungkan kebijakan yang baru saja dibuat.
Ketika pengguna RAM dalam grup pengguna mencoba mengakses folder Private/ dengan mendaftar atau mengunduh file, OSS mengembalikan tanggapan error permission denied.