Function Compute許可權管理通過阿里雲的存取控制RAM實現。使用存取控制RAM可以讓您避免與其他使用者共用雲帳號密鑰,即AccessKey(包含AccessKey ID和AccessKey Secret),按需為RAM使用者指派最小許可權。本文介紹Function Compute的權限原則,包括系統策略、自訂策略及自訂策略樣本。
策略類型
系統策略
當您首次使用RAM使用者登入Function Compute控制台時,不僅需要通過阿里雲帳號給您的RAM使用者添加訪問Function Compute的系統權限原則,也需要給RAM使用者添加訪問其他雲端服務的系統權限原則。成功授權後,您的RAM使用者才可以正常訪問Function Compute服務及其他雲產品服務。
系統策略包含以下類型:
Function Compute服務提供的系統策略。
權限原則名稱
描述
AliyunFCReadOnlyAccess
表示允許對Function Compute所有的資源進行讀操作。
AliyunFCInvocationAccess
表示允許對所有函數的資源進行執行操作。
AliyunFCFullAccess
表示允許對所有Function Compute資源進行所有執行操作。
說明管理Function Compute服務許可權AliyunFCFullAccess內包含調用Function Compute服務函數的許可權AliyunFCInvocationAccess及唯讀訪問Function Compute服務許可權AliyunFCReadOnlyAccess。當成功授權管理Function Compute服務的許可權後,您無需再授權調用函數或唯讀Function Compute的許可權。
其他雲產品服務提供的系統策略。
雲產品名稱
系統策略
Log ServiceSLS
AliyunLogReadOnlyAccess:唯讀訪問Log ServiceLog的許可權。
AliyunLogFullAccess:管理Log ServiceLog的許可權。
說明基於最小許可權的原則,您只需授予RAM使用者唯讀訪問Log ServiceLog的許可權AliyunLogReadOnlyAccess即可訪問Log ServiceLog。
Object Storage Service
AliyunOSSReadOnlyAccess:唯讀Object Storage Service服務OSS的許可權。
AliyunOSSFullAccess:管理Object Storage Service服務OSS許可權。
CloudMonitor
AliyunCloudMonitorReadOnlyAccess:唯讀訪問CloudMonitorCloudMonitor的許可權。
Apsara Stack Security認證服務
AliyunYundunCertReadOnlyAccess:唯讀訪問Apsara Stack Security認證服務的許可權。
Virtual Private Cloud
AliyunVPCReadOnlyAccess:唯讀訪問Virtual Private Cloud的許可權。
Elastic Compute Service
AliyunECSReadOnlyAccess:唯讀訪問雲端服務器服務ECS的許可權。
存取控制RAM
AliyunRAMReadOnlyAccess:唯讀存取控制RAM的許可權,即查看使用者、組以及授權資訊的許可權。
AliyunRAMFullAccess:管理存取控制RAM的許可權,即系統管理使用者以及授權的許可權。
說明AliyunRAMReadOnlyAccess僅適用於在控制台擷取角色的列表,當RAM使用者還需要進行其他動作,您需給RAM使用者添加管理存取控制RAM的許可權,即AliyunRAMFullAccess。
應用即時監控服務ARMS
AliyunARMSReadOnlyAccess:唯讀訪問應用即時監控服務ARMS的許可權。
AliyunARMSFullAccess:管理應用即時監控服務ARMS的許可權。
說明基於最小許可權的原則,您只需授予RAM使用者唯讀訪問應用即時監控服務ARMS的許可權AliyunARMSReadOnlyAccess即可訪問應用即時監控服務ARMS。
Simple Message Queue (formerly MNS)
AliyunMNSReadOnlyAccess:唯讀訪問Simple Message Queue (formerly MNS)的許可權。
AliyunMNSFullAccess:管理Simple Message Queue (formerly MNS)的許可權。
說明基於最小許可權的原則,您只需授予RAM使用者唯讀訪問Simple Message Queue (formerly MNS)的許可權即AliyunMNSReadOnlyAccess即可滿足訪問Simple Message Queue (formerly MNS)。
事件匯流排EventBridge
AliyunEventBridgeReadOnlyAccess:唯讀訪問事件匯流排EventBridge的許可權。
AliyunEventBridgeFullAccess:管理事件匯流排EventBridge的許可權。
說明基於最小許可權的原則,您只需授予RAM使用者唯讀訪問事件匯流排EventBridge的許可權即AliyunEventBridgeReadOnlyAccess即可滿足訪問事件匯流排EventBridge。
訊息佇列RocketMQ版
AliyunMQReadOnlyAccess:唯讀訪問Message Queue的許可權。
AliyunMQFullAccess:管理Message Queue的許可權。
說明基於最小許可權的原則,您只需授予RAM使用者唯讀訪問Message Queue的許可權即AliyunMQReadOnlyAccess即可滿足訪問訊息佇列RocketMQ版。
Container RegistryACR
AliyunContainerRegistryReadOnlyAccess:唯讀訪問Container RegistryContainerRegistry的許可權。
AliyunContainerRegistryFullAccess:管理Container RegistryContainerRegistry的許可權。
說明基於最小許可權的原則,您只需授予RAM使用者唯讀訪問Container RegistryContainerRegistry的許可權即AliyunContainerRegistryReadOnlyAccess即可訪問Container Registry。
Apsara File Storage NAS
AliyunNASReadOnlyAccess:查看檔案儲存體服務NAS的許可權。
AliyunNASFullAccess:管理檔案儲存體服務NAS的許可權。
說明基於最小許可權的原則,您只需授予RAM使用者查看檔案儲存體服務(NAS)的許可權即AliyunNASReadOnlyAccess即可滿足訪問檔案儲存體服務。
雲資料庫RDS
AliyunRDSReadOnlyAccess:唯讀訪問雲資料庫服務RDS的許可權。
AliyunRDSFullAccess:管理雲資料庫服務RDS的許可權。
說明基於最小許可權的原則,您只需授予RAM使用者唯讀訪問雲資料庫服務RDS的許可權即AliyunRDSReadOnlyAccess即可滿足訪問雲資料庫服務。
雲效
AliyunRDCReadOnlyAccess:唯讀訪問雲效RDC的許可權。
AliyunRDCFullAccess:管理雲效RDC的許可權。
說明基於最小許可權的原則,您只需授予RAM使用者唯讀訪問雲效RDC的許可權,即AliyunRDCReadOnlyAccesss,即可滿足訪問雲效RDC。
當阿里雲帳號給RAM使用者授予關於觸發器相關的許可權,例如,Object Storage Service的AliyunOSSFullAccess許可權後,出現無法更新觸發器的情況時,阿里雲帳號還需給RAM使用者添加如下自訂策略。成功授權後RAM使用者可以正常更新Object Storage Service觸發器。
{
"Statement": [
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}自訂策略
除了Function Compute預設提供的系統策略外,您也可以通過自訂策略進行更細粒度的許可權管理。關於權限原則的基本資料,請參見權限原則基本元素。
Action | Resource | 描述 |
fc:GetAsyncTask | acs:fc:{region}:{uid}:functions/{functionName}/async-tasks/{taskId} | 非同步任務。 |
fc:StopAsyncTask | acs:fc:{region}:{uid}:functions/{functionName}/async-tasks/{taskId} | |
fc:ListAsyncTasks | acs:fc:{region}:{uid}:functions/{functionName}/async-tasks/* | |
fc:ListFunctionAsyncInvokeConfigs | acs:fc:{region}:{uid}:async-invoke-configs/* acs:fc:{region}:{uid}:functions/{functionName} | 非同步呼叫配置。 |
fc:ListConcurrencyConfigs | acs:fc:{region}:{uid}:concurrency-configs/* acs:fc:{region}:{uid}:functions/{functionName} | 並發配置。 |
fc:ListCustomDomains | acs:fc:{region}:{uid}:custom-domains/* | 所有自訂網域名。 |
fc:GetCustomDomain | acs:fc:{region}:{uid}:custom-domains/{domainName} | 指定自訂網域名。 |
fc:DeleteCustomDomain | ||
fc:UpdateCustomDomain | ||
fc:CreateCustomDomain | ||
fc:ListFunctions | acs:fc:{region}:{uid}:functions/* | 所有函數資源。 |
fc:DeleteConcurrencyConfig | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:PutConcurrencyConfig | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:DeleteFunction | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:UpdateFunction | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:CreateFunction | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:GetConcurrencyConfig | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:GetFunction | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:ListAliases | acs:fc:{region}:{uid}:functions/{functionName}/aliases/* | 所有別名。 |
fc:CreateAlias | acs:fc:{region}:{uid}:functions/{functionName}/aliases/{aliasName} | 指定別名。 |
fc:UpdateAlias | acs:fc:{region}:{uid}:functions/{functionName}/aliases/{aliasName} | |
fc:GetAlias | acs:fc:{region}:{uid}:functions/{functionName}/aliases/{aliasName} | |
fc:DeleteAlias | acs:fc:{region}:{uid}:functions/{functionName}/aliases/{aliasName} | |
fc:ListInstances | acs:fc:{region}:{uid}:functions/{functionName}/instances/* | 執行個體資訊。 |
fc:ListTriggers | acs:fc:{region}:{uid}:functions/{functionName}/triggers/* | 指定函數下的所有觸發器資源。 |
fc:CreateTrigger | acs:fc:{region}:{uid}:functions/{functionName}/triggers/{triggerName} | 指定函數下的特定觸發器資源。 |
fc:UpdateTrigger | acs:fc:{region}:{uid}:functions/{functionName}/triggers/{triggerName} | |
fc:GetTrigger | acs:fc:{region}:{uid}:functions/{functionName}/triggers/{triggerName} | |
fc:DeleteTrigger | acs:fc:{region}:{uid}:functions/{functionName}/triggers/{triggerName} | |
fc:PublishFunctionVersion | acs:fc:{region}:{uid}:functions/{functionName}/versions | 所有版本。 |
fc:ListFunctionVersions | acs:fc:{region}:{uid}:functions/{functionName}/versions/* | |
fc:DeleteFunctionVersion | acs:fc:{region}:{uid}:functions/{functionName}/versions/{versionId} | 指定版本。 |
fc:ListVpcBindings | acs:fc:{region}:{uid}:functions/{functionName}/vpc-bindings/* | VPC綁定。 |
fc:CreateVpcBinding | acs:fc:{region}:{uid}:functions/{functionName}/vpc-bindings/* | |
fc:DeleteVpcBinding | acs:fc:{region}:{uid}:functions/{functionName}/vpc-bindings/{vpcId} | |
fc:GetFunctionCode | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | 所有函數代碼。 |
fc:GetFunctionAsyncInvokeConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | 所有函數資源。 |
fc:DeleteProvisionConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:PutProvisionConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:InvokeFunction | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:PutFunctionAsyncInvokeConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:GetProvisionConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:DeleteFunctionAsyncInvokeConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:GetLayerVersionByArn | acs:fc:{region}:{uid}:layerarn/{arn} | 所有層。 |
fc:ListLayers | acs:fc:{region}:{uid}:layers/* | |
fc:PutLayerACL | acs:fc:{region}:{uid}:layers/{layerName} | |
fc:ListLayerVersions | acs:fc:{region}:{uid}:layers/{layerName}/versions/* | |
fc:CreateLayerVersion | acs:fc:{region}:{uid}:layers/{layerName}/versions/* | |
fc:DeleteLayerVersion | acs:fc:{region}:{uid}:layers/{layerName}/versions/{version} | |
fc:GetLayerVersion | acs:fc:{region}:{uid}:layers/{layerName}/versions/{version} | |
fc:ListProvisionConfigs | acs:fc:{region}:{uid}:provision-configs/* acs:fc:{region}:{uid}:functions/{functionName} | 預留執行個體配置。 |
您可以通過以上自訂的權限原則設定具有調用華東1(杭州)地區下demo函數的許可權,具體策略如下所示:
{
"Version": "1",
"Statement": [
{
"Action": [
"fc:InvokeFunction"
],
"Resource": "acs:fc:cn-hangzhou:*:functions/demo",
"Effect": "Allow"
}
]
}權限原則樣本
自訂建立和擷取服務以及建立和執行函數權限原則
{
"Version": "1",
"Statement": [{
"Action": [
"fc:CreateFunction",
"fc:GetFunction",
"fc:InvokeFunction"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
]
}自訂訪問日誌權限原則
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"log:ListProject",
"log:ListLogStore"
],
"Resource": "acs:log:*:*:project/*"
}
]
}自訂訪問OSS觸發器權限原則
{
"Statement": [
{
"Action": [
"oss:ListBucket",
"oss:GetBucketEventNotification",
"oss:PutBucketEventNotification",
"oss:DeleteBucketEventNotification"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}自訂禁止建立支援訪問公網的服務權限原則
{
"Version": "1",
"Statement": [
{
"Action": "fc:UpdateFunction",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableServiceInternetAccess": "true"
}
}
},
{
"Action": "fc:CreateFunction",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"fc:EnableServiceInternetAccess": "false"
}
}
}
]
}自訂禁止建立無法開啟日誌訪問的服務權限原則
{
"Version": "1",
"Statement": [
{
"Action": "fc:UpdateFunction",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableServiceSLSLogging": "false"
}
}
},
{
"Action": "fc:CreateFunction",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"fc:EnableServiceSLSLogging": "true"
}
}
}
]
}自訂禁止建立支援公網訪問的觸發器權限原則
{
"Version": "1",
"Statement": [
{
"Action": "fc:UpdateTrigger",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableHTTPTriggerInternet": "true"
}
}
},
{
"Action": "fc:CreateTrigger",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableHTTPTriggerInternet": "true"
}
}
}
]
}該權限原則會禁止使用者在CreateTrigger - 建立觸發器API和UpdateTrigger - 更新觸發器API中將 disableURLInternet 參數設定為false (表示支援預設公網網域名稱),disableURLInternet只能設定為true,該限制僅適用於HTTP觸發器。關於HTTP觸發器資料結構,請參見HTTPTriggerConfig。
如果嘗試建立開啟disableURLInternet=false的觸發器,會出現 403 AccessDenied報錯,樣本如下:
{
"statusCode":403,
"Code":"AccessDenied",
"Message":"the caller is not authorized to perform 'fc:CreateTrigger' on resource 'acs:fc:xx:xx:functions/xx/triggers/xx' with condition '[fc:EnableHTTPTriggerInternet=true]'"
}自訂禁止建立匿名訪問的觸發器權限原則
{
"Version": "1",
"Statement": [
{
"Action": "fc:UpdateTrigger",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableHTTPTriggerAnonymous": "true"
}
}
},
{
"Action": "fc:CreateTrigger",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableHTTPTriggerAnonymous": "true"
}
}
}
]
}該權限原則會禁止使用者在API CreateTrigger - 建立觸發器和UpdateTrigger - 更新觸發器中將authType參數設定為anonymous(不需要認證),只允許設定為function(需要認證)。該限制僅適用於HTTP觸發器,更多資訊,請參見HTTPTriggerConfig。
如果嘗試建立開啟authType=anonymous的HTTP觸發器,會出現403 AccessDenied報錯。樣本如下:
{
"statusCode":403,
"Code":"AccessDenied",
"Message":"the caller is not authorized to perform 'fc:CreateTrigger' on resource 'acs:fc:xx:xx:functions/xx/triggers/xx' with condition '[fc:EnableHTTPTriggerAnonymous=true]'"
}自訂禁止建立支援HTTP協議訪問的自訂網域名的權限原則
{
"Version": "1",
"Statement": [
{
"Action": "fc:CreateCustomDomain",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableCustomDomainHTTP": "true"
}
}
},
{
"Action": "fc:UpdateCustomDomain",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableCustomDomainHTTP": "true"
}
}
}
]
}該權限原則會禁止使用者在API CreateCustomDomain - 建立自訂網域名和UpdateCustomDomain - 更新自訂網域名中將protocol參數設定為 HTTP或 HTTP,HTTPS,只能設定為 HTTPS。
如果嘗試建立開啟HTTP協議的自訂網域名,會出現 403 AccessDenied 報錯,樣本如下:
{
"statusCode":403,
"Code":"AccessDenied",
"Message":"the caller is not authorized to perform 'fc:CreateCustomDomain' on resource 'acs:fc:xxx:xxx:custom-domains/xxx' with condition '[fc:EnableCustomDomainHTTP=true]'"
}