Bucket policy adalah kebijakan otorisasi berbasis resource yang diterapkan pada bucket. Gunakan bucket policy untuk memberikan akses cross-account, mengaktifkan akses anonim, atau membatasi akses berdasarkan alamat IP atau VPC.
Cara kerja
Bucket policy menggunakan model berbasis resource: kebijakan ini diterapkan pada bucket dan menentukan Pihak yang berwenang mana yang dapat melakukan aksi apa terhadap resource apa di bawah kondisi apa.
Saat permintaan masuk, OSS mengevaluasi semua kebijakan yang relevan, termasuk bucket policy dan kebijakan RAM. Evaluasi mengikuti prinsip deny-first: aturan Deny eksplisit akan memblokir permintaan terlepas dari aturan Allow. Jika tidak ada aturan yang cocok, permintaan ditolak secara default.
Bucket policy memiliki aturan khusus untuk Pemilik bucket:
-
Jika Pihak yang berwenang diatur ke karakter wildcard (*) dan kebijakan tidak menyertakan kondisi, kebijakan tersebut hanya berlaku untuk pengguna selain Pemilik bucket.
-
Jika Pihak yang berwenang diatur ke karakter wildcard (*) dan kebijakan menyertakan kondisi, kebijakan tersebut berlaku untuk semua pengguna, termasuk Pemilik bucket dan pengguna anonim. Aturan Deny dapat membuat seluruh bucket tidak dapat diakses. Aturan Allow dapat mengekspos data Anda kepada pengguna anonim.
Jika beberapa pernyataan berlaku untuk pengguna yang sama, izin efektifnya merupakan union dari semua pernyataan tersebut, dengan tetap mengikuti prinsip deny-first.
-
Kunci kondisi
acs:SourceIphanya mencocokkan alamat IP sumber permintaan dan tidak membedakan apakah alamat IP tersebut berasal dari jaringan publik atau VPC. Artinya, jika Anda hanya menggunakanacs:SourceIpuntuk membatasi akses, permintaan dari VPC lain yang menggunakan rentang alamat IP yang sama juga akan diizinkan, sehingga menimbulkan risiko akses tidak sah. Oleh karena itu, saat mengonfigurasi Bucket Policy, jika Anda menetapkanacs:SourceIp, Anda juga harus menetapkanacs:SourceVpcuntuk mengidentifikasi sumber jaringan permintaan secara eksplisit. -
Batasan ini hanya berlaku untuk Bucket Policy baru. Bucket Policy yang sudah ada tidak terpengaruh. Namun, memodifikasi Bucket Policy yang sudah ada dianggap sebagai pengajuan baru dan tunduk pada batasan ini.
Mengonfigurasi kebijakan bucket
OSS menyediakan dua metode konfigurasi: grafis dan sintaksis.
-
Metode grafis: Antarmuka berbasis formulir untuk skenario otorisasi umum.
-
Metode sintaksis: Editor berbasis JSON yang mendukung semua fitur kebijakan dan kombinasi kondisi yang kompleks.
Metode grafis
-
Buka daftar Buckets dan klik bucket target.
-
Di panel navigasi kiri, klik .
-
Pilih Add in GUI, lalu klik Authorize.
Parameter
Deskripsi
Applied To
Pilih apakah akan memberikan izin pada Whole Bucket atau pada Specific Resources.
Resource Paths
-
Jika Anda mengatur Applied To ke Whole Bucket, Resource Paths diatur ke
bucket-name/*. -
Jika Anda mengatur Applied To ke Specific Resources, masukkan direktori atau objek yang ingin Anda otorisasi. Anda dapat menambahkan beberapa entri.
Authorized User
Tentukan Pihak yang berwenang yang akan diberikan izin.
-
All Accounts (*): Memberikan izin kepada siapa saja, termasuk pengguna anonim.
-
RAM User: Pilih RAM user yang termasuk dalam Akun Alibaba Cloud saat ini.
Akun yang masuk harus berupa Akun Alibaba Cloud (akun root) atau RAM user dengan izin management bucket dan izin
ListUsersdi RAM. Jika tidak, daftar RAM user tidak akan terlihat. -
Other Accounts: Masukkan UID akun lain atau RAM user yang akan diotorisasi, atau pengguna temporary dengan kredensial yang dimulai dengan
arn:sts, sepertiarn:sts::1798************:assumed-role/role-name/session-name. Anda dapat mengotorisasi beberapa pengguna. Masukkan satu pengguna per baris.Jika izin diberikan kepada Peran RAM, peran tersebut tidak dapat mengakses resource dari Konsol OSS. Gunakan ossutil, SDK, atau API sebagai gantinya.
Authorized Operation
-
Simple Settings: Pilih kombinasi operasi terotorisasi yang umum. Opsi meliputi Read-Only (excluding ListObject), Read-Only (including ListObject), Read/Write, Full Access, dan Deny Access.
-
Advanced Settings: Sesuaikan Effect (Allow atau Reject) dan Operation.
Condition (Opsional)
Tetapkan kondisi agar kebijakan berlaku.
-
Access Method: Opsi meliputi HTTPS dan HTTP. Setelah Anda memilih opsi, kebijakan hanya berlaku untuk permintaan akses yang menggunakan metode tersebut.
-
IP =: Masukkan daftar alamat IP. Jika Anda memilih opsi ini, kebijakan hanya berlaku untuk permintaan akses dari alamat IP yang ditentukan.
-
IP ≠: Masukkan daftar alamat IP. Jika Anda memilih opsi ini, kebijakan hanya berlaku untuk permintaan akses yang bukan dari alamat IP yang ditentukan.
-
VPC =: Pilih VPC yang termasuk dalam akun saat ini atau masukkan VPC yang termasuk dalam akun lain. Jika Anda memilih opsi ini, kebijakan hanya berlaku untuk permintaan akses dari VPC yang ditentukan.
-
VPC ≠: Pilih VPC yang termasuk dalam akun saat ini atau masukkan VPC yang termasuk dalam akun lain. Jika Anda memilih opsi ini, kebijakan hanya berlaku untuk permintaan akses yang bukan dari VPC yang ditentukan.
Saat Anda mengonfigurasi beberapa kondisi, semua kondisi harus terpenuhi (hubungan AND).
-
-
Setelah memastikan konfigurasi benar, klik OK untuk menerapkan Bucket Policy.
Metode sintaksis
-
Buka daftar Buckets dan klik bucket target.
-
Di panel navigasi kiri, klik .
-
Pilih Add by Syntax, lalu klik Edit. Di editor, masukkan kebijakan otorisasi dalam format JSON.
Contoh kebijakan: Menolak semua operasi pada
example-bucketuntuk pengguna20214760404935xxxxjika permintaan akses tidak berasal dari VPCvpc-t4nlw426y44rd3iq4xxxx.{ "Version": "1", "Statement": [ { "Sid": "DenyNonVpcAccess", "Effect": "Deny", "Action": "oss:*", "Principal": [ "20214760404935xxxx" ], "Resource": [ "acs:oss:*:174649585760xxxx:example-bucket", "acs:oss:*:174649585760xxxx:example-bucket/*" ], "Condition": { "StringNotEquals": { "acs:SourceVpc": "vpc-t4nlw426y44rd3iq4xxxx" } } } ] }Kebijakan otorisasi lengkap mencakup Version dan Statement.
-
Version: Versi kebijakan akses. Nilainya tetap
1dan tidak dapat diubah. -
Statement: Bagian utama kebijakan. Berisi satu atau lebih aturan spesifik. Setiap aturan mendukung Sid opsional, serta mencakup Effect, Action, Principal, Resource, dan Condition.
Elemen kebijakan
Deskripsi
Arti dalam contoh
Sid (opsional)
Statement ID. Pengenal unik yang mudah dibaca manusia untuk setiap pernyataan dalam kebijakan. Elemen ini membantu diferensiasi, pengelolaan, dan audit, serta tidak memengaruhi izin itu sendiri.
Mengidentifikasi pernyataan penolakan sebagai
DenyNonVpcAccess.Effect
Efek kebijakan. Nilai yang valid adalah
AllowdanDeny.Menolak permintaan.
Action
Aksi spesifik yang dilakukan pada resource. Karakter wildcard
*didukung.Menolak semua aksi OSS (
oss:*).Principal
Pengguna, akun, atau peran tempat kebijakan berlaku.
Mengatur bidang Principal ke daftar kosong (
<code class="inline-code___1opEe" data-tag="code" id="396b0553f4p34">Principal:[]) sama dengan mengaturnya ke semua akun (<code class="inline-code___1opEe" data-tag="code" id="86478af1e5pzx">Principal:["*"]).Kebijakan hanya berlaku untuk RAM user
20214760404935xxxx.Resource
Resource tempat kebijakan berlaku.
Kebijakan berlaku untuk bucket
example-bucketitu sendiri dan semua objek di dalamnya.Condition
Kondisi agar kebijakan berlaku.
Saat Anda mengonfigurasi beberapa kondisi, semua kondisi harus terpenuhi (hubungan AND).
Kebijakan Deny ini hanya berlaku ketika VPC sumber permintaan bukan
vpc-t4nlw426y44rd3iq4xxxx.Referensi elemen kebijakan lengkap: Sintaksis dan elemen otorisasi.
-
-
Setelah memastikan kebijakan otorisasi benar, klik Save dan ikuti instruksi di layar.
Konfigurasikan kebijakan bucket vektor
Vector bucket hanya mendukung metode sintaksis untuk konfigurasi bucket policy.
-
Buka daftar Vector Buckets dan klik vector bucket target.
-
Di panel navigasi kiri, klik .
-
Klik Edit. Di editor, masukkan kebijakan otorisasi dalam format JSON.
Contoh kebijakan: Memberikan izin baca dan tulis data vektor untuk tabel indeks
indextestdivector-bucket-examplekepada pengguna20816353761158****.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:PutVectors", "oss:GetVectors" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:ossvector:*:*:vector-bucket-example/indextest" ] }] }Kebijakan otorisasi lengkap mencakup Version dan Statement.
-
Version: Versi kebijakan akses. Nilainya tetap
1dan tidak dapat diubah. -
Statement: Bagian utama kebijakan. Berisi satu atau lebih aturan spesifik. Setiap aturan mencakup Effect, Action, Principal, Resource, dan Condition.
Elemen kebijakan
Deskripsi
Arti dalam contoh
Effect
Efek kebijakan. Nilai yang valid adalah
AllowdanDeny.Mengizinkan permintaan.
Action
Aksi spesifik yang dilakukan pada resource. Karakter wildcard
*didukung.Membaca dan menulis data vektor.
Principal
Pengguna, akun, atau peran tempat kebijakan berlaku.
Menetapkan bidang Principal menjadi daftar kosong (
<code class="inline-code___1opEe" data-init-id="396b0553f4p34" data-tag="code" id="38fd39c90a131">Principal:[]) sama dengan menetapkannya untuk semua akun (<code class="inline-code___1opEe" data-init-id="86478af1e5pzx" data-tag="code" id="da174b022cl89">Principal:["*"]).Kebijakan hanya berlaku untuk RAM user
20816353761158****.Resource
Resource tempat kebijakan berlaku.
Kebijakan berlaku untuk tabel indeks
indextestdi bucketvector-bucket-example.Condition
Kondisi agar kebijakan berlaku.
Saat Anda mengonfigurasi beberapa kondisi, semua kondisi harus terpenuhi (hubungan AND).
Tidak ada.
Referensi elemen kebijakan lengkap: Sintaksis dan elemen otorisasi.
-
-
Setelah memastikan kebijakan otorisasi benar, klik Save dan ikuti instruksi di layar.
Mengonfigurasi kebijakan OSS-HDFS
Untuk memastikan pengguna layanan OSS-HDFS dapat mengakses direktori .dlsdata/ beserta objeknya, jangan atur operasi terotorisasi ke Deny Access saat mengonfigurasi Bucket Policy untuk bucket yang mengaktifkan OSS-HDFS. Lihat Prasyarat penggunaan OSS-HDFS.
Untuk membatasi akses ke alamat IP jaringan tertentu atau VPC, tambahkan kondisi berikut ke semua pernyataan Deny. Hal ini memastikan layanan backend OSS-HDFS dapat membaca dari dan menulis ke bucket melalui jaringan klasik.
"StringNotLike": {
"oss:ClassicIntranet": [
"true"
]
}
Skenario umum: Memberikan izin
Skenario berikut menunjukkan cara memberikan akses kepada pengguna, peran, atau semua pengguna tertentu. Masing-masing menyertakan contoh kebijakan yang dapat Anda adaptasi.
Skenario 1: Memberikan izin baca/tulis
Berikan akses baca/tulis ke bucket kepada anggota tim atau mitra. Contoh ini memberikan izin baca/tulis pada example-bucket kepada RAM user 27737962156157xxxx dan 20214760404935xxxx.
Kebijakan ini tidak memberikan izin untuk membuat daftar bucket. RAM user tidak dapat menjelajahi halaman Buckets secara langsung. Sebagai gantinya, mereka dapat menambahkan bucket target ke di panel navigasi kiri.
{
"Version":"1",
"Statement":[
{
"Effect":"Allow",
"Action":[
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:AbortMultipartUpload",
"oss:ListParts",
"oss:RestoreObject",
"oss:GetVodPlaylist",
"oss:PostVodPlaylist",
"oss:PublishRtmpStream",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal":[
"27737962156157xxxx",
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"oss:ListObjects"
],
"Principal":[
"27737962156157xxxx",
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
],
"Condition":{
"StringLike":{
"oss:Prefix":[
"*"
]
}
}
}
]
}
Skenario 2: Memberikan izin read-only ke direktori tertentu
Berikan akses read-only ke direktori tertentu. Contoh ini memberikan izin read-only pada direktori dengan awalan hangzhou/2020 dan shanghai/2015 di example-bucket kepada RAM user 20214760404935xxxx.
Kebijakan ini tidak memberikan izin untuk membuat daftar bucket. RAM user tidak dapat menjelajahi halaman Buckets secara langsung. Sebagai gantinya, mereka dapat menambahkan bucket target ke di panel navigasi kiri.
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:GetObject",
"oss:GetObjectAcl",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl"
],
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/hangzhou/2020/*",
"acs:oss:*:174649585760xxxx:example-bucket/shanghai/2015/*"
]
},
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Condition":{
"StringLike":{
"oss:Prefix":[
"hangzhou/2020/*",
"shanghai/2015/*"
]
}
},
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}
Skenario 3: Memberikan izin lihat dan daftar
Izinkan pengguna melihat informasi bucket dan membuat daftar objek. Contoh ini memberikan izin lihat dan daftar pada example-bucket kepada RAM user.
Kebijakan ini tidak memberikan izin untuk membuat daftar bucket. RAM user tidak dapat menjelajahi halaman Buckets secara langsung. Sebagai gantinya, mereka dapat menambahkan bucket target ke di panel navigasi kiri.
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}
Skenario 4: Memberikan izin baca ke Peran RAM
Berikan akses sementara ke objek bucket melalui Peran RAM. RAM user atau aplikasi mengasumsikan peran tersebut untuk mendapatkan kredensial sementara. Contoh ini memberikan izin baca pada semua objek di example-bucket kepada semua sesi di bawah satu Peran RAM dan sesi tertentu di bawah peran lainnya.
Saat memberikan izin ke Peran RAM, Principal harus mengikuti format ini: arn:sts::<uid>:assumed-role/<role-name>/<session-name>. Nilai untuk <role-name> dan <session-name> harus huruf kecil semua.
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:GetObject"
],
"Effect": "Allow",
"Principal": [
"arn:sts::10323xxxxx72056:assumed-role/role-name/session-name",
"arn:sts::10323xxxxx72056:assumed-role/role2-name/*"
],
"Resource": [
"acs:oss:*:10323xxxxx72056:example-bucket/*"
]
}
]
}
Skenario 5: Memberikan izin daftar ke semua pengguna
Izinkan semua pengguna membuat daftar objek tanpa mengakses isinya. Contoh ini memberikan izin daftar pada example-bucket kepada semua pengguna (*).
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}
Skenario 6: Memberikan izin untuk membuat bucketspaces dan mendaftar objek di AgenticBucket
Gunakan Bucket Policy untuk kontrol detail halus saat memberikan izin kepada pengguna untuk hanya membuat bucketspaces (bukan bucket reguler) di AgenticBucket tertentu. Kebijakan berikut berisi dua pernyataan:
-
Pernyataan 1 (Membatasi operasi ke AgenticBucket tertentu): Menggunakan kunci kondisi
oss:AgenticBucketNameuntuk membatasi izinoss:PutBucketke AgenticBucket tertentu. Hal ini memungkinkan pengguna hanya membuat bucketspaces di AgenticBucket tersebut, bukan bucket reguler. Ini juga memberikan izin operasi umum lainnya untuk objek, unggah multi-bagian, dan pendaftaran bucketspaces. -
Pernyataan 2 (Membatasi operasi daftar ke bucketspaces): Mencocokkan pola
*-bs-apsrdi bidang Resource untuk membatasi operasioss:ListObjectshanya ke bucketspaces, mencegah operasi daftar pada bucket reguler. Jika Anda mengubah Action menjadioss:PutBucket, kebijakan membatasi pengguna hanya untuk membuat bucketspaces alih-alih bucket reguler.
Konfigurasi ini memungkinkan diferensiasi detail halus antara izin pembuatan bucketspaces dalam skenario AgenticBucket dan izin pembuatan bucket reguler.
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:DeleteObject",
"oss:PutObject",
"oss:AbortMultipartUpload",
"oss:ListMultipartUploads",
"oss:ListObjects",
"oss:ListParts",
"oss:PutBucket",
"oss:ListBucketSpaces"
],
"Condition": {
"StringLike": {
"oss:AgenticBucketName": [
"sandbox-test-189xxxxxxxxxxxxx-cn-hangzhou-ab-apsr"
]
}
},
"Effect": "Allow",
"Resource": [
"acs:oss:::"
]
},
{
"Action": [
"oss:ListObjects"
],
"Effect": "Allow",
"Resource": [
"acs:oss:::-bs-apsr"
]
}
]
}
Skenario umum: Membatasi akses jaringan
Skenario berikut membatasi akses bucket berdasarkan sumber jaringan (IP publik atau VPC) menggunakan kunci kondisi acs:SourceIp dan acs:SourceVpc. Tabel di bawah ini merangkum pendekatan umum.
|
Sumber akses |
Pendekatan kebijakan |
Skenario |
|
VPC apa pun |
Tolak permintaan di mana acs:SourceVpc tidak dimulai dengan |
|
|
VPC tertentu |
Tolak permintaan di mana acs:SourceVpc tidak sama dengan ID VPC yang ditentukan. |
|
|
IP publik tertentu |
Pernyataan 1 menolak permintaan jaringan publik dari alamat IP yang tidak ditentukan; Pernyataan 2 menolak semua permintaan VPC. |
|
|
Rentang IP tertentu dalam VPC tertentu |
Pernyataan 1 menolak permintaan dari VPC yang tidak ditentukan; Pernyataan 2 menolak permintaan dari rentang IP yang tidak ditentukan dalam VPC yang ditentukan. |
|
|
IP publik tertentu atau VPC tertentu |
Pernyataan 1 menolak permintaan jaringan publik dari alamat IP yang tidak ditentukan; Pernyataan 2 menolak permintaan VPC dari VPC yang tidak ditentukan. |
|
|
Semua kecuali IP tertentu (blacklist) |
Tolak permintaan dari IP yang ditentukan, dan gunakan wildcard |
|
|
Jaringan klasik |
Izinkan akses jaringan klasik. |
Skenario 1: Membatasi akses jaringan publik
Blokir semua akses jaringan publik ke bucket dengan menambahkan pernyataan deny menggunakan kunci kondisi acs:SourceVpc. Pernyataan ini menolak permintaan yang tidak berasal dari VPC. Contoh berikut menolak semua akses non-VPC ke example-bucket.
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": "oss:*",
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*",
"acs:oss:*:174649585760xxxx:example-bucket"
],
"Condition": {
"StringNotLike": {
"acs:SourceVpc": [
"vpc-*"
]
}
}
}
]
}
Skenario 2: Membatasi akses ke VPC tertentu
Batasi akses bucket ke VPC tertentu menggunakan kunci kondisi acs:SourceVpc. Pernyataan ini memblokir permintaan dari VPC lain atau jaringan publik. Contoh berikut menolak semua pengguna di luar VPC t4nlw426y44rd3iq4xxxx untuk membaca objek di example-bucket.
-
Karena Pihak yang berwenang dalam pernyataan deny berikut adalah karakter wildcard (
*) dan kondisi disertakan, pernyataan deny berlaku untuk semua pengguna, termasuk Pemilik bucket. -
Pernyataan deny berikut hanya membatasi akses dan tidak memberikan izin apa pun. Jika Pihak yang berwenang belum diberikan izin, Anda dapat menambahkan pernyataan allow untuk memberikan izin yang diperlukan.
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
}
]
}
Skenario 3: Membatasi akses ke alamat IP publik tertentu
Untuk membatasi akses bucket ke alamat IP publik tertentu, buat dua pernyataan deny:
-
Pernyataan 1 (Menolak permintaan jaringan publik dari alamat IP yang tidak ditentukan): Pernyataan ini menggunakan
StringNotLike: {"acs:SourceVpc": "vpc-*"}untuk mengidentifikasi permintaan jaringan publik (nilaiacs:SourceVpcuntuk permintaan jaringan publik tidak dimulai denganvpc-). Kemudian menggunakanNotIpAddress: {"acs:SourceIp": "..."}untuk menolak permintaan yang bukan dari alamat IP yang ditentukan. Aksi deny dipicu ketika kedua kondisi terpenuhi. -
Pernyataan 2 (Menolak semua permintaan VPC): Pernyataan ini menggunakan
StringLike: {"acs:SourceVpc": "vpc-*"}untuk mencocokkan dan menolak semua permintaan dari VPC apa pun, karena tujuannya adalah mengizinkan akses hanya dari alamat IP publik yang ditentukan.
Permintaan ditolak jika cocok dengan salah satu pernyataan. Contoh berikut menolak akses baca ke example-bucket untuk semua pengguna kecuali yang berasal dari IP publik 203.0.113.5.
-
Karena Pihak yang berwenang dalam pernyataan deny berikut adalah karakter wildcard (
*) dan kondisi disertakan, pernyataan deny berlaku untuk semua pengguna, termasuk Pemilik bucket. -
Pernyataan deny berikut hanya membatasi akses dan tidak memberikan izin apa pun. Jika Pihak yang berwenang belum diberikan izin, Anda dapat menambahkan pernyataan allow untuk memberikan izin yang diperlukan.
{
"Version": "1",
"Statement": [{
"Effect": "Deny",
"Action": [
"oss:GetObject"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition": {
"NotIpAddress": {
"acs:SourceIp": [
"203.0.113.5"
]
},
"StringNotLike": {
"acs:SourceVpc": [
"vpc-*"
]
}
}
},
{
"Effect": "Deny",
"Action": [
"oss:GetObject"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition": {
"StringLike": {
"acs:SourceVpc": [
"vpc-*"
]
}
}
}
]
}
Skenario 4: Membatasi akses ke rentang IP dalam VPC
Untuk membatasi akses bucket ke rentang IP tertentu dalam VPC tertentu, buat dua pernyataan deny:
-
Pernyataan 1 (Menolak semua permintaan dari luar VPC yang ditentukan): Pernyataan ini menggunakan
StringNotEquals: {"acs:SourceVpc": "..."}untuk menolak permintaan dari VPC lain dan jaringan publik. -
Pernyataan 2 (Menolak permintaan dari luar rentang IP yang ditentukan dalam VPC): Pernyataan ini menggunakan
StringEquals: {"acs:SourceVpc": "..."}untuk mencocokkan permintaan dari VPC yang ditentukan, lalu menggunakanNotIpAddress: {"acs:SourceIp": "..."}untuk menolak permintaan dari luar rentang alamat IP yang ditentukan. Aksi deny dipicu ketika kedua kondisi terpenuhi.
Permintaan ditolak jika cocok dengan salah satu pernyataan. Contoh berikut menolak akses baca ke example-bucket untuk semua pengguna kecuali yang berasal dari rentang 192.168.0.0/16 dalam VPC t4nlw426y44rd3iq4xxxx.
-
Karena Pihak yang berwenang dalam pernyataan deny berikut adalah karakter wildcard (
*) dan kondisi disertakan, pernyataan deny berlaku untuk semua pengguna, termasuk Pemilik bucket. -
Pernyataan deny berikut hanya membatasi akses dan tidak memberikan izin apa pun. Jika Pihak yang berwenang belum diberikan izin, Anda dapat menambahkan pernyataan allow untuk memberikan izin yang diperlukan.
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
},
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"192.168.0.0/16"
]
}
}
}
]
}
Skenario 5: Membatasi akses ke IP publik atau VPC
Untuk membatasi akses bucket ke IP publik tertentu atau VPC tertentu, buat dua pernyataan deny:
-
Pernyataan 1 (Untuk permintaan jaringan publik, tolak IP yang tidak ditentukan): Pernyataan ini menggunakan
StringNotLike: {"acs:SourceVpc": "vpc-*"}untuk mengidentifikasi permintaan jaringan publik, lalu menggunakanNotIpAddress: {"acs:SourceIp": "..."}untuk menolak permintaan dari alamat IP publik yang tidak ditentukan. Aksi deny dipicu ketika kedua kondisi terpenuhi. Permintaan VPC tidak cocok dengan pernyataan ini karena nilaiacs:SourceVpc-nya dimulai denganvpc-. -
Pernyataan 2 (Untuk permintaan VPC, tolak VPC yang tidak ditentukan): Pernyataan ini menggunakan
StringLike: {"acs:SourceVpc": "vpc-*"}untuk mengidentifikasi permintaan VPC, lalu menggunakanStringNotEquals: {"acs:SourceVpc": "..."}untuk menolak permintaan dari VPC yang tidak ditentukan. Aksi deny dipicu ketika kedua kondisi terpenuhi. Permintaan jaringan publik tidak cocok dengan pernyataan ini karena nilaiacs:SourceVpc-nya tidak dimulai denganvpc-.
Permintaan ditolak jika cocok dengan salah satu pernyataan. Contoh berikut menolak akses baca ke example-bucket untuk semua pengguna kecuali yang berasal dari IP publik 203.0.113.5 atau VPC t4nlw426y44rd3iq4xxxx.
-
Karena Pihak yang berwenang dalam pernyataan deny berikut adalah karakter wildcard (
*) dan kondisi disertakan, pernyataan deny berlaku untuk semua pengguna, termasuk Pemilik bucket. -
Pernyataan deny berikut hanya membatasi akses dan tidak memberikan izin apa pun. Jika Pihak yang berwenang belum diberikan izin, Anda dapat menambahkan pernyataan allow untuk memberikan izin yang diperlukan.
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"203.0.113.5"
]
}
}
},
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
}
]
}
Skenario 6: Menetapkan blacklist IP
Blokir akses dari alamat IP atau rentang tertentu dengan menambahkan pernyataan deny ke bucket policy.
Kondisi StringLike: {"acs:SourceVpc": "*"} menggunakan wildcard untuk mencocokkan semua nilai dan tidak membatasi cakupan VPC. Kondisi ini ada hanya untuk memenuhi batasan bahwa acs:SourceIp memerlukan kondisi acs:SourceVpc yang sesuai.
-
Karena Pihak yang berwenang dalam pernyataan deny berikut adalah karakter wildcard (
*) dan kondisi disertakan, pernyataan deny berlaku untuk semua pengguna, termasuk Pemilik bucket. -
Anda dapat mengonfigurasi beberapa alamat IP dan rentang alamat IP. Pisahkan dengan koma.
{
"Version": "1",
"Statement": [{
"Effect": "Deny",
"Action": "oss:*",
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*",
"acs:oss:*:174649585760xxxx:example-bucket"
],
"Condition": {
"IpAddress": {
"acs:SourceIp": [
"101.***.***.100"
]
},
"StringLike": {
"acs:SourceVpc": [
"*"
]
}
}
}]
}
Skenario 7: Mengonfigurasi akses jaringan klasik
Kunci kondisi oss:ClassicIntranet menunjukkan apakah permintaan berasal dari jaringan klasik OSS. Nilai yang valid adalah true dan false. Beberapa layanan backend OSS (seperti Pengiriman log dan Daftar Bucket) mengakses bucket melalui jaringan klasik. Gunakan kondisi berikut untuk mencocokkan permintaan dari jaringan klasik.
"Condition": {
"StringEquals": {
"oss:ClassicIntranet": [
"true"
]
}
}
Saat mengonfigurasi pembatasan akses jaringan (kebijakan Deny), untuk mengizinkan layanan backend di atas, tambahkan kondisi berikut ke blok Condition pada pernyataan Deny guna mengecualikan permintaan jaringan klasik dan menghindari pemblokiran yang tidak diinginkan.
"StringNotEquals": {
"oss:ClassicIntranet": [
"true"
]
}
Skenario umum: Kontrol keamanan
Skenario berikut memberlakukan kontrol keamanan: pembatasan kredensial, pencegahan akses publik, dan batasan kebijakan retensi.
Skenario 1: Memerlukan kredensial temporary untuk panggilan API
Wajibkan kredensial akses sementara untuk panggilan API. Kebijakan ini menggunakan kunci kondisi acs:AccessId untuk memblokir akses dari kredensial jangka panjang (Akun Alibaba Cloud atau kunci akses RAM user). Contoh berikut menolak semua pengguna tanpa kredensial sementara (dimulai dengan TMP. atau STS.) untuk melihat example-bucket dan membuat daftar objeknya.
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition": {
"StringNotLike": {
"acs:AccessId": [
"TMP.*",
"STS.*"
]
}
}
}
]
}
Skenario 2: Melarang ACL publik
Cegah pengaturan ACL bucket dan objek menjadi publik. Buat dua pernyataan deny:
-
Gunakan kunci kondisi
oss:x-oss-acluntuk membuat pernyataan deny yang mencegah ACL bucket diatur ke izin apa pun selainprivate. Upaya apa pun untuk mengatur ACL baca-publik atau baca-tulis publik akan memicu aturan deny. -
Gunakan kunci kondisi
oss:x-oss-object-acluntuk membuat pernyataan deny yang mencegah ACL objek diatur ke izin apa pun selainprivatedandefault.
Permintaan ditolak jika cocok dengan salah satu pernyataan. Contoh berikut menolak operasi ACL publik pada example-bucket.
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:PutBucketAcl"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:example-bucket"
],
"Condition": {
"StringNotEquals": {
"oss:x-oss-acl": "private"
}
}
},
{
"Effect": "Deny",
"Action": [
"oss:PutObjectAcl"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:example-bucket/*"
],
"Condition": {
"StringNotEquals": {
"oss:x-oss-object-acl": [
"private",
"default"
]
}
}
}
]
}
Skenario 3: Membatasi periode retensi ObjectWorm
Setelah mengaktifkan kebijakan retensi tingkat objek (ObjectWorm) untuk bucket, gunakan bucket policy untuk membatasi periode retensi maksimum. Contoh berikut membatasi retensi hingga 30 hari. Permintaan PutObjectRetention apa pun yang melebihi 30 hari akan ditolak.
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:PutObjectRetention"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition": {
"NumericGreaterThan": {
"oss:object-remaining-retention-days": "30"
}
}
}
]
}
-
oss:object-remaining-retention-daysadalah kunci kondisi untuk kebijakan ObjectWorm. Ini mewakili jumlah hari retensi tersisa yang ditentukan dalam permintaan. -
Karena Pihak yang berwenang dalam kebijakan ini adalah karakter wildcard (*) dan kondisi disertakan, kebijakan berlaku untuk semua pengguna, termasuk Pemilik bucket.
Pengembangan dan integrasi tool
Selain Konsol, Anda dapat mengonfigurasi bucket policy menggunakan tool grafis, tool CLI, dan SDK.
-
Menggunakan tool grafis ossbrowser
ossbrowser menyediakan pengalaman visual mirip konsol untuk operasi kebijakan tingkat bucket. Instal dan masuk ke ossbrowser, lalu konfigurasikan kebijakan.
-
Menggunakan tool baris perintah ossutil
Tetapkan kebijakan otorisasi menggunakan perintah put-bucket-policy.
CatatanUntuk menetapkan kebijakan otorisasi bagi vector bucket, jalankan perintah
ossutil vectors-api put-bucket-policy. -
Menggunakan SDK
Konfigurasikan kebijakan menggunakan SDK seperti Java SDK, Python SDK, Go SDK, dan Node.js SDK. Referensi SDK mencakup semua bahasa yang didukung.
-
Memanggil API secara langsung
Panggil operasi PutBucketPolicy untuk menetapkan kebijakan otorisasi bucket.
Kuota dan batasan
-
Ukuran kebijakan: Sebuah bucket dapat memiliki beberapa pernyataan Bucket Policy, tetapi ukuran total semua kebijakan tidak boleh melebihi 16 KB.
-
Panjang bidang: Panjang setiap bidang dalam Bucket Policy tidak boleh melebihi 4.095 byte.