API網(wǎng)關權(quán)限管理
如果您需要對華為云上購買的API網(wǎng)關資源,給企業(yè)中的員工設置不同的訪問權(quán)限,以達到不同員工之間的權(quán)限隔離,您可以使用統(tǒng)一身份認證服務(Identity and Access Management,簡稱IAM)進行精細的權(quán)限管理。該服務提供用戶身份認證、權(quán)限分配、訪問控制等功能,可以幫助您安全的控制華為云資源的訪問。
通過IAM,您可以在華為云帳號中給員工創(chuàng)建IAM用戶,并使用策略來控制員工對API網(wǎng)關資源的訪問范圍。
如果華為云帳號已經(jīng)能滿足您的需求,不需要創(chuàng)建獨立的IAM用戶進行權(quán)限管理,您可以跳過以下內(nèi)容,不影響您使用API網(wǎng)關服務的其它功能。
IAM是華為云提供權(quán)限管理的基礎服務,無需付費即可使用,您只需要為您帳號中的資源進行付費。關于IAM的詳細介紹,請參見《IAM產(chǎn)品介紹》。
API網(wǎng)關系統(tǒng)角色
默認情況下,管理員創(chuàng)建的IAM用戶沒有任何權(quán)限,需要將其加入用戶組,并給用戶組授予策略或角色,才能使得用戶組中的用戶獲得對應的權(quán)限,這一過程稱為授權(quán)。授權(quán)后,用戶就可以基于被授予的權(quán)限對云服務進行操作。
API網(wǎng)關服務部署時通過物理區(qū)域劃分,為項目級服務。授權(quán)時,“作用范圍”需要選擇“區(qū)域級項目”,然后在指定區(qū)域(如華北-北京1)對應的項目(cn-north-1)中設置相關權(quán)限,并且該權(quán)限僅對此項目生效;如果在“所有項目”中設置權(quán)限,則該權(quán)限在所有區(qū)域項目中都生效。訪問API網(wǎng)關服務時,需要先切換至授權(quán)區(qū)域。
權(quán)限根據(jù)授權(quán)精細程度分為角色和策略,策略是角色的升級版。
角色:IAM最初提供的一種根據(jù)用戶的工作職能定義權(quán)限的粗粒度授權(quán)機制。該機制以服務為粒度,提供有限的服務相關角色用于授權(quán)。由于華為云各服務之間存在業(yè)務依賴關系,因此給用戶授予角色時,可能需要一并授予依賴的其他角色,才能正確完成業(yè)務。角色并不能滿足用戶對精細化授權(quán)的要求,無法完全達到企業(yè)對權(quán)限最小化的安全管控要求。
策略:IAM最新提供的一種細粒度授權(quán)的能力,可以精確到具體服務的操作、資源以及請求條件等?;诓呗缘氖跈?quán)是一種更加靈活的授權(quán)方式,能夠滿足企業(yè)對權(quán)限最小化的安全管控要求。例如:針對API網(wǎng)關服務,管理員能夠控制IAM用戶進行指定的管理操作。權(quán)限策略以API接口為粒度進行權(quán)限拆分,API網(wǎng)關服務支持的API授權(quán)項請參見權(quán)限策略和授權(quán)項。
如表所示,包括了API網(wǎng)關的所有系統(tǒng)角色和策略。
系統(tǒng)角色/策略名稱
|
描述
|
類別
|
依賴關系
|
---|---|---|---|
APIG Administrator |
API網(wǎng)關服務的管理員權(quán)限。擁有該權(quán)限的用戶可以使用共享版和專享版API網(wǎng)關服務的所有功能。 |
系統(tǒng)角色 |
無。 |
APIG FullAccess |
API網(wǎng)關服務所有權(quán)限。擁有該權(quán)限的用戶可以使用專享版API網(wǎng)關服務的所有功能。 |
系統(tǒng)策略 |
無。 |
APIG ReadOnlyAccess |
API網(wǎng)關服務的只讀訪問權(quán)限。擁有該權(quán)限的用戶只能查看專享版API網(wǎng)關的各類信息。 |
系統(tǒng)策略 |
無。 |
給用戶授權(quán)API網(wǎng)關權(quán)限流程
在IAM控制臺創(chuàng)建用戶組,并授予API網(wǎng)關服務的權(quán)限“APIG Administrator”或“APIG FullAccess”。
在IAM控制臺創(chuàng)建用戶,并將其加入1中創(chuàng)建的用戶組。
3.用戶登錄并驗證權(quán)限
新創(chuàng)建的用戶登錄控制臺,驗證API網(wǎng)關服務的權(quán)限。

API網(wǎng)關自定義策略
如果系統(tǒng)預置的API網(wǎng)關權(quán)限,不滿足您的授權(quán)要求,可以創(chuàng)建自定義策略。自定義策略中可以添加的授權(quán)項(Action)請參考權(quán)限策略和授權(quán)項。
目前華為云支持以下兩種方式創(chuàng)建自定義策略:
可視化視圖創(chuàng)建自定義策略:無需了解策略語法,按可視化視圖導航欄選擇云服務、操作、資源、條件等策略內(nèi)容,可自動生成策略。
JSON視圖創(chuàng)建自定義策略:可以在選擇策略模板后,根據(jù)具體需求編輯策略內(nèi)容;也可以直接在編輯框內(nèi)編寫JSON格式的策略內(nèi)容。
具體創(chuàng)建步驟請參見創(chuàng)建自定義策略。以下為常用的API網(wǎng)關自定義策略樣例。
示例1:授權(quán)用戶創(chuàng)建API、調(diào)試API的權(quán)限
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"
apig:apis:create
apig:apis:debug
"
]
}
]
}
示例2:拒絕用戶創(chuàng)建API分組
拒絕策略需要同時配合其他策略使用,否則沒有實際作用。用戶被授予的策略中,一個授權(quán)項的作用如果同時存在Allow和Deny,則遵循Deny優(yōu)先。
如果您給用戶授予APIG FullAccess的系統(tǒng)策略,但不希望用戶擁有APIG FullAccess中定義的創(chuàng)建API分組權(quán)限,您可以創(chuàng)建一條拒絕創(chuàng)建API分組的自定義策略,然后同時將APIG FullAccess和拒絕策略授予用戶,根據(jù)Deny優(yōu)先原則,則用戶可以執(zhí)行除創(chuàng)建API分組外的所有操作。拒絕策略示例如下:
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"
apig:apis:create
apig:apis:debug
"
]
}
]
}
API網(wǎng)關權(quán)限策略和授權(quán)項
如果您需要對您所擁有的API網(wǎng)關服務進行精細的權(quán)限管理,您可以使用統(tǒng)一身份認證服務。
默認情況下,新建的IAM用戶沒有任何權(quán)限,您需要將其加入用戶組,并給用戶組授予策略(以JSON格式描述權(quán)限集的語言),才能使用戶組中的用戶獲得策略定義的權(quán)限,這一過程稱為授權(quán)。授權(quán)后,用戶就可以基于策略對云服務進行操作。關于策略的語法結(jié)構(gòu)及示例,請參見上文。
華為云帳號具備所有接口的調(diào)用權(quán)限,如果使用帳號下的IAM用戶發(fā)起API請求時,該IAM用戶必須具備調(diào)用該接口所需的權(quán)限,否則,API請求將調(diào)用失敗。每個接口所需要的權(quán)限,與各個接口所對應的授權(quán)項相對應,只有發(fā)起請求的IAM用戶被授予授權(quán)項所對應的策略,該用戶才能成功調(diào)用該接口。例如,IAM用戶要調(diào)用接口來創(chuàng)建API,那么這個IAM用戶被授予的策略中必須包含允許“apig:apis:create”的授權(quán)項,該接口才能調(diào)用成功。
支持的授權(quán)項
細粒度策略支持的操作與API相對應,授權(quán)項列表說明如下:
- 權(quán)限:自定義策略中授權(quán)項定義的內(nèi)容即為權(quán)限。
- 授權(quán)項:自定義策略中支持的Action,在自定義策略中的Action中寫入授權(quán)項,可以實現(xiàn)授權(quán)項對應的權(quán)限功能。
- 對應API接口:自定義策略實際調(diào)用的API接口。
- 授權(quán)范圍:自定義策略的授權(quán)范圍,包括IAM項目與企業(yè)項目。授權(quán)范圍如果同時支持IAM項目和企業(yè)項目,表示此授權(quán)項對應的自定義策略,可以在IAM和企業(yè)管理兩個服務中給用戶組授權(quán)并生效。如果僅支持IAM項目,不支持企業(yè)項目,表示僅能在IAM中給用戶組授權(quán)并生效,如果在企業(yè)管理中授權(quán),則該自定義策略不生效。
以下僅給出部分授權(quán)項,更多API網(wǎng)關權(quán)限明細請參考權(quán)限明細。
權(quán)限描述
|
授權(quán)項
|
對應的API
|
IAM項目(Project)
|
企業(yè)項目(Enterprise Project)
|
---|---|---|---|---|
創(chuàng)建API網(wǎng)關專享版實例 |
apig:instances:create |
POST /v2/{project_id}/apigw/instances |
√ |
√ |
更新API網(wǎng)關專享版實例 |
apig:instances:update |
PUT /v2/{project_id}/apigw/instances/{instance_id} |
√ |
√ |
查看API網(wǎng)關專享版實例 |
apig:instances:get |
GET /v2/{project_id}/apigw/instances/{instance_id} |
√ |
√ |
創(chuàng)建API分組 |
apig:groups:create |
POST /v2/{project_id}/apigw/instances/{instance_id}/api-groups |
√ |
√ |
查看API分組 |
apig:groups:get |
GET /v2/{project_id}/apigw/instances/{instance_id}/api-groups/{group_id} |
√ |
√ |
分組域名綁定證書 |
apig:domains:bindCertificat |
POST /v2/{project_id}/apigw/instances/{instance_id}/api-groups/{group_id}/domains/{domain_id}/certificate |
√ |
√ |
查看環(huán)境變量 |
apig:variables:get |
GET /v2/{project_id}/apigw/instances/{instance_id}/env-variables/{env_variable_id} |
√ |
√ |
創(chuàng)建API |
apig:apis:create |
POST /v2/{project_id}/apigw/instances/{instance_id}/apis |
√ |
√ |
發(fā)布API |
apig:apis:publish |
POST /v2/{project_id}/apigw/instances/{instance_id}/apis/action |
√ |
√ |
下線API |
apig:apis:offline |
POST /v2/{project_id}/apigw/instances/{instance_id}/apis/action |
√ |
√ |
調(diào)試API |
apig:apis:debug |
POST /v2/{project_id}/apigw/instances/{instance_id}/apis/debug/{api_id} |
√ |
√ |
導入API |
apig:apis:import |
POST /v2/{project_id}/apigw/instances/{instance_id}/openapi/import |
√ |
√ |