全部產品
Search
文件中心

Elastic Compute Service:保護雲帳號,防止憑據泄露

更新時間:Nov 18, 2025

雲帳號是登入和管理雲資源的核心身份憑證,一旦泄露,將帶來極高的安全風險。因此,必須妥善保護雲帳號的各類憑據,防止其被非法擷取和濫用。

安全風險

雲帳號面臨的主要安全威脅包括口令被暴力破解、AccessKey(AK)等長期憑據泄露以及RAM Role STS Token泄露等,攻擊者一旦掌握這些憑據,便可冒充合法使用者登入系統,進行資源操作或訪問敏感性資料,可能導致以下嚴重後果:

  • 非法使用資源,造成直接帳號損失。

  • 基礎設施被破壞或服務中斷,影響業務可用性。

  • 敏感性資料泄露或被加密,面臨資訊泄露與勒索風險。

  • 被植入惡意程式或後門,長期威脅系統安全與資料完整性。

最佳實務

保護帳號口令,啟用多因子認證(MFA)

  • 設定複雜口令:弱口令是賬戶被入侵的主要原因之一。為防止口令被猜測或暴力破解,應避免使用弱口令。

  • 定期修改口令:建議每 90 天更換一次密碼,以降低因長期使用同一口令而帶來的泄露風險。

  • 啟用多因子認證(MFA):為主帳號綁定或解除綁定虛擬MFA,在密碼認證基礎上增加動態驗證碼(如手機Token、硬體密鑰),防止密碼泄露後的未授權訪問。

使用 ECS RAM 角色替代 AccessKey

當應用程式部署在 ECS 執行個體中並需要調用雲端服務 API(如 ECS 擴縮容)時,推薦使用 RAM 角色(RAM Role),而非使用AccessKey。

建立RAM使用者並綁定

當前帳號需具備 sts:AssumeRole 許可權,才能為執行個體綁定角色,防止許可權濫用。

控制台

  1. 建立並授權RAM使用者

  2. 為 ECS 執行個體綁定 RAM 角色。

    建立時綁定

    通過執行個體購買頁建立執行個體時,在進階選項選擇執行個體RAM角色

    建議在中繼資料訪問模式中選擇僅加固模式,防止因執行個體漏洞或配置錯誤導致 STS Token 泄露。更多資訊,請參見使用僅加固模式訪問執行個體中繼資料

    已有執行個體綁定

    1. 訪問ECS控制台-執行個體,切換至目標地區。

    2. 找到目標ECS執行個體,單擊執行個體ID進入執行個體詳情頁。

    3. 在其他資訊,單擊授予 / 收回 RAM 角色

    4. 在對話方塊中選擇RAM角色,單擊確定

    重要

    一個 ECS 執行個體只能綁定一個 RAM 角色。若應用需要多種許可權,請將所有許可權統一授予該角色。

    例如:執行個體已綁定AliyunECSDiskEncryptDefaultRole,還需網路介面系統管理權限,可在 RAM 控制台為該角色添加 AliyunECSNetworkInterfaceManagementAccess策略。

API

通過 API 實現角色綁定與解除綁定:

應用使用 RAM 角色訪問雲端服務

應用運行在 ECS 執行個體中,可通過執行個體中繼資料服務自動擷取臨時 STS Token,並使用該 Token 調用雲端服務 API:

範例程式碼

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig
from alibabacloud_tea_openapi.models import Config
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526 import models as ecs_models
from alibabacloud_tea_util.models import RuntimeOptions

# Step 1: 擷取STS Token
def get_sts_token():
    config = CredConfig(
        type="ecs_ram_role",
        enable_imds_v1=False
    )
    cred_client = CredClient(config)
    credential = cred_client.get_credential()
    return {
        "AccessKeyId": credential.get_access_key_id(),
        "AccessKeySecret": credential.get_access_key_secret(),
        "SecurityToken": credential.get_security_token()
    }

# Step 2: 初始化ECS用戶端
def create_ecs_client(sts_token):
    config = Config(
        access_key_id=sts_token["AccessKeyId"],
        access_key_secret=sts_token["AccessKeySecret"],
        security_token=sts_token["SecurityToken"],
        endpoint="ecs.cn-hangzhou.aliyuncs.com"
    )
    return EcsClient(config)

# Step 3: 構建建立執行個體請求
def build_create_instance_request():
    return ecs_models.RunInstancesRequest(
        region_id="cn-hangzhou",
        image_id="aliyun_3_x64_20G_scc_alibase_20220225.vhd",
        instance_type="ecs.e-c1m2.xlarge",
        security_group_id="sg-bp1esyhwfbqeyudt****",
        v_switch_id="vsw-bp1nzprm8h7mmnl8t****",
        instance_name="sdk-test",
        instance_charge_type="PostPaid",
        key_pair_name="sdk-key-pair",
        system_disk_category="cloud_essd"
    )

# Step 4: 調用API建立執行個體
def create_instance(client, request):
    runtime = RuntimeOptions()
    try:
        response = client.run_instances_with_options(request, runtime)
        print("執行個體建立成功,執行個體ID:", response.body.instance_id_sets.instance_id_set[0])
    except Exception as e:
        print("執行個體建立失敗,錯誤資訊:", e)

# 主函數
if __name__ == "__main__":
    sts_token = get_sts_token()  # 擷取STS Token
    ecs_client = create_ecs_client(sts_token)  # 初始化ECS用戶端
    request = build_create_instance_request()  # 構建建立執行個體請求
    create_instance(ecs_client, request)  # 調用API建立執行個體

保護 AccessKey(AK),降低泄露風險

若必須使用 AK,應在建立、儲存、分發、使用等環節加強安全管理:

  • 建立階段:遵循 “一人一 AK、一應用一 AK” 原則,避免多個使用者或程式共用 AK。一旦AK泄露,可快速定位責任人,縮小影響範圍,便於及時輪轉。

  • 許可權管理:遵循最小許可權原則,按需授權。推薦使用子帳號並分配職責對應許可權,避免使用主帳號 AK。更多資訊,請參見避免使用主帳號,為不同職責子帳號成員授予不同許可權

  • 儲存安全:將 AK 儲存在可信裝置上如:

    • 只有 root 或特定使用者可讀的檔案。

    • 受存取控制的資料庫或密鑰管理系統(KMS)。

    • 禁止將 AK 存放在本地筆記、雲筆記、代碼倉庫、聊天記錄、心情小語/狀態中。

  • 分發安全:使用加密檔案分發 AK。推薦通過郵件等渠道發送加密AK檔案,再通過另一個獨立渠道(如簡訊)發送解密密碼。

  • 使用安全:禁止在代碼中寫入程式碼 AK。將 AK 存放在獨立設定檔加密儲存在可信伺服器上,分發到伺服器後再解密,並將檔案使用權限設定為僅owner可讀。

  • 網路存取控制:在 RAM 控制台中為 AK 配置網路訪問限制策略。具體操作,請參見AccessKey網路訪問限制策略

  • 定期輪轉與清理

  • 監控 AK 泄露風險:通過Security Center的AK泄露檢測可以識別出AK是否泄露,支援AK泄露警示通知。此外,AK泄露後,阿里雲會進行AccessKey限制性保護,防止風險進一步擴大。

合規能力

檢查:是否存在ECS執行個體使用AK訪問雲端服務

通過查詢AccessKey日誌,可以按需查詢AccessKey的基本資料、訪問的雲端服務及相關IP地址和資源。

前提:建立ActionTrail跟蹤,並將日誌投遞至SLS Logstore。

  • 查詢通過VPC Endpoint發起的AK調用

    * | SELECT "event.eventid","event.sourceipaddress", "event.userIdentity.accessKeyId",  "event.vpcId" WHERE "event.userIdentity.accessKeyId" LIKE 'LTA%' and "event.vpcId" LIKE 'vpc%'

    結果形如:

    image.png

    通過vpcIdsourceipaddress,就可以確定調用是從哪個ECS執行個體發出的。再具體排查哪些程式在使用accessKeyId調用OpenAPI。

  • 查詢通過公網Endpoint發起的AK調用

    * | SELECT "event.eventid","event.sourceipaddress", "event.userIdentity.accessKeyId" WHERE "event.userIdentity.accessKeyId" LIKE 'LTA%' and "event.vpcId" IS NULL

    結果形如:

    image.png

    判斷sourceipaddress是否是來自ECS的公網IP。先擷取自己帳號名下的EIP、PublicIP,再判斷上述結果中的sourceipaddress是否屬於您的IP。如果EIP、PublicIP是直接綁定到ECS執行個體的,那麼可以直接定位到具體是ECS執行個體並改造。

修複:將AK替換為執行個體綁定角色

請參考使用 ECS RAM 角色替代 AccessKey進行修複。更多資訊,請參見AccessKey泄露處理方案