Bucket policy adalah kebijakan otorisasi berbasis resource yang dilampirkan ke bucket. Gunakan bucket policy untuk memberikan akses lintas akun, mengaktifkan akses anonim, atau membatasi akses berdasarkan alamat IP atau VPC.
Cara kerja
Bucket policy menggunakan model berbasis resource: dilampirkan ke bucket dan menentukan principal mana yang dapat melakukan aksi apa pada resource mana di bawah kondisi tertentu.
Saat permintaan masuk, OSS mengevaluasi semua kebijakan yang relevan, termasuk bucket policy dan kebijakan RAM. Evaluasi mengikuti prinsip deny-first: setiap penolakan eksplisit (Deny) 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 principal diatur ke karakter wildcard (*) dan kebijakan tidak mencakup kondisi, kebijakan tersebut hanya berlaku untuk pengguna selain pemilik bucket.
-
Jika principal diatur ke karakter wildcard (*) dan kebijakan mencakup 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 membuka data Anda kepada pengguna anonim.
Jika beberapa pernyataan berlaku untuk pengguna yang sama, izin efektif merupakan gabungan (union) dari semua pernyataan tersebut, mengikuti prinsip deny-first.
-
Kunci kondisi
acs:SourceIphanya mencocokkan alamat IP sumber dari 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 diizinkan, sehingga menimbulkan risiko akses tidak sah. Oleh karena itu, saat mengonfigurasi Bucket Policy, jika Anda menentukanacs:SourceIp, Anda juga harus menentukanacs:SourceVpcuntuk secara eksplisit mengidentifikasi sumber jaringan permintaan. -
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.
Konfigurasi bucket policy
OSS menyediakan dua metode konfigurasi: grafis dan sintaks.
-
Metode grafis: Antarmuka berbasis formulir untuk skenario otorisasi umum.
-
Metode sintaks: Editor berbasis JSON yang mendukung semua fitur kebijakan dan kombinasi kondisi kompleks.
Metode grafis
-
Buka daftar Buckets dan klik bucket target.
-
Di panel navigasi sebelah 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 principal yang akan diberi izin.
-
All Accounts (*): Memberikan izin kepada siapa saja, termasuk pengguna anonim.
-
RAM User: Pilih pengguna RAM yang termasuk dalam Akun Alibaba Cloud saat ini.
Akun yang sedang login harus merupakan Akun Alibaba Cloud (akun root) atau pengguna RAM dengan izin manajemen bucket dan izin
ListUsersdi RAM. Jika tidak, daftar pengguna RAM tidak akan terlihat. -
Other Accounts: Masukkan UID akun lain atau pengguna RAM yang ingin diotorisasi, atau pengguna sementara 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 umum operasi yang diizinkan. 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)
Tentukan kondisi di mana kebijakan berlaku.
-
Access Method: Opsi meliputi HTTPS dan HTTP. Setelah memilih opsi, kebijakan hanya berlaku untuk permintaan akses yang menggunakan metode yang dipilih.
-
IP =: Masukkan daftar alamat IP. Jika memilih opsi ini, kebijakan hanya berlaku untuk permintaan akses dari alamat IP yang ditentukan.
-
IP ≠: Masukkan daftar alamat IP. Jika memilih opsi ini, kebijakan hanya berlaku untuk permintaan akses yang bukan berasal dari alamat IP yang ditentukan.
-
VPC =: Pilih VPC yang termasuk dalam akun saat ini atau masukkan VPC milik akun lain. Jika 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 milik akun lain. Jika memilih opsi ini, kebijakan hanya berlaku untuk permintaan akses yang bukan berasal dari VPC yang ditentukan.
Saat mengonfigurasi beberapa kondisi, semua kondisi harus terpenuhi (hubungan AND).
-
-
Setelah memastikan konfigurasi sudah benar, klik OK untuk menerapkan Bucket Policy.
Metode sintaks
-
Buka daftar Buckets dan klik bucket target.
-
Di panel navigasi sebelah kiri, klik .
-
Pilih Add by Syntax, lalu klik Edit. Di editor, masukkan kebijakan otorisasi dalam format JSON.
Contoh kebijakan: Tolak pengguna
20214760404935xxxxdari semua operasi padaexample-bucketjika 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: Badan utama kebijakan. Berisi satu atau lebih aturan spesifik. Setiap aturan mendukung Sid opsional, serta mencakup Effect, Action, Principal, Resource, dan Condition.
Elemen kebijakan
Deskripsi
Makna dalam contoh
Sid (opsional)
ID Pernyataan. Pengenal unik yang mudah dibaca untuk setiap pernyataan dalam kebijakan. Membantu diferensiasi, manajemen, 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. Mendukung karakter wildcard
*.Menolak semua aksi OSS (
oss:*).Principal
Pengguna, akun, atau peran yang menjadi sasaran kebijakan.
Mengatur bidang Principal ke daftar kosong (
<code class="inline-code___1opEe" data-tag="code" id="396b0553f4p34">Principal:[]) identik dengan mengaturnya untuk semua akun (<code class="inline-code___1opEe" data-tag="code" id="86478af1e5pzx">Principal:["*"]).Kebijakan hanya berlaku untuk pengguna RAM
20214760404935xxxx.Resource
Resource yang menjadi sasaran kebijakan.
Kebijakan berlaku untuk bucket
example-bucketitu sendiri dan semua objek di dalamnya.Condition
Kondisi di mana kebijakan berlaku.
Saat mengonfigurasi beberapa kondisi, semua kondisi harus terpenuhi (hubungan AND).
Kebijakan Deny ini hanya berlaku ketika VPC sumber permintaan bukan
vpc-t4nlw426y44rd3iq4xxxx.Referensi lengkap elemen kebijakan: Sintaks dan elemen otorisasi.
-
-
Setelah memastikan kebijakan otorisasi sudah benar, klik Save dan ikuti petunjuk di layar.
Konfigurasi bucket policy vektor
Bucket vektor hanya mendukung metode sintaks untuk konfigurasi bucket policy.
-
Buka daftar Vector Buckets dan klik bucket vektor target.
-
Di panel navigasi sebelah kiri, klik .
-
Klik Edit. Di editor, masukkan kebijakan otorisasi dalam format JSON.
Contoh kebijakan: Berikan pengguna
20816353761158****izin untuk membaca dan menulis data vektor pada tabel indeksindextestdivector-bucket-example.{ "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: Badan utama kebijakan. Berisi satu atau lebih aturan spesifik. Setiap aturan mencakup Effect, Action, Principal, Resource, dan Condition.
Elemen kebijakan
Deskripsi
Makna dalam contoh
Effect
Efek kebijakan. Nilai yang valid adalah
AllowdanDeny.Mengizinkan permintaan.
Action
Aksi spesifik yang dilakukan pada resource. Mendukung karakter wildcard
*.Membaca dan menulis data vektor.
Principal
Pengguna, akun, atau peran yang menjadi sasaran kebijakan.
Mengatur bidang Principal ke daftar kosong (
<code class="inline-code___1opEe" data-init-id="396b0553f4p34" data-tag="code" id="38fd39c90a131">Principal:[]) sama dengan mengaturnya untuk semua akun (<code class="inline-code___1opEe" data-init-id="86478af1e5pzx" data-tag="code" id="da174b022cl89">Principal:["*"]).Kebijakan hanya berlaku untuk pengguna RAM
20816353761158****.Resource
Resource yang menjadi sasaran kebijakan.
Kebijakan berlaku untuk tabel indeks
indextestdi bucketvector-bucket-example.Condition
Kondisi di mana kebijakan berlaku.
Saat mengonfigurasi beberapa kondisi, semua kondisi harus terpenuhi (hubungan AND).
Tidak ada.
Referensi lengkap elemen kebijakan: Sintaks dan elemen otorisasi.
-
-
Setelah memastikan kebijakan otorisasi sudah benar, klik Save dan ikuti petunjuk di layar.
Konfigurasi kebijakan OSS-HDFS
Untuk memastikan pengguna layanan OSS-HDFS dapat mengakses direktori .dlsdata/ dan objek-objeknya, jangan mengatur operasi yang diizinkan ke Deny Access saat mengonfigurasi Bucket Policy untuk bucket yang diaktifkan OSS-HDFS. 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 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. Setiap skenario mencakup contoh kebijakan yang dapat Anda sesuaikan.
Skenario 1: Memberikan izin baca/tulis
Berikan anggota tim atau mitra akses baca/tulis ke bucket. Contoh ini memberikan izin baca/tulis pada example-bucket kepada pengguna RAM 27737962156157xxxx dan 20214760404935xxxx.
Kebijakan ini tidak memberikan izin untuk melihat daftar bucket. Pengguna RAM tidak dapat menjelajahi halaman Buckets secara langsung. Sebagai gantinya, mereka dapat menambahkan bucket target ke di panel navigasi sebelah 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 baca-saja ke direktori tertentu
Berikan akses baca-saja ke direktori tertentu. Contoh ini memberikan izin baca-saja kepada pengguna RAM 20214760404935xxxx pada direktori dengan awalan hangzhou/2020 dan shanghai/2015 di example-bucket.
Kebijakan ini tidak memberikan izin untuk melihat daftar bucket. Pengguna RAM tidak dapat menjelajahi halaman Buckets secara langsung. Sebagai gantinya, mereka dapat menambahkan bucket target ke di panel navigasi sebelah 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 mendaftar objek. Contoh ini memberikan izin lihat dan daftar kepada pengguna RAM pada example-bucket.
Kebijakan ini tidak memberikan izin untuk melihat daftar bucket. Pengguna RAM tidak dapat menjelajahi halaman Buckets secara langsung. Sebagai gantinya, mereka dapat menambahkan bucket target ke di panel navigasi sebelah 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. Pengguna RAM 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 lain.
Saat memberikan izin kepada peran RAM, Principal harus mengikuti format ini: arn:sts::<uid>:assumed-role/<role-name>/<session-name>. Nilai untuk <role-name> dan <session-name> harus seluruhnya huruf kecil.
{
"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 kepada semua pengguna
Izinkan semua pengguna mendaftar objek tanpa mengakses isinya. Contoh ini memberikan izin daftar kepada semua pengguna (*) pada example-bucket.
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}
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 merangkum pendekatan umum.
|
Access Source |
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 dari membaca objek di example-bucket.
-
Karena principal dalam pernyataan deny berikut adalah karakter wildcard (
*) dan mencakup kondisi, pernyataan deny berlaku untuk semua pengguna, termasuk pemilik bucket. -
Pernyataan deny berikut hanya membatasi akses dan tidak memberikan izin apa pun. Jika principal belum diberi 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 (Tolak 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-). Lalu menggunakanNotIpAddress: {"acs:SourceIp": "..."}untuk menolak permintaan yang bukan berasal dari alamat IP yang ditentukan. Aksi deny dipicu saat kedua kondisi terpenuhi. -
Pernyataan 2 (Tolak semua permintaan VPC): Pernyataan ini menggunakan
StringLike: {"acs:SourceVpc": "vpc-*"}untuk mencocokkan dan menolak semua permintaan dari VPC mana pun, karena tujuannya adalah hanya mengizinkan akses 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 principal dalam pernyataan deny berikut adalah karakter wildcard (
*) dan mencakup kondisi, pernyataan deny berlaku untuk semua pengguna, termasuk pemilik bucket. -
Pernyataan deny berikut hanya membatasi akses dan tidak memberikan izin apa pun. Jika principal belum diberi 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 (Tolak semua permintaan dari luar VPC yang ditentukan): Pernyataan ini menggunakan
StringNotEquals: {"acs:SourceVpc": "..."}untuk menolak permintaan dari VPC lain dan jaringan publik. -
Pernyataan 2 (Tolak 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 saat 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 principal dalam pernyataan deny berikut adalah karakter wildcard (
*) dan mencakup kondisi, pernyataan deny berlaku untuk semua pengguna, termasuk pemilik bucket. -
Pernyataan deny berikut hanya membatasi akses dan tidak memberikan izin apa pun. Jika principal belum diberi 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 saat 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 saat 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 principal dalam pernyataan deny berikut adalah karakter wildcard (
*) dan mencakup kondisi, pernyataan deny berlaku untuk semua pengguna, termasuk pemilik bucket. -
Pernyataan deny berikut hanya membatasi akses dan tidak memberikan izin apa pun. Jika principal belum diberi 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 IP 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 hanya ada untuk memenuhi batasan bahwa acs:SourceIp memerlukan kondisi acs:SourceVpc yang sesuai.
-
Karena principal dalam pernyataan deny berikut adalah karakter wildcard (
*) dan mencakup kondisi, 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 log delivery dan bucket inventory) 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 pernyataan Deny guna mengecualikan permintaan jaringan klasik dan menghindari pemblokiran yang tidak disengaja.
"StringNotEquals": {
"oss:ClassicIntranet": [
"true"
]
}
Skenario umum: Kontrol keamanan
Skenario berikut menerapkan kontrol keamanan: pembatasan kredensial, pencegahan akses publik, dan batasan kebijakan retensi.
Skenario 1: Mengharuskan kredensial sementara untuk panggilan API
Mengharuskan 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 pengguna RAM). Contoh berikut menolak semua pengguna tanpa kredensial sementara (dimulai dengan TMP. atau STS.) dari melihat example-bucket dan mendaftar 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 ACL bucket dan objek diatur ke 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. Setiap upaya mengatur ACL public-read atau public-read-write 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. Setiap permintaan PutObjectRetention 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 merepresentasikan jumlah hari retensi yang tersisa yang ditentukan dalam permintaan. -
Karena principal dalam kebijakan ini adalah karakter wildcard (*) dan mencakup kondisi, kebijakan berlaku untuk semua pengguna, termasuk pemilik bucket.
Integrasi pengembangan dan tool
Selain konsol, Anda dapat mengonfigurasi bucket policy menggunakan tool grafis, tool CLI, dan SDK.
-
Gunakan tool grafis ossbrowser
ossbrowser menyediakan pengalaman visual mirip konsol untuk operasi kebijakan tingkat bucket. Instal dan login ke ossbrowser, lalu konfigurasikan kebijakan.
-
Gunakan tool baris perintah ossutil
Tetapkan kebijakan otorisasi menggunakan perintah put-bucket-policy.
CatatanUntuk menetapkan kebijakan otorisasi untuk bucket vektor, jalankan perintah
ossutil vectors-api put-bucket-policy. -
Gunakan SDK
Konfigurasikan kebijakan menggunakan SDK seperti Java SDK, Python SDK, Go SDK, dan Node.js SDK. Referensi SDK mencakup semua bahasa yang didukung.
-
Panggil API secara langsung
Panggil operasi PutBucketPolicy untuk menetapkan kebijakan otorisasi bucket.
Kuota dan batasan
-
Ukuran kebijakan: Bucket dapat memiliki beberapa pernyataan Bucket Policy, tetapi ukuran total semua kebijakan tidak boleh melebihi 16 KB.
-
Panjang field: Panjang setiap field dalam Bucket Policy tidak boleh melebihi 4.095 byte.