全部产品
Search
文档中心

Elastic Compute Service:Batasi alamat IP sumber untuk panggilan OpenAPI

更新时间:Jan 14, 2026

Anda dapat mengonfigurasi Kebijakan Resource Access Management (RAM) untuk membatasi alamat IP sumber yang diizinkan untuk panggilan OpenAPI. Hal ini mencegah penyerang menggunakan kredensial yang bocor untuk mengontrol atau mengakses sumber daya cloud Anda dari lokasi mana pun di Internet.

Risiko Keamanan

Secara default, entitas apa pun yang memiliki AccessKey yang valid dapat memanggil OpenAPI dari mana saja di Internet untuk mengakses sumber daya cloud Anda. Jika AccessKey bocor akibat kesalahan konfigurasi, hardcoding, atau kepergian karyawan, penyerang dapat langsung menguasai sumber daya cloud Anda. Ini merupakan ancaman global yang berpotensi menyebabkan pencurian data, penghapusan sumber daya secara jahat, atau tagihan tinggi.

Praktik Terbaik

Anda dapat menggunakan kebijakan RAM untuk membatasi alamat IP sumber. Jika AccessKey bocor, penyerang hanya dapat berhasil jika serangan berasal dari alamat IP tepercaya yang telah ditentukan sebelumnya, seperti alamat IP egress perusahaan atau alamat IP Bastionhost.

Konsol

  1. Buat Pengguna RAM. (Kebijakan RAM tidak dapat membatasi akses berdasarkan IP sumber untuk Akun Alibaba Cloud.)

    1. Masuk ke Resource Access Management (RAM) console sebagai Akun Alibaba Cloud atau administrator RAM.

    2. Pada panel navigasi di sebelah kiri, pilih Identity Management > Users.

    3. Di halaman Users, klik Create User. Ikuti prompt untuk memasukkan informasi pengguna, klik OK, dan selesaikan otentikasi keamanan.

  2. Buat kebijakan kustom.

    1. Masuk ke RAM console sebagai administrator RAM. Pada panel navigasi di sebelah kiri, pilih Permission Management > Access Policies.

    2. Di halaman Kebijakan Akses, klik Create Policy.

    3. Pada halaman Create Policy, klik tab Script Editor. Masukkan isi kebijakan, lalu klik OK.

      {
        "Version": "1",
        "Statement": [
          {
            "Action": "ecs:*",  // Semua operasi OpenAPI untuk ECS. Untuk diterapkan pada semua operasi OpenAPI untuk semua layanan cloud, atur ini menjadi *.
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
              "IpAddress": {
                "acs:SourceIp": [
                  "200.1.xxx.xxx/24",  // Ganti dengan rentang alamat IP yang diizinkan.
                  "213.1.xxx.xxx"      // Ganti dengan alamat IP tunggal yang diizinkan.
                ]
              }
            }
          }
        ]
      }
    4. Masukkan Policy Name dan Description, klik OK, lalu selesaikan otentikasi keamanan.

  3. Sambungkan kebijakan akses ke Pengguna RAM.

    1. Masuk ke Konsol RAM sebagai administrator RAM.

    2. Pada panel navigasi di sebelah kiri, pilih Identity Management > Users.

    3. Di halaman Users, temukan Pengguna RAM target dan klik Add Permissions di kolom Actions.

    4. Pada panel Grant Permission, pilih kebijakan akses lalu klik Grant Permissions.

API

  1. Panggil operasi CreateUser untuk membuat Pengguna RAM:

    • UserName: Nama masuk Pengguna RAM.

    • DisplayName: Nama tampilan Pengguna RAM.

  2. Panggil operasi CreatePolicy untuk membuat kebijakan RAM:

    • PolicyName: Nama kebijakan. Contohnya, RestrictIPAccess.

    • PolicyDocument: Dokumen kebijakan dalam format JSON. Dokumen ini menentukan rentang alamat IP yang diizinkan.

  3. Panggil operasi AttachPolicyToUser untuk menyambungkan kebijakan ke Pengguna RAM:

    • PolicyType: Jenis kebijakan. Atur nilainya menjadi "Custom".

    • PolicyName: Nama kebijakan, seperti RestrictIPAccess.

    • UserName: Nama Pengguna RAM, seperti TestUser.

Catatan

Kebijakan RAM tidak dapat secara langsung membatasi akses ke OpenAPI dari VPC berdasarkan alamat IP sumber. Hal ini karena kunci kondisi acs:SourceIp menggunakan alamat IP egress publik atau alamat IP egress Gateway NAT dari panggilan OpenAPI, bukan alamat IP pribadi di dalam VPC.

Kepatuhan

Pemeriksaan: Temukan Pengguna RAM yang tidak disambungkan ke kebijakan pembatasan IP sumber

Anda dapat menggunakan Cloud Assistant CLI untuk menjalankan skrip berikut. Skrip ini menelusuri semua Pengguna RAM dan memeriksa apakah setiap pengguna telah disambungkan ke kebijakan pembatasan IP sumber.

#!/bin/bash

# Tentukan nama kebijakan.
POLICY_NAME="RestrictIPAccess" # Ganti dengan nama kebijakan Anda.

# Tentukan ARN kebijakan (Alibaba Cloud Resource Name).
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"  # Ganti dengan ARN kebijakan Anda.

# Dapatkan daftar semua RAM user.
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')

# Telusuri setiap pengguna dan periksa apakah kebijakan tertentu telah disambungkan.
for USER in $USER_LIST; do
  # Dapatkan daftar kebijakan yang disambungkan ke pengguna.
  POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyName')

  # Periksa apakah daftar kebijakan berisi nama kebijakan target.
  if ! echo "$POLICIES" | grep -q "$POLICY_NAME"; then
    echo "User $USER is not attached to policy $POLICY_ARN"
  fi
done

Perbaikan: Sambungkan kebijakan pembatasan IP sumber ke Pengguna RAM secara batch

Anda dapat menggunakan Cloud Assistant CLI untuk menjalankan skrip berikut. Skrip ini menelusuri semua Pengguna RAM dan menyambungkan kebijakan ke pengguna yang belum memilikinya.

#!/bin/bash
# Tentukan nama kebijakan.
POLICY_NAME="RestrictIPAccess" # Ganti dengan nama kebijakan Anda.

# Tentukan ARN kebijakan (Alibaba Cloud Resource Name).
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"   # Ganti dengan ARN kebijakan Anda.

# Dapatkan daftar semua RAM user.
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')

# Telusuri setiap pengguna dan periksa apakah kebijakan tertentu telah disambungkan.
for USER in $USER_LIST; do
  # Dapatkan daftar nama kebijakan yang disambungkan ke pengguna (Catatan: Gunakan PolicyName, bukan PolicyArn).
  POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyName')

  # Periksa apakah daftar kebijakan berisi nama kebijakan target.
  if ! echo "$POLICIES" | grep -q "^${POLICY_NAME}$"; then
    echo "User $USER is not attached to policy $POLICY_ARN"
    
    # Sambungkan kebijakan ke pengguna.
    echo "Attaching policy $POLICY_ARN to user $USER ..."
    aliyun ram AttachPolicyToUser \
      --PolicyType Custom \
      --PolicyName $POLICY_NAME \
      --UserName $USER
    
    if [ $? -eq 0 ]; then
      echo "Policy $POLICY_ARN was successfully attached to user $USER"
    else
      echo "Failed to attach policy $POLICY_ARN. Check your permissions or if the policy exists."
    fi
  else
    echo "User $USER is already attached to policy $POLICY_ARN. Skipping."
  fi
done