Gunakan kebijakan RAM untuk membatasi panggilan OpenAPI hanya dari IP sumber tepercaya, sehingga mengurangi dampak jika AccessKey bocor.
Risiko keamanan
Secara default, entitas apa pun yang memiliki AccessKey valid dapat memanggil OpenAPI dari alamat IP mana saja. Jika AccessKey bocor—karena salah konfigurasi, kode sumber yang menyertakan kredensial secara hardcoded, atau kepergian karyawan—penyerang dapat langsung mengendalikan sumber daya cloud Anda, berpotensi menyebabkan pencurian data, penghapusan berbahaya, atau biaya tak terduga.
Cara kerja
Kebijakan RAM dengan kondisi acs:SourceIp membatasi panggilan API hanya dari IP tepercaya, seperti IP egress perusahaan Anda atau IP Bastionhost. Bahkan jika AccessKey bocor, panggilan hanya berhasil jika berasal dari alamat-alamat tersebut.
Saat acs:SourceIp mencantumkan beberapa IP atau rentang CIDR, evaluasinya menggunakan logika OR: panggilan berhasil jika IP sumber cocok dengan salah satu entri.
Batasan
-
Hanya untuk RAM user: Kebijakan pembatasan IP sumber hanya berlaku untuk RAM user, bukan untuk Akun Alibaba Cloud itu sendiri.
-
Hanya IP publik: Kondisi
acs:SourceIpmengevaluasi IP egress publik pemanggil atau IP egress Gateway NAT—bukan IP privat di dalam VPC.
Prasyarat
Pastikan Anda memiliki:
-
Akun Alibaba Cloud dengan izin administrator RAM.
-
Alamat IP egress atau rentang CIDR yang akan diizinkan (misalnya, IP outbound perusahaan Anda atau IP Bastionhost).
Batasi IP sumber melalui Konsol RAM
Langkah 1: Buat RAM user
Kebijakan pembatasan IP sumber diterapkan pada RAM user, bukan pada Akun Alibaba Cloud.
-
Masuk ke Konsol RAM sebagai Akun Alibaba Cloud atau administrator RAM.
-
Di panel navigasi kiri, pilih Identities > Users.
-
Di halaman Users, klik Create User, masukkan informasi pengguna, klik OK, lalu selesaikan verifikasi keamanan.
Langkah 2: Buat kebijakan kustom
-
Di panel navigasi kiri, pilih Permissions > Policies.
-
Di halaman Access Policies, klik Create Policy.
-
Di halaman Create Policy, klik tab JSON dan masukkan kebijakan berikut:
Field Description Example ActionOperasi yang diizinkan. Gunakan ecs:*untuk semua operasi ECS, atau*untuk semua layanan cloud."ecs:*"acs:SourceIpIP atau rentang CIDR yang diizinkan. Beberapa entri menggunakan logika OR — panggilan berhasil jika IP sumber cocok dengan salah satu entri. "200.1.1.0/24","213.1.2.3"{ "Version": "1", "Statement": [ { "Action": "ecs:*", "Resource": "*", "Effect": "Allow", "Condition": { "IpAddress": { "acs:SourceIp": [ "200.1.xxx.xxx/24", "213.1.xxx.xxx" ] } } } ] }Ganti nilai placeholder sebelum menyimpan kebijakan.
-
Masukkan Policy Name (misalnya,
RestrictIPAccess), tambahkan deskripsi opsional, klik OK, lalu selesaikan verifikasi keamanan.
Langkah 3: Sambungkan kebijakan ke RAM user
-
Di panel navigasi kiri, pilih Identities > Users.
-
Di halaman Users, temukan RAM user target lalu klik Attach Policy di kolom Actions.
-
Di panel Grant Permission, pilih kebijakan lalu klik Authorize.
Batasi IP sumber melalui API
Panggil operasi API RAM berikut secara berurutan:
-
Panggil CreateUser untuk membuat RAM user:
-
UserName: Nama login. -
DisplayName: Nama tampilan.
-
-
Panggil CreatePolicy untuk membuat kebijakan:
-
PolicyName: Nama kebijakan, misalnyaRestrictIPAccess. -
PolicyDocument: Dokumen kebijakan JSON dengan IP yang diizinkan di bidangacs:SourceIp.
-
-
Panggil AttachPolicyToUser untuk menyambungkan kebijakan ke RAM user:
-
PolicyType:Custom. -
PolicyName: misalnyaRestrictIPAccess. -
UserName: misalnyaTestUser.
-
Kepatuhan
Gunakan skrip berikut dengan Alibaba Cloud CLI untuk mengaudit dan memperbaiki pembatasan IP sumber di seluruh RAM user.
Periksa: temukan RAM user tanpa pembatasan IP sumber
Menampilkan semua RAM user yang tidak memiliki kebijakan tertentu yang disambungkan.
#!/bin/bash
# Ganti dengan nama dan ARN kebijakan Anda.
POLICY_NAME="RestrictIPAccess"
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')
for USER in $USER_LIST; do
POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyName')
if ! echo "$POLICIES" | grep -q "$POLICY_NAME"; then
echo "User $USER tidak disambungkan ke kebijakan $POLICY_ARN"
fi
done
Perbaiki: sambungkan pembatasan IP sumber ke RAM user secara massal
Menyambungkan kebijakan ke setiap RAM user yang belum memilikinya.
#!/bin/bash
# Ganti dengan nama dan ARN kebijakan Anda.
POLICY_NAME="RestrictIPAccess"
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')
for USER in $USER_LIST; do
POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyName')
if ! echo "$POLICIES" | grep -q "^${POLICY_NAME}$"; then
echo "Menyambungkan kebijakan $POLICY_ARN ke user $USER ..."
aliyun ram AttachPolicyToUser \
--PolicyType Custom \
--PolicyName $POLICY_NAME \
--UserName $USER
if [ $? -eq 0 ]; then
echo "Kebijakan berhasil disambungkan ke $USER."
else
echo "Gagal menyambungkan kebijakan ke $USER. Periksa izin Anda atau pastikan kebijakan tersebut ada."
fi
else
echo "User $USER sudah memiliki kebijakan. Dilewati."
fi
done