API Gateway結合阿里雲存取控制(RAM)來實現企業內多職員分權管理 API。API 提供者可以為員工建立子賬戶,並控制不同職員負責不同的 API 管理。
若您無此業務情境,請跳過此章節。
使用 RAM 可以允許子帳號,查看、建立、管理、刪除 API 分組、API、外掛程式等。但子帳號不是資源的所有者,其操作許可權隨時都可以被主帳號收回。
可以根據文檔,利用標籤鑒權實現主子帳號的資源隔離。
在查看本文前,請確保您已經詳讀了RAM協助手冊和API GatewayAPI 手冊。
第一部分:策略管理
授權策略(Policy),來描述授權的具體內容,授權內容主要包含效力(Effect)、資源(Resource)、對資源所授予的操作許可權(Action)以及限制條件(Condition)這幾個基本元素。
1. 系統授權策略
API Gateway已經預置了兩個系統許可權,AliyunApiGatewayFullAccess和AliyunApiGatewayReadOnlyAccess,可以到 RAM控制台-許可權管理-權限原則 進行查看。
AliyunApiGatewayFullAccess:管理員權限,擁有主帳號下包含 API 分組、API、流控策略、應用等所有資源的系統管理權限。
AliyunApiGatewayReadOnlyAccess:可以查看主帳號下包含 API 分組、API、流控策略、應用等所有資源,但不可以操作。
2. 自訂授權策略
您可以根據需要自訂系統管理權限,支援更為精細化的授權,可以為某個操作,也可以是某個資源。如:API GetUsers 的編輯許可權。可以在RAM控制台-策略管理中選擇策略類型為自訂策略,查看已經定義好的自訂授權。
第二部分:授權策略
授權策略是一組許可權的集合,它以一種策略語言來描述。通過給使用者或群組附加授權策略,使用者或群組中的所有使用者就能獲得授權策略中指定的存取權限。
樣本:
{
"Version": "1",
"Statement": [
{
"Action": "apigateway:Describe*",
"Resource": "*",
"Effect": "Allow"
}
]
}
此樣本表示:允許所有的查看操作。
Action(操作名稱列表)格式為:
"Action":"<service-name>:<action-name>"
其中:
service-name 為:阿里雲產品名稱,請填寫 apigateway。
action-name 為:API 介面名稱,請參照下表,支援萬用字元*。
"Action": "apigateway:Describe*" 表示所有的查詢操作。
"Action": "apigateway:*" 表示 API Gateway所有操作。
第三部分:Resource(操作對象列表)
Resource 通常指操作對象, API Gateway中的 API 分組、流控策略、應用都被稱為 Resource,書寫格式:
acs:<service-name>:<region>:<account-id>:<relative-id>
其中:
acs:Alibaba Cloud Service 的首字母縮寫,表示阿里雲的公用雲端平台。
service-name 為:阿里雲產品名稱,請填寫 apigateway。
region:地區資訊,可以使用萬用字元*號來代替,*表示所有地區。
account-id:帳號 ID,比如123456789012****,也可以用*代替。
relative-id:與 API Gateway相關的資源描述部分,這部分的格式描述支援類似於一個檔案路徑的樹狀結構。
格式:
acs:apigateway:$regionid:$accountid:apigroup/$groupId
樣本:
acs:apigateway:*:*:apigroup/cbd157704e624ab58a204fd3e0b5ad79
請結合 API Gateway的API 手冊來查看下錶:
action-name | 介面描述 | 資源(Resource) |
CreateApiGroup | 建立分組 | 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 | 建立API | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
DeployApi | 發布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 | 建立外掛程式 | 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 | 建立應用 | acs:apigateway:$regionid:$accountid:app/* |
ModifyApp | 修改應用 | acs:apigateway:$regionid:$accountid:app/$appId |
DeleteApp | 刪除應用 | acs:apigateway:$regionid:$accountid:app/$appId |
DescribeAppAttributes | 查詢應用列表 | acs:apigateway:$regionid:$accountid:app/$appId |
SetApisAuthorities | 給APP授權API存取權限 | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
DescribeAuthorizedApps | 查詢API授權列表 | acs:apigateway:$regionid:$accountid:apigroup/$groupId |
SetVpcAccess | 添加VPC授權 | acs:apigateway:$regionid:$accountid:vpcaccess/* |
RemoveVpcAccess | 刪除VPC授權 | acs:apigateway:$regionid:$accountid:vpcaccess/* |
DescribeVpcAccesses | 查詢VPC授權 | acs:apigateway:$regionid:$accountid:vpcaccess/* |
DescribeInstances | 查詢專享執行個體列表授權 | acs:apigateway:$regionid:$accountid:instance/$instanceId |
部分情境樣本
授權所有API的查詢操作:
{
"Version": "1",
"Statement": [
{
"Action": "apigateway:Describe*",
"Resource":"acs:apigateway:$regionid:$accountid:apigroup/*",
"Effect": "Allow"
}
]
}
授權打了標籤 `version:v1` 的分組查詢操作:
{
"Version": "1",
"Statement": [
{
"Action": "apigateway:Describe*",
"Resource":"acs:apigateway:$regionid:$accountid:apigroup/*",
"Effect": "Allow",
"Condition": {
"StringEquals": {
"apigateway:tag/version": "v1"
}
}
}
]
}
授權某個分組下所有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"
}
]
}
備忘:以上樣本中,變數部分可以根據需要配置成*。