函數(shù)計算權限管理通過阿里云的訪問控制RAM實現(xiàn)。使用訪問控制RAM可以讓您避免與其他用戶共享云賬號密鑰,即AccessKey(包含AccessKey ID和AccessKey Secret),按需為RAM用戶分配最小權限。本文介紹函數(shù)計算的權限策略,包括系統(tǒng)策略、自定義策略及自定義策略示例。
策略類型
在訪問控制中,權限策略是用語法和結構描述的一組權限的集合,可以精確地描述被授權的Resource(資源集)、Action(操作集)以及授權條件。函數(shù)計算包含以下權限策略:
系統(tǒng)策略:統(tǒng)一由阿里云創(chuàng)建,您只能使用不能修改,策略的版本更新由阿里云維護。
自定義策略:您可以自主創(chuàng)建、更新和刪除,策略的版本更新由您自己維護。
系統(tǒng)策略
當您首次使用RAM用戶登錄函數(shù)計算控制臺時,不僅需要通過阿里云賬號給您的RAM用戶添加訪問函數(shù)計算的系統(tǒng)權限策略,也需要給RAM用戶添加訪問其他云服務的系統(tǒng)權限策略。成功授權后,您的RAM用戶才可以正常訪問函數(shù)計算服務及其他云產品服務。
系統(tǒng)策略包含以下類型:
函數(shù)計算服務提供的系統(tǒng)策略。
權限策略名稱
描述
AliyunFCReadOnlyAccess
表示允許對函數(shù)計算所有的資源進行讀操作。
AliyunFCInvocationAccess
表示允許對所有函數(shù)的資源進行執(zhí)行操作。
AliyunFCFullAccess
表示允許對所有函數(shù)計算資源進行所有執(zhí)行操作。
說明管理函數(shù)計算服務權限AliyunFCFullAccess內包含調用函數(shù)計算服務函數(shù)的權限AliyunFCInvocationAccess及只讀訪問函數(shù)計算服務權限AliyunFCReadOnlyAccess。當成功授權管理函數(shù)計算服務的權限后,您無需再授權調用函數(shù)或只讀函數(shù)計算的權限。
其他云產品服務提供的系統(tǒng)策略。
云產品名稱
系統(tǒng)策略
日志服務SLS
AliyunLogReadOnlyAccess:只讀訪問日志服務Log的權限。
AliyunLogFullAccess:管理日志服務Log的權限。
說明基于最小權限的原則,您只需授予RAM用戶只讀訪問日志服務Log的權限AliyunLogReadOnlyAccess即可訪問日志服務Log。
對象存儲OSS
AliyunOSSReadOnlyAccess:只讀對象存儲服務OSS的權限。
AliyunOSSFullAccess:管理對象存儲服務OSS權限。
云監(jiān)控
AliyunCloudMonitorReadOnlyAccess:只讀訪問云監(jiān)控CloudMonitor的權限。
云盾證書服務
AliyunYundunCertReadOnlyAccess:只讀訪問云盾證書服務的權限。
專有網絡VPC
AliyunVPCReadOnlyAccess:只讀訪問專有網絡VPC的權限。
云服務器ECS
AliyunECSReadOnlyAccess:只讀訪問云服務器服務ECS的權限。
訪問控制RAM
AliyunRAMReadOnlyAccess:只讀訪問控制RAM的權限,即查看用戶、組以及授權信息的權限。
AliyunRAMFullAccess:管理訪問控制RAM的權限,即管理用戶以及授權的權限。
說明AliyunRAMReadOnlyAccess僅適用于在控制臺獲取角色的列表,當RAM用戶還需要進行其他操作,您需給RAM用戶添加管理訪問控制RAM的權限,即AliyunRAMFullAccess。
應用實時監(jiān)控服務ARMS
AliyunARMSReadOnlyAccess:只讀訪問應用實時監(jiān)控服務ARMS的權限。
AliyunARMSFullAccess:管理應用實時監(jiān)控服務ARMS的權限。
說明基于最小權限的原則,您只需授予RAM用戶只讀訪問應用實時監(jiān)控服務ARMS的權限AliyunARMSReadOnlyAccess即可訪問應用實時監(jiān)控服務ARMS。
輕量消息隊列(原 MNS)
AliyunMNSReadOnlyAccess:只讀訪問輕量消息隊列(原 MNS)的權限。
AliyunMNSFullAccess:管理輕量消息隊列(原 MNS)的權限。
說明基于最小權限的原則,您只需授予RAM用戶只讀訪問輕量消息隊列(原 MNS)的權限即AliyunMNSReadOnlyAccess即可滿足訪問輕量消息隊列(原 MNS)。
事件總線EventBridge
AliyunEventBridgeReadOnlyAccess:只讀訪問事件總線EventBridge的權限。
AliyunEventBridgeFullAccess:管理事件總線EventBridge的權限。
說明基于最小權限的原則,您只需授予RAM用戶只讀訪問事件總線EventBridge的權限即AliyunEventBridgeReadOnlyAccess即可滿足訪問事件總線EventBridge。
消息隊列RocketMQ版
AliyunMQReadOnlyAccess:只讀訪問消息隊列MQ的權限。
AliyunMQFullAccess:管理消息隊列MQ的權限。
說明基于最小權限的原則,您只需授予RAM用戶只讀訪問消息隊列MQ的權限即AliyunMQReadOnlyAccess即可滿足訪問消息隊列RocketMQ版。
容器鏡像服務ACR
AliyunContainerRegistryReadOnlyAccess:只讀訪問容器鏡像服務ContainerRegistry的權限。
AliyunContainerRegistryFullAccess:管理容器鏡像服務ContainerRegistry的權限。
說明基于最小權限的原則,您只需授予RAM用戶只讀訪問容器鏡像服務ContainerRegistry的權限即AliyunContainerRegistryReadOnlyAccess即可訪問容器鏡像服務。
文件存儲NAS
AliyunNASReadOnlyAccess:查看文件存儲服務NAS的權限。
AliyunNASFullAccess:管理文件存儲服務NAS的權限。
說明基于最小權限的原則,您只需授予RAM用戶查看文件存儲服務(NAS)的權限即AliyunNASReadOnlyAccess即可滿足訪問文件存儲服務。
云數(shù)據(jù)庫RDS
AliyunRDSReadOnlyAccess:只讀訪問云數(shù)據(jù)庫服務RDS的權限。
AliyunRDSFullAccess:管理云數(shù)據(jù)庫服務RDS的權限。
說明基于最小權限的原則,您只需授予RAM用戶只讀訪問云數(shù)據(jù)庫服務RDS的權限即AliyunRDSReadOnlyAccess即可滿足訪問云數(shù)據(jù)庫服務。
云效
AliyunRDCReadOnlyAccess:只讀訪問云效RDC的權限。
AliyunRDCFullAccess:管理云效RDC的權限。
說明基于最小權限的原則,您只需授予RAM用戶只讀訪問云效RDC的權限,即AliyunRDCReadOnlyAccess,即可滿足訪問云效RDC。
當阿里云賬號給RAM用戶授予關于觸發(fā)器相關的權限,例如,對象存儲OSS的AliyunOSSFullAccess權限后,出現(xiàn)無法更新觸發(fā)器的情況時,阿里云賬號還需給RAM用戶添加如下自定義策略。成功授權后RAM用戶可以正常更新對象存儲觸發(fā)器。
{
"Statement": [
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
自定義策略
除了函數(shù)計算默認提供的系統(tǒng)策略外,您也可以通過自定義策略進行更細粒度的權限管理。關于權限策略的基本信息,請參見權限策略基本元素。
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 | 特定服務下的特定函數(shù)資源。 |
fc:UpdateFunction | ||
fc:DeleteFunction | ||
fc:InvokeFunction | ||
acs:fc:<region>:<account-id>:services/<serviceName>/functions/* | fc:CreateFunction | 特定服務下的所有函數(shù)資源。 |
fc:ListFunctions | ||
acs:fc:<region>:<account-id>:services/<serviceName>.*/functions/<functionName> | fc:GetFunction | 特定服務的所有版本下的所有函數(shù)資源。 |
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 | 特定服務下的特定函數(shù)下的特定觸發(fā)器資源。 |
fc:UpdateTrigger | ||
fc:DeleteTrigger | ||
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/triggers/* | fc:CreateTrigger | 特定服務下的特定函數(shù)下的所有觸發(fā)器資源。 |
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 | 所有函數(shù)代碼。 |
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函數(shù)的權限,具體策略如下所示:
{
"Version": "1",
"Statement": [
{
"Action": [
"fc:InvokeFunction"
],
"Resource": "acs:fc:cn-hangzhou:*:services/test/functions/demo",
"Effect": "Allow"
}
]
}
權限策略示例
自定義創(chuàng)建和獲取服務以及創(chuàng)建和執(zhí)行函數(shù)權限策略
{
"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觸發(fā)器權限策略
{
"Statement": [
{
"Action": [
"oss:ListBucket",
"oss:GetBucketEventNotification",
"oss:PutBucketEventNotification",
"oss:DeleteBucketEventNotification"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
自定義禁止創(chuàng)建支持訪問公網的服務權限策略
{
"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"
}
}
}
]
}
自定義禁止創(chuàng)建無法打開日志訪問的服務權限策略
{
"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"
}
}
}
]
}
自定義禁止創(chuàng)建支持公網訪問的觸發(fā)器權限策略
{
"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"
}
}
}
]
}