阿里雲國際分銷商:阿里雲API接口調用與密鑰配置方法
對於剛接觸雲計算或者後端開發的同學來說,「調用 API 接口」是把業務和雲資源打通的必經之路。 無論是想寫個腳本自動開關機、批量修改安全組,還是把阿里雲的 OSS 存儲、大模型接口集成到自己的系統里,都離不開 API。
但很多人一看到密碼學名詞(比如 AccessKey、Secret、HMAC-SHA1、簽名算法)就頭大,或者因為配置不當,不小心把密鑰洩漏到了 GitHub 上,導致服務器被黑客黑去挖礦,損失慘重。
今天這篇教程用大白話帶你走通全流程:從
如何安全地獲取密鑰
,到
如何在本地優雅地配置
,再到
用最簡單的代碼完成第一次 API 調用
。
第一階段:核心概念(別把大門鑰匙直接掛在嘴邊)
在動手之前,必須搞清楚兩個核心概念:
AK
和
SK
。 它們就像是你的
雲端身份證和密碼
。
AccessKey ID(簡稱 AK): 相當於你的「用戶名」。 它是公開的,用來告訴阿里雲「我是誰」。
AccessKey Secret(簡稱 SK): 相當於你的「密碼」。 它絕對不能公開,用來證明「我確實是我」。
阿里雲的每一個 API 請求,都需要用 SK 對請求內容進行加密簽名。 阿里雲收到請求後,用同樣的算法校驗,對上了才放行。
🚨鐵律:千萬不要用主賬號的 AK/SK!
如果你直接用阿里雲大老闆賬號(主賬號)的密鑰,這個密鑰就擁有你賬戶下所有財產的最高控制權(扣費、刪庫、買服務器)。
正確做法:
專門創建一個「掃地僧」一樣的子賬號(RAM 用戶),只給它分配乾某一件特定事情的權限,然後用這個子賬號的 AK/SK。
第二階段:安全獲取密鑰(5分鐘)
我們要通過阿里雲的
RAM(訪問控制)
來創建一個安全的子賬號密鑰。
1. 創建 RAM 子用戶
登錄阿里雲控制台,在頂部搜索欄輸入 RAM,點擊進入 訪問控制 控制台。
在左側導航欄,點擊 身份管理 -> 用戶。
點擊 創建用戶 按鈕。
關鍵參數配置:登錄名稱: 起個有意義的名字,比如 api-operator-oss(代表這個賬號專門用來調 OSS 接口)。 顯示名稱: 比如 OSS接口專用賬號。 訪問方式: 重點! 必須勾選 OpenAPI 調用訪問。 不需要勾選「控制台登錄」,因為這個賬號不需要登錄網頁。
點擊確定。 此時屏幕上會彈出一
個表格,裡面包含 AccessKey ID 和 AccessKey Secret。
立刻複製並保存到本地安全的地方(比如密碼管理器)! > 注意: 這個 Secret 只會顯示這一次,一旦你刷新頁面或者關閉窗口,就再也看不到了。 如果丟了,只能刪掉重新建一個。
2. 給人事塞權限(授權)
剛創建的子賬號是個「白丁」,沒有任何權限,直接調用接口會報錯
User not authorized
。
在剛剛的用戶列表里,找到你新建的用戶,點擊右側的 添加權限。
選擇授權範圍: 整個雲賬號。
選擇策略: 在搜索框輸入你需要調用的服務。 比如你想控制服務器,就搜 ECS,勾選 AliyunECSFullAccess(管理權限)或 AliyunECSReadOnlyAccess(只讀權限)。 建議遵循最小權限原則,需要什麼給什麼,別圖省事直接給 AdministratorAccess(系統管理員)。
點擊確定,授權完成。
第三階段:密鑰本地配置(拒絕硬編碼!)
拿到 AK/SK 後,千萬
不要
直接寫死在代碼里(這就是傳說中的「硬編碼」)。 萬一哪天代碼傳到了公開倉庫,你就等著用全額工資來交雲賬單吧。
業界標準做法是利用
環境變量(Environment Variables)
。
1. Linux / macOS 配置方法
打開終端,編輯你的環境變量文件(比如
~ /.Bashrc
或
~ /.zshrc
):
Export ALIBABA_CLOUD_ACCESS_KEY_ID="你的AccessKeyID"
Export ALIBABA_CLOUD_ACCESS_KEY_SECRET="你的AccessKeySecret"
保存後,運行
Source ~ /.Bashrc
(或對應文件)讓配置生效。
2. Windows 配置方法
右鍵「此電腦」 -> 「屬性」 -> 「高級系統設置」 -> 「環境變量」。
在「用戶變量」或「系統變量」里,點擊「新建」:變量名:ALIBABA_CLOUD_ACCESS_KEY_ID,變量值:填入你的 AK。 再新建一個:變量名:ALIBABA_CLOUD_ACCESS_KEY_SECRET,變量值:填入你的 SK。
一路點擊確定保存。 注意:配置完後需要重啟你的集成開發環境(如 VS Co
De / PyCharm)或命令行窗口,否則讀不到新變量。
第四階段:第一次 API 調用實戰(Python 示例)
現在環境準備好了,我們用最推薦的方法--使用阿里雲官方的
V2.0 SDK
來做一次調用。 這裡以查詢你賬號下所有的 ECS 服務器實例(DescribeInstances)為例。
1. 安裝 SDK 核心庫和對應產品庫
在本地終端運行:
貝殼腳本
Pip install alibabacloud_tea_openapi
Pip install alibabacloud_ecs20140526==4.3.0
2. 編寫調用代碼
阿里雲的 V2.0 SDK 非常智能,它會自動去讀取我們剛才配置的環境變量
ALIBABA_CLOUD_ACCESS_KEY_ID
和
ALIBABA_CLOUD_ACCESS_KEY_SECRET
,代碼里一個敏感詞都不用寫。
Import os
Import sys
From alibabacloud_ecs20140526.client import Client as Ecs20140526Client
From alibabacloud_tea_openapi import models as open_api_models
From alibabacloud_ecs20140526 import models as ecs_20140526_models
Class AliyunApiDemo:
@Staticmethod
Def create_client() -> Ecs20140526Client:
"""
初始化賬號Client
"""
# SDK會自動從環境變量中獲取ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET
Config = open_api_
Models.Config()
# 選擇你要調用的地域名,比如杭州是 cn-hangzhou,上海是 cn-shanghai
Config.endpoint = f"ecs.cn-hangzhou.aliyuncs.com"
Return Ecs20140526Client(config)
@Staticmethod
Def main():
Client = AliyunApiDemo.create_client()
# 構造請求參數(查詢當前地域下的ECS實例)
Describe_instances_request = (
Ecs_20140526_models.DescribeInstancesRequest(
Region_id="cn-hangzhou"
)
)
Try:
# 發起調用
Response = client.describe_instances(describe_instances_request)
# 打印返回的 JSON 結果
&Nb
Sp; print("=== API 調用成功,返回結果如下 ===")
Print(response.body)
Except Exception as error:
# 優雅地處理報錯
Print(f"=== API 調用失敗 ===")
If hasattr(error, "message"):
Print(f"錯誤信息: {error.message}")
If hasattr(error, "code"):
Print(f"錯誤碼: {error.code}")
If __name__ == "__main__":
AliyunApiDemo.main()
運行這段代碼,如果你看到了你服務器的實例列表 JSON 數據,說明你已經成功打通了阿里雲的 API 大門。
第五階段:高手進階神仙工具--OpenAPI Explorer
如果你不想寫代碼,或者不知道某個接口的參數怎麼填,阿里雲提供了一個絕對的「作弊神器」--
OpenAPI 門戶(OpenAPI Explorer)
。
瀏覽器訪問 https://next.api.aliyun.com/。
在左側搜索框輸入你想用的功能,比如「創建雲盤」或者「發送短信」。
在中間的表單里,直接用可視化界面的輸入框填參數。
重點來了: 網頁右側的「SDK 示例」標籤頁,會實時根據你填的參數自動生成各種語言的代碼(Python、java、Go、Node.js 都有
)。
你甚至可以直接在網頁上點擊「發起調用」,看接口返回的結果對不對,調試好了之後,把右側的代碼直接複製到你的項目裡就能用。
總結避坑口訣
調接口不難,難在細節和安全。 最後送你四個避坑錦囊:
權限最小化: 能給只讀就別給讀寫,能限特定產品就別全選。
代碼無密化: 源碼裡看到 access_key 後面跟著字符串的,通通改寫成從環境變量讀取。
定期輪換制: 商業項目的子賬號密鑰,建議每隔半年在控制台禁用掉,重新生成一套,防止員工離職或無意中洩露。
善用 Explorer: 別硬啃官方的文字文檔,多去 OpenAPI 門戶看自動生成的 Demo 代碼,能少走彎路。
