Topik ini menjelaskan elemen Action, Resource, dan Condition dalam kebijakan Resource Access Management (RAM) serta skenario penerapannya.
Definisi Aksi
Elemen Action menentukan satu atau beberapa Operasi API. Anda dapat menggunakan elemen ini untuk mengizinkan atau menolak akses pengguna ke operasi tersebut.
Saat membuat kebijakan otorisasi untuk Tablestore, tambahkan awalan ots: pada setiap action, pisahkan beberapa action dengan koma, dan gunakan karakter wildcard asterisk (*) untuk pencocokan awalan atau akhiran.
Contoh definisi Action yang umum adalah sebagai berikut:
Operasi API tunggal
"Action": "ots:GetRow" Beberapa API
"Action": [
"ots:PutRow",
"ots:GetRow"
] Semua operasi API hanya-baca
{
"Version": "1",
"Statement": [
{
"Action": [
"ots:BatchGet*",
"ots:Describe*",
"ots:Get*",
"ots:List*",
"ots:Consume*",
"ots:Search",
"ots:ComputeSplitPointsBySize"
],
"Resource": "*",
"Effect": "Allow"
}
]
} Semua operasi API baca-tulis
"Action": "ots:*" Semua operasi API terkait SQL
"Action": "ots:SQL*"Definisi Resource
Elemen Resource untuk Tablestore mencakup bidang service, region, user_id, instance_name, dan table_name. Gunakan elemen ini untuk menentukan resource Tablestore yang dapat diakses oleh pengguna lain. Setiap bidang mendukung karakter wildcard asterisk (*) untuk pencocokan awalan atau akhiran. Tentukan elemen Resource dalam format berikut:
acs:ots:[region]:[user_id]:instance/[instance_name]/table/[table_name] Tetapkan bidang service ke ots. Bidang [region] menentukan ID wilayah tempat resource berada, misalnya cn-hangzhou. Bidang [user_id] menentukan ID akun Alibaba Cloud. Bidang [instance_name] menentukan nama Instans Tablestore. Bidang [table_name] menentukan nama tabel Tablestore. Konfigurasikan bidang-bidang ini sesuai pengaturan aktual Anda.
Nama Instans Tablestore tidak peka huruf besar/kecil. Kami menyarankan Anda menentukan nilai bidang instance_name dalam huruf kecil.
Elemen Resource untuk Tunnel Service didefinisikan pada level instans, bukan level tabel, dan mencakup bidang service, region, user_id, dan instance_name. Tentukan elemen Resource dalam format berikut:
acs:ots:[region]:[user_id]:instance/[instance_name] Contoh definisi Resource
Semua resource untuk semua pengguna di semua wilayah
"Resource": "acs:ots:*:*:*"Semua Instans dan tabel untuk pengguna 123456 di wilayah Tiongkok (Hangzhou)
"Resource": "acs:ots:cn-hangzhou:123456:instance*"Instans bernama abc dan semua tabelnya untuk pengguna 123456 di wilayah Tiongkok (Hangzhou)
"Resource": [ "acs:ots:cn-hangzhou:123456:instance/abc", "acs:ots:cn-hangzhou:123456:instance/abc/table*" ]Semua Instans yang diawali dengan abc dan semua tabelnya
"Resource": "acs:ots:*:*:instance/abc*"Semua tabel yang diawali dengan xyz dalam Instans yang diawali dengan abc. Ini tidak mencakup resource instans dan tidak cocok dengan
acs:ots:*:*:instance/abc*."Resource": "acs:ots:*:*:instance/abc*/table/xyz*"Semua Instans yang diakhiri dengan abc dan semua tabelnya yang diakhiri dengan xyz
"Resource": [ "acs:ots:*:*:instance/*abc", "acs:ots:*:*:instance/*abc/table/*xyz" ]
Catatan penggunaan
Elemen Action dan Resource dalam kebijakan RAM diverifikasi melalui pencocokan string. Saat menentukan elemen-elemen ini, Anda dapat menggunakan karakter wildcard asterisk (*) untuk pencocokan awalan atau akhiran. Jika elemen Resource didefinisikan sebagai
acs:ots:*:*:instance/*/, makaacs:ots:*:*:instance/abctidak cocok. Jika elemen Resource didefinisikan sebagaiacs:ots:*:*:instance/abc, makaacs:ots:*:*:instance/abc/table/xyztidak cocok.Jika pengguna ingin mengelola Instans di Konsol Tablestore, Konsol Tablestore harus mengkueri daftar Instans. Dalam hal ini, Anda harus memberikan izin baca kepada pengguna untuk resource
acs:ots:[region]:[user_id]:instance/*.Saat memanggil Operasi API seperti BatchGetRow atau BatchWriteRow untuk melakukan operasi pada beberapa tabel sekaligus, layanan backend melakukan autentikasi pada setiap tabel secara terpisah. Anda hanya dapat melakukan operasi tersebut jika semua tabel lolos autentikasi. Jika tidak, error izin akan dikembalikan.
Tablestore Operasi API
Tablestore menyediakan operasi manajemen Instans, operasi tabel, operasi baca/tulis data, dan operasi Tunnel Service. Tabel berikut menjelaskan cara mengonfigurasi resource untuk setiap jenis operasi.
Resource yang Dapat Diakses oleh API Manajemen
API manajemen menangani operasi level instans dan dipanggil dari konsol atau menggunakan OpenAPI. Awalan acs:ots:[region]:[user_id]: dihilangkan dari resource yang dijelaskan di bawah ini. Hanya Instans yang ditentukan.
Nama API | Action | Resource yang diakses |
CreateInstance | ots:InsertInstance | instance/[instance_name] |
UpdateInstance | ots:UpdateInstance | instance/[instance_name] |
GetInstance | ots:GetInstance | instance/[instance_name] |
DeleteInstance | ots:DeleteInstance | instance/[instance_name] |
ListInstances | ots:ListInstance | instance/* |
ChangeResourceGroup | ots:UpdateInstance | instance/[instance_name] |
ListTagResources | ots:ListTagResourcesCustomTags | instance/* |
TagResources | ots:TagResourcesCustomTags | instance/[instance_name] |
UntagResources | ots:UntagResourcesCustomTags | instance/[instance_name] |
UpdateInstancePolicy | ots:UpdateInstancePolicy | instance/[instance_name] |
DeleteInstancePolicy | ots:DeleteInstancePolicy | instance/[instance_name] |
CheckInstancePolicy | ots:CheckInstancePolicy | instance/[instance_name] |
UpdateInstanceElasticVCUUpperLimit | ots:UpdateInstanceElasticVCUUpperLimit | instance/[instance_name] |
Resource yang diakses oleh API data
Operasi tabel dan operasi baca/tulis data bekerja pada tabel dan baris, serta dapat dipanggil dari Konsol Tablestore atau menggunakan SDK Tablestore. Jika Anda menentukan elemen Action dan Resource untuk operasi ini, beberapa fitur mungkin tidak tersedia di Konsol Tablestore. Awalan acs:ots:[region]:[user_id]: dihilangkan dari nama resource di bawah ini. Hanya Instans dan tabel yang ditentukan.
Nama API | Action | Resource yang Diakses |
ListTable | ots:ListTable | instance/[instance_name]/table* |
CreateTable | ots:CreateTable | instance/[instance_name]/table/[table_name] |
UpdateTable | ots:UpdateTable | instance/[instance_name]/table/[table_name] |
DescribeTable | ots:DescribeTable | instance/[instance_name]/table/[table_name] |
DeleteTable | ots:DeleteTable | instance/[instance_name]/table/[table_name] |
CreateGlobalTable |
| instance/[instance_name]/table/[table_name] |
DescribeGlobalTable | ots:DescribeGlobalTable | instance/[instance_name]/table/[table_name] |
UpdateGlobalTable |
| instance/[instance_name]/table/[table_name] |
BindGlobalTable |
| instance/[instance_name]/table/[table_name] |
UnbindGlobalTable |
| instance/[instance_name]/table/[table_name] |
AddDefinedColumn | ots:AddDefinedColumn | instance/[instance_name]/table/[table_name] |
DeleteDefinedColumn | ots:DeleteDefinedColumn | instance/[instance_name]/table/[table_name] |
GetRow | ots:GetRow | instance/[instance_name]/table/[table_name] |
PutRow | ots:PutRow | instance/[instance_name]/table/[table_name] |
UpdateRow | ots:UpdateRow | instance/[instance_name]/table/[table_name] |
DeleteRow | ots:DeleteRow | instance/[instance_name]/table/[table_name] |
GetRange | ots:GetRange | instance/[instance_name]/table/[table_name] |
BatchGetRow | ots:BatchGetRow | instance/[instance_name]/table/[table_name] |
BatchWriteRow | ots:BatchWriteRow | instance/[instance_name]/table/[table_name] |
ComputeSplitPointsBySize | ots:ComputeSplitPointsBySize | instance/[instance_name]/table/[table_name] |
StartLocalTransaction | ots:StartLocalTransaction | instance/[instance_name]/table/[table_name] |
CommitTransaction | ots:CommitTransaction | instance/[instance_name]/table/[table_name] |
AbortTransaction | ots:AbortTransaction | instance/[instance_name]/table/[table_name] |
CreateIndex | ots:CreateIndex | instance/[instance_name]/table/[table_name] |
DropIndex | ots:DropIndex | instance/[instance_name]/table/[table_name] |
CreateSearchIndex | ots:CreateSearchIndex | instance/[instance_name]/table/[table_name] |
UpdateSearchIndex | ots:UpdateSearchIndex | instance/[instance_name]/table/[table_name] |
DeleteSearchIndex | ots:DeleteSearchIndex | instance/[instance_name]/table/[table_name] |
ListSearchIndex | ots:ListSearchIndex | instance/[instance_name]/table/[table_name] |
DescribeSearchIndex | ots:DescribeSearchIndex | instance/[instance_name]/table/[table_name] |
Search | ots:Search | instance/[instance_name]/table/[table_name] |
ComputeSplits | ots:ComputeSplits | instance/[instance_name]/table/[table_name] |
ParallelScan | ots:ParallelScan | instance/[instance_name]/table/[table_name] |
CreateTunnel | ots:CreateTunnel | instance/[instance_name]/table/[table_name] |
DeleteTunnel | ots:DeleteTunnel | instance/[instance_name]/table/[table_name] |
ListTunnel | ots:ListTunnel | instance/[instance_name]/table/[table_name] |
ConsumeTunnel | ots:ConsumeTunnel | instance/[instance_name]/table/[table_name] |
DescribeTunnel | ots:DescribeTunnel | instance/[instance_name]/table/[table_name] |
BulkImport | ots:BulkImport | instance/[instance_name]/table/[table_name] |
BulkExport | ots:BulkExport | instance/[instance_name]/table/[table_name] |
SQL_Select | ots:SQL_Select | instance/[instance_name]/table/[table_name] |
SQL_Create | ots:SQL_Create | instance/[instance_name]/table/[table_name] |
SQL_DropMapping | ots:SQL_DropMapping | instance/[instance_name]/table/[table_name] |
Resource untuk akses API Tunnel
Operasi Tunnel Service menangani tugas terkait saluran data dan dapat dipanggil dari Konsol Tablestore atau menggunakan SDK Tablestore. Jika Anda menentukan elemen Action dan Resource untuk operasi ini, beberapa fitur mungkin tidak tersedia di Konsol Tablestore. Awalan acs:ots:[region]:[user_id]: dihilangkan dari nama resource di bawah ini. Hanya Instans dan tabel yang ditentukan.
Operasi API/Tindakan | Resource |
ListTable | instance/[instance_name] |
CreateTable | instance/[instance_name] |
UpdateTable | instance/[instance_name] |
DescribeTable | instance/[instance_name] |
DeleteTable | instance/[instance_name] |
AddDefinedColumn | instance/[instance_name] |
DeleteDefinedColumn | instance/[instance_name] |
GetRow | instance/[instance_name] |
PutRow | instance/[instance_name] |
UpdateRow | instance/[instance_name] |
DeleteRow | instance/[instance_name] |
GetRange | instance/[instance_name] |
BatchGetRow | instance/[instance_name] |
BatchWriteRow | instance/[instance_name] |
ComputeSplitPointsBySize | instance/[instance_name] |
StartLocalTransaction | instance/[instance_name] |
CommitTransaction | instance/[instance_name] |
AbortTransaction | instance/[instance_name] |
CreateIndex | instance/[instance_name] |
DropIndex | instance/[instance_name] |
CreateSearchIndex | instance/[instance_name] |
DeleteSearchIndex | instance/[instance_name] |
ListSearchIndex | instance/[instance_name] |
DescribeSearchIndex | instance/[instance_name] |
Search | instance/[instance_name] |
CreateTunnel | instance/[instance_name] |
DeleteTunnel | instance/[instance_name] |
ListTunnel | instance/[instance_name] |
DescribeTunnel | instance/[instance_name] |
ConsumeTunnel | instance/[instance_name] |
Definisi Condition
Anda dapat menggunakan elemen Condition untuk mengonfigurasi kebijakan yang menentukan kondisi untuk mengizinkan atau menolak akses pengguna. Kebijakan untuk Tablestore mendukung berbagai kondisi autentikasi, seperti Kontrol akses berbasis alamat IP, kontrol akses berbasis HTTPS, kontrol akses berbasis autentikasi multi-faktor (MFA), kontrol akses berdasarkan versi TLS tertentu (TLS v1.2 dan TLS v1.3), serta kontrol akses berbasis waktu.
Kontrol akses berbasis alamat IP
Anda dapat membuat daftar putih alamat IP untuk menentukan alamat IP atau Blok CIDR yang diizinkan mengakses resource Tablestore. Metode ini cocok untuk skenario berikut:
Membatasi akses dari beberapa alamat IP.
Contoh berikut menunjukkan cara mengizinkan permintaan hanya dari alamat IP 10.10.XX.XX dan 10.11.XX.XX untuk mengakses resource Tablestore:
{ "Statement": [ { "Effect": "Allow", "Action": "ots:*", "Resource": "acs:ots:*:*:*", "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.XX.XX", "10.11.XX.XX" ] } } } ], "Version": "1" }Anda dapat membatasi alamat IP individual dan Blok CIDR.
Contoh berikut menunjukkan cara mengizinkan permintaan hanya dari alamat IP 10.10.XX.XX atau Blok CIDR 10.10.XX.XX/24 untuk mengakses resource Tablestore:
{ "Statement": [ { "Effect": "Allow", "Action": "ots:*", "Resource": "acs:ots:*:*:*", "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.XX.XX", "10.10.XX.XX/24" ] } } } ], "Version": "1" }
Kontrol akses berbasis HTTPS
Anda dapat menggunakan kebijakan kustom untuk mewajibkan akses ke Tablestore dilakukan melalui HTTPS.
Contoh berikut mewajibkan permintaan untuk mengakses Tablestore menggunakan HTTPS.
{
"Statement": [
{
"Effect": "Allow",
"Action": "ots:*",
"Resource": "acs:ots:*:*:*",
"Condition": {
"Bool": {
"acs:SecureTransport": "true"
}
}
}
],
"Version": "1"
} Kontrol akses berbasis versi TLS
Anda dapat menggunakan kebijakan kustom untuk membatasi akses ke Tablestore hanya untuk permintaan yang menggunakan TLS v1.2 atau TLS v1.3 saja.
Contoh berikut membatasi akses ke Tablestore hanya untuk TLS v1.2 dan TLS v1.3.
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ots:*",
],
"Resource": [
"*"
],
"Condition": {
"StringNotEquals": {
"ots:TLSVersion": [
"TLSv1.2",
"TLSv1.3"
]
}
}
}
]
}Kontrol akses berbasis MFA
Anda dapat membuat kebijakan kustom untuk mengizinkan akses ke resource Tablestore hanya untuk permintaan yang lolos autentikasi multi-faktor (MFA).
Contoh berikut membatasi akses ke Tablestore hanya untuk permintaan yang lolos MFA.
{
"Statement": [
{
"Effect": "Allow",
"Action": "ots:*",
"Resource": "acs:ots:*:*:*",
"Condition": {
"Bool": {
"acs:MFAPresent ": "true"
}
}
}
],
"Version": "1"
} Kontrol akses berbasis waktu
Anda dapat membuat kebijakan kustom untuk menentukan kapan permintaan akses diizinkan atau ditolak. Permintaan yang dikirim sebelum waktu yang ditentukan akan diizinkan atau ditolak.
Contoh berikut mengizinkan pengguna mengakses Tablestore hanya sebelum pukul 00:00 pada 1 Januari 2016 (UTC+8).
{
"Statement": [
{
"Effect": "Allow",
"Action": "ots:*",
"Resource": "acs:ots:*:*:*",
"Condition": {
"DateLessThan": {
"acs:CurrentTime": "2016-01-01T00:00:00+08:00"
}
}
}
],
"Version": "1"
} Skenario
Bagian ini menjelaskan skenario otorisasi khas menggunakan elemen Action, Resource, dan Condition. Contohnya termasuk mengonfigurasi daftar putih alamat IP, mengizinkan atau menolak akses ke resource tertentu di wilayah tertentu, serta menentukan waktu dan metode akses.
Skenario 1: Beberapa kondisi kontrol akses
Dalam skenario ini, Pengguna RAM yang alamat IP-nya termasuk dalam Blok CIDR 10.10.XX.XX/24 dapat melakukan operasi baca atau tulis pada Instans bernama online-01 dan online-02, termasuk semua tabel dalam Instans tersebut. Akses hanya diizinkan melalui HTTPS sebelum pukul 00:00:00 pada 1 Januari 2016.
Login ke Konsol RAM menggunakan Akun Alibaba Cloud Anda (layanan Resource Access Management (RAM) diaktifkan secara default).
Buat kebijakan khusus.
Pada panel navigasi sebelah kiri, pilih .
Di halaman Policies, klik Create Policy.
Pada halaman Create Access Policy, klik tab Script Editor. Masukkan skrip berikut dalam dokumen kebijakan, lalu klik OK.
{ "Statement": [ { "Effect": "Allow", "Action": "ots:*", "Resource": [ "acs:ots:*:*:instance/online-01", "acs:ots:*:*:instance/online-01/table*", "acs:ots:*:*:instance/online-02", "acs:ots:*:*:instance/online-02/table*" ], "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.XX.XX/24" ] }, "DateLessThan": { "acs:CurrentTime": "2016-01-01T00:00:00+08:00" }, "Bool": { "acs:SecureTransport": "true" } } } ], "Version": "1" }Pada dialog Create Access Policy, masukkan nama dan deskripsi kebijakan, lalu klik OK.
Lampirkan kebijakan ke pengguna RAM.
Pada panel navigasi sebelah kiri, pilih .
Pada halaman Users, temukan Pengguna RAM yang ingin Anda beri izin, lalu klik Add Permissions di kolom Actions.
Pada panel Grant Permission, pilih Kebijakan Kustom, cari nama kebijakan yang telah Anda buat, lalu centang kotak di samping kebijakan tersebut untuk menambahkannya ke kolom Selected Policy.
Klik Grant Permissions.
Klik Shutdown.
Skenario 2: Menolak permintaan
Dalam skenario ini, Pengguna RAM yang menggunakan alamat IP 10.10.XX.XX tidak dapat menulis data ke tabel dalam Instans yang namanya mengandung awalan online atau product di wilayah Tiongkok (Beijing). Kebijakan ini tidak berlaku untuk operasi level instans.
Login ke Konsol RAM menggunakan Akun Alibaba Cloud Anda (layanan RAM diaktifkan secara default).
Anda dapat membuat kebijakan akses.
Pada panel navigasi sebelah kiri, pilih .
Di halaman Policies, klik Create Policy.
Pada halaman Create Policy, klik tab Script Editor, masukkan konten berikut di editor kebijakan, lalu klik OK.
{ "Statement": [ { "Effect": "Deny", "Action": [ "ots:Create*", "ots:Insert*", "ots:Put*", "ots:Update*", "ots:Delete*", "ots:BatchWrite*" ], "Resource": [ "acs:ots:cn-beijing:*:instance/online*/table*", "acs:ots:cn-beijing:*:instance/product*/table*" ], "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.XX.XX" ] } } } ], "Version": "1" }Dalam kotak dialog Create Policy, konfigurasikan parameter Nama dan Deskripsi, lalu klik OK.
Lampirkan kebijakan ke pengguna RAM.
Pada panel navigasi sebelah kiri, pilih .
Di halaman Users, temukan pengguna RAM kepada siapa Anda ingin melampirkan kebijakan. Di kolom Actions, klik Add Permissions.
Pada panel Grant Permission, pilih Kebijakan Kustom, cari nama kebijakan yang telah Anda buat, lalu centang kotak di samping kebijakan tersebut untuk menambahkannya ke kolom Selected Policy.
Klik Grant Permissions.
Klik Close.
Skenario 3: Batasi instance yang dapat dikelola oleh pengguna RAM
Dalam skenario ini, Pengguna RAM hanya dapat mengelola Instans tertentu dan tidak dapat melihat atau mengelola Instans lainnya.
Login ke Konsol RAM menggunakan Akun Alibaba Cloud Anda (layanan RAM diaktifkan secara default).
Buat kebijakan akses.
Pada panel navigasi sebelah kiri, pilih .
Di halaman Policies, klik Create Policy.
Pada halaman Create Access Policy, klik tab Script Editor.
Masukkan dokumen kebijakan berikut, lalu klik OK.
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ots:ListInstance", "ots:ListTagResources" ], "Resource": "acs:ots:*:*:instance/*" }, { "Effect": "Allow", "Action": "ots:*", "Resource": [ "acs:ots:*:*:instance/yourInstance", "acs:ots:*:*:instance/yourInstance/table*" ] }, { "Effect": "Allow", "Action": "cms:Query*", "Resource": "*" } ] }Untuk informasi lebih lanjut tentang kebijakan akses, lihat tabel berikut.
kebijakan akses
Deskripsi
{ "Effect": "Allow", "Action": [ "ots:ListInstance", "ots:ListTagResources" ], "Resource": "acs:ots:*:*:instance/*" }PentingAnda harus mengonfigurasi opsi ini agar Pengguna RAM hanya dapat mengelola instans tertentu di konsol.
Anda harus memberikan izin kepada Pengguna RAM untuk mengambil daftar instans dan daftar tag karena halaman Overview di Konsol Tablestore perlu meminta data tersebut.
{ "Effect": "Allow", "Action": "ots:*", "Resource": [ "acs:ots:*:*:instance/yourInstance", "acs:ots:*:*:instance/yourInstance/table*" ] }Berikan Pengguna RAM semua izin pada instans
yourInstancedan semua tabel dalam instans tersebut.{ "Effect": "Allow", "Action": "cms:Query*", "Resource": "*" }Berikan izin kepada pengguna RAM untuk menggunakan CloudMonitor guna melihat data pemantauan instance dan tabel.
Pada dialog Create Policy, konfigurasikan parameter Nama Kebijakan dan Deskripsi, lalu klik OK.
Lampirkan kebijakan ke pengguna RAM.
Pada panel navigasi sebelah kiri, pilih .
Pada halaman Users, temukan Pengguna RAM yang ingin Anda beri izin. Di kolom Actions, klik Add Permissions.
Pada panel Grant Permission, pilih Kebijakan Kustom, cari nama kebijakan yang telah Anda buat, lalu centang kotak di samping kebijakan tersebut untuk menambahkannya ke kolom Kebijakan Terpilih.
Klik Grant Permissions.
Klik Close.