API 網(wǎng)關(guān)自定義權(quán)限策略參考
如果系統(tǒng)權(quán)限策略不能滿足您的要求,您可以創(chuàng)建自定義權(quán)限策略實(shí)現(xiàn)最小授權(quán)。使用自定義權(quán)限策略有助于實(shí)現(xiàn)權(quán)限的精細(xì)化管控,是提升資源訪問(wèn)安全的有效手段。本文介紹API 網(wǎng)關(guān)使用自定義權(quán)限策略的場(chǎng)景和策略示例。
什么是自定義權(quán)限策略
在基于RAM的訪問(wèn)控制體系中,自定義權(quán)限策略是指在系統(tǒng)權(quán)限策略之外,您可以自主創(chuàng)建、更新和刪除的權(quán)限策略。自定義權(quán)限策略的版本更新需由您來(lái)維護(hù)。
創(chuàng)建自定義權(quán)限策略后,需為RAM用戶、用戶組或RAM角色綁定權(quán)限策略,這些RAM身份才能獲得權(quán)限策略中指定的訪問(wèn)權(quán)限。
已創(chuàng)建的權(quán)限策略支持刪除,但刪除前需確保該策略未被引用。如果該權(quán)限策略已被引用,您需要在該權(quán)限策略的引用記錄中移除授權(quán)。
自定義權(quán)限策略支持版本控制,您可以按照RAM規(guī)定的版本管理機(jī)制來(lái)管理您創(chuàng)建的自定義權(quán)限策略版本。
操作文檔
API 網(wǎng)關(guān)自定義權(quán)限策略
第一部分:策略管理
授權(quán)策略(Policy),來(lái)描述授權(quán)的具體內(nèi)容,授權(quán)內(nèi)容主要包含效力(Effect)、資源(Resource)、對(duì)資源所授予的操作權(quán)限(Action)以及限制條件(Condition)這幾個(gè)基本元素。
您可以根據(jù)需要自定義管理權(quán)限,支持更為精細(xì)化的授權(quán),可以為某個(gè)操作,也可以是某個(gè)資源。如:API GetUsers 的編輯權(quán)限。可以在RAM控制臺(tái)-策略管理中選擇策略類型為自定義策略,查看已經(jīng)定義好的自定義授權(quán)。
第二部分:授權(quán)策略
授權(quán)策略是一組權(quán)限的集合,它以一種策略語(yǔ)言來(lái)描述。通過(guò)給用戶或群組附加授權(quán)策略,用戶或群組中的所有用戶就能獲得授權(quán)策略中指定的訪問(wèn)權(quán)限。
{
"Version": "1",
"Statement": [
{
"Action": "apigateway:Describe*",
"Resource": "*",
"Effect": "Allow"
}
]
}
此示例表示:允許所有的查看操作。
Action(操作名稱列表)格式為:
"Action":"<service-name>:<action-name>"
其中:
service-name 為:阿里云產(chǎn)品名稱,請(qǐng)?zhí)顚?apigateway。
action-name 為:API 接口名稱,請(qǐng)參照下表,支持通配符*。
"Action": "apigateway:Describe*" 表示所有的查詢操作。
"Action": "apigateway:*" 表示 API 網(wǎng)關(guān)所有操作。
第三部分:Resource(操作對(duì)象列表)
Resource 通常指操作對(duì)象, API 網(wǎng)關(guān)中的 API 分組、流控策略、應(yīng)用都被稱為 Resource,書寫格式:
acs:<service-name>:<region>:<account-id>:<relative-id>
其中:
acs:Alibaba Cloud Service 的首字母縮寫,表示阿里云的公有云平臺(tái)。
service-name 為:阿里云產(chǎn)品名稱,請(qǐng)?zhí)顚?apigateway。
region:地區(qū)信息,可以使用通配符*號(hào)來(lái)代替,*表示所有區(qū)域。
account-id:賬號(hào) ID,比如123456789012****,也可以用*代替。
relative-id:與 API 網(wǎng)關(guān)相關(guān)的資源描述部分,這部分的格式描述支持類似于一個(gè)文件路徑的樹狀結(jié)構(gòu)。
格式:
acs:apigateway:$regionid:$accountid:apigroup/$groupId
示例:
acs:apigateway:*:*:apigroup/cbd157704e624ab58a204fd3e0b5ad79
請(qǐng)結(jié)合 API 網(wǎng)關(guān)的API 手冊(cè)來(lái)查看下表:
action-name | 接口描述 | 資源(Resource) |
CreateApiGroup | 創(chuàng)建分組 | acs:apigateway:$regionid:$accountid:apigroup/* |
ModifyApiGroup | 修改分組 | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
DeleteApiGroup | 刪除分組 | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
DescribeApiGroups | 查詢分組列表 | acs:apigateway:$regionid:$accountid:apigroup/* |
CreateApi | 創(chuàng)建API | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
DeployApi | 發(fā)布API | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
AbolishApi | 下線API | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
DeleteApi | 刪除API | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
DescribeApis | 查詢API列表 | acs:apigateway:$regionid:$accountid:apigroup/* |
CreatePlugin | 創(chuàng)建插件 | acs:apigateway:$regionid:$accountid:plugin/* |
ModifyPlugin | 修改插件 | acs:apigateway:$regionid:$accountid:plugin/$pluginId |
DeletePlugin | 刪除插件 | acs:apigateway:$regionid:$accountid:plugin/$pluginId |
AttachPlugin | 將插件綁定到API上 | acs:apigateway:$regionid:$accountid:plugin/$pluginId |
DetachPlugin | 將插件和API解綁 | acs:apigateway:$regionid:$accountid:plugin/$pluginId |
DescribePluginsByApi | 查詢API上綁定的插件列表 | acs:apigateway:$regionid:$accountid:plugin/$pluginId |
CreateApp | 創(chuàng)建應(yīng)用 | acs:apigateway:$regionid:$accountid:app/* |
ModifyApp | 修改應(yīng)用 | acs:apigateway:$regionid:$accountid:app/$appId |
DeleteApp | 刪除應(yīng)用 | acs:apigateway:$regionid:$accountid:app/$appId |
DescribeAppAttributes | 查詢應(yīng)用列表 | acs:apigateway:$regionid:$accountid:app/$appId |
SetApisAuthorities | 給APP授權(quán)API訪問(wèn)權(quán)限 | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
DescribeAuthorizedApps | 查詢API授權(quán)列表 | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
SetVpcAccess | 添加VPC授權(quán) | acs:apigateway:$regionid:$accountid:vpcaccess/* |
RemoveVpcAccess | 刪除VPC授權(quán) | acs:apigateway:$regionid:$accountid:vpcaccess/* |
DescribeVpcAccesses | 查詢VPC授權(quán) | acs:apigateway:$regionid:$accountid:vpcaccess/* |
DescribeInstances | 查詢專享實(shí)例列表授權(quán) | acs:apigateway:$regionid:$accountid:instance/$instanceId |
部分場(chǎng)景示例
授權(quán)所有API的查詢操作:
{
"Version": "1",
"Statement": [
{
"Action": "apigateway:Describe*",
"Resource":"acs:apigateway:$regionid:$accountid:apigroup/*",
"Effect": "Allow"
}
]
}
授權(quán)打了標(biāo)簽 `version:v1` 的分組查詢操作:
{
"Version": "1",
"Statement": [
{
"Action": "apigateway:Describe*",
"Resource":"acs:apigateway:$regionid:$accountid:apigroup/*",
"Effect": "Allow",
"Condition": {
"StringEquals": {
"apigateway:tag/version": "v1"
}
}
}
]
}
授權(quán)某個(gè)分組下所有API的管理操作:
{
"Version": "1",
"Statement": [
{
"Action": "apigateway:*",
"Resource": [
"acs:apigateway:$regionid:$accountid:apigroup/$groupId",
"acs:apigateway:$regionid:$accountid:app/$appId",
"acs:apigateway:$regionid:$accountid:vpcaccess/*"
],
"Effect": "Allow"
}
]
}
備注:以上示例中,變量部分可以根據(jù)需要配置成*。
授權(quán)信息參考
使用自定義權(quán)限策略,您需要了解業(yè)務(wù)的權(quán)限管控需求,并了解API 網(wǎng)關(guān)的授權(quán)信息。詳細(xì)內(nèi)容請(qǐng)參見授權(quán)信息。