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的許可權,即AliyunRDCReadOnlyAccess,即可滿足訪問雲效RDC。
當阿里雲帳號給RAM使用者授予關於觸發器相關的許可權,例如,Object Storage Service的AliyunOSSFullAccess許可權後,出現無法更新觸發器的情況時,阿里雲帳號還需給RAM使用者添加如下自訂策略。成功授權後RAM使用者可以正常更新Object Storage Service觸發器。
{
"Statement": [
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
自訂策略
除了Function Compute預設提供的系統策略外,您也可以通過自訂策略進行更細粒度的許可權管理。關於權限原則的基本資料,請參見權限原則基本元素。
Resource | Action | 描述 |
acs:fc:<region>:<account-id>:services/<serviceName> | fc:GetService | 特定服務資源。 |
fc:UpdateService | ||
fc:DeleteService | ||
acs:fc:<region>:<account-id>:services/* | fc:CreateService | 所有服務資源。 |
fc:ListServices | ||
acs:fc:<region>:<account-id>:services/<serviceName>.<qualifier> | fc:GetService | 特定版本的服務資源。 |
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName> | fc:GetFunction | 特定服務下的特定函數資源。 |
fc:UpdateFunction | ||
fc:DeleteFunction | ||
fc:InvokeFunction | ||
acs:fc:<region>:<account-id>:services/<serviceName>/functions/* | fc:CreateFunction | 特定服務下的所有函數資源。 |
fc:ListFunctions | ||
acs:fc:<region>:<account-id>:services/<serviceName>.*/functions/<functionName> | fc:GetFunction | 特定服務的所有版本下的所有函數資源。 |
fc:UpdateFunction | ||
fc:DeleteFunction | ||
fc:InvokeFunction | ||
fc:PutProvisionConfig | ||
fc:GetProvisionConfig | ||
fc:PutFunctionOnDemandConfig | ||
fc:DeleteFunctionOnDemandConfig | ||
fc:PutFunctionAsyncInvokeConfig | ||
fc:DeleteFunctionAsyncInvokeConfig | ||
fc:GetFunctionAsyncInvokeConfig | ||
fc:GetFunctionOnDemandConfig | ||
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/triggers/<triggerName> | fc:GetTrigger | 特定服務下的特定函數下的特定觸發器資源。 |
fc:UpdateTrigger | ||
fc:DeleteTrigger | ||
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/triggers/* | fc:CreateTrigger | 特定服務下的特定函數下的所有觸發器資源。 |
fc:ListTriggers | ||
acs:fc:<region>:<account-id>:services/<serviceName>/versions | fc:PublishServiceVersion | 所有版本。 |
fc:ListServiceVersions | ||
acs:fc:<region>:<account-id>:services/<serviceName>/versions/<versionId> | fc:DeleteServiceVersion | 指定版本。 |
acs:fc:<region>:<account-id>:services/<serviceName>/aliases/* | fc:CreateAlias | 所有別名。 |
fc:ListAliases | ||
acs:fc:<region>:<account-id>:services/<serviceName>/aliases/<aliasName> | fc:GetAlias | 指定別名。 |
fc:UpdateAlias | ||
fc:DeleteAlias | ||
acs:fc:<region>:<account-id>:custom-domains/* | fc:CreateCustomDomain | 所有自訂網域名。 |
fc:ListCustomDomains | ||
acs:fc:<region>:<account-id>:custom-domains/<domainName> | fc:GetCustomDomain | 指定自訂網域名。 |
fc:UpdateCustomDomain | ||
fc:DeleteCustomDomain | ||
acs:fc:<region>:<account-id>:tag | fc:TagResource | 單個標籤。 |
fc:GetResourceTags | ||
fc:UnTagResource | ||
acs:fc:<region>:<account-id>:tags/* | fc:ListTaggedResources | 所有標籤。 |
acs:fc:<region>:<account-id>:account-settings/* | fc:GetAccountSettings | 使用者佈建。 |
acs:fc:<region>:<account-id>:layerarn/<arn> | fc:GetLayerVersionByArn | 所有層。 |
acs:fc:<region>:<account-id>:layers/* | fc:ListLayers | |
acs:fc:<region>:<account-id>:layers/<layerName>/versions/<versionId> | fc:PublishLayerAsPublic | |
acs:fc:<region>:<account-id>:layers/<layerName>/versions/* | fc:ListLayerVersions | 所有層版本。 |
fc:CreateLayerVersion | ||
acs:fc:<region>:<account-id>:layers/<layerName>/versions/<versionId> | fc:GetLayerVersion | |
fc:DeleteLayerVersion | ||
acs:fc:<region>:<account-id>:on-demand-configs/* | fc:ListOnDemandConfigs | 按量執行個體配置。 |
acs:fc:<region>:<account-id>:provision-configs/* | fc:ListProvisionConfigs | 預留執行個體配置。 |
acs:fc:<region>:<account-id>:services/<serviceName>/binding | fc:DeleteVpcBinding | VPC綁定。 |
acs:fc:<region>:<account-id>:services/<serviceName>/binding/* | fc:CreateVpcBinding | |
fc:ListVpcBindings | ||
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/async-invoke-configs/* | fc:ListFunctionAsyncInvokeConfigs | 非同步呼叫配置。 |
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/code | fc:GetFunctionCode | 所有函數代碼。 |
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/stateful-async-invocations/* | fc:ListStatefulAsyncInvocations | 非同步任務。 |
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/stateful-async-invocations/<invocationId> | fc:GetStatefulAsyncInvocation | |
fc:StopStatefulAsyncInvocation |
您可以通過以上自訂的權限原則設定具有調用華東1(杭州)地區下test服務下demo函數的許可權,具體策略如下所示:
{
"Version": "1",
"Statement": [
{
"Action": [
"fc:InvokeFunction"
],
"Resource": "acs:fc:cn-hangzhou:*:services/test/functions/demo",
"Effect": "Allow"
}
]
}
權限原則樣本
自訂建立和擷取服務以及建立和執行函數權限原則
{
"Version":"1",
"Statement":[
{
"Action":[
"fc:CreateService",
"fc:GetService",
"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:UpdateService",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableServiceInternetAccess": "true"
}
}
},
{
"Action": "fc:CreateService",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"fc:EnableServiceInternetAccess": "false"
}
}
}
]
}
自訂禁止建立無法開啟日誌訪問的服務權限原則
{
"Version": "1",
"Statement": [
{
"Action": "fc:UpdateService",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableServiceSLSLogging": "false"
}
}
},
{
"Action": "fc:CreateService",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"fc:EnableServiceSLSLogging": "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"
}
}
}
]
}