函数计算权限管理是通过阿里云的访问控制RAM实现的。使用访问控制RAM可以让您避免与其他用户共享云账号密钥,即AccessKey(包含AccessKey ID和AccessKey Secret),按需为RAM用户分配最小权限。本文介绍函数计算的权限策略,包括系统策略、自定义策略及自定义策略示例。
策略类型
系统策略
当您首次使用RAM用户登录函数计算控制台时,不仅需要通过阿里云账号给您的RAM用户添加访问函数计算的系统权限策略,也需要给RAM用户添加访问其他云服务的系统权限策略。成功授权后,您的RAM用户才可以正常访问函数计算服务及其他云产品服务。
系统策略包含以下类型:
- 函数计算服务提供的系统策略。
权限策略名称 描述 AliyunFCReadOnlyAccess 表示允许对函数计算所有的资源进行读操作。 AliyunFCInvocationAccess 表示允许对所有函数的资源进行执行操作。 AliyunFCFullAccess 表示允许对所有函数计算资源进行所有执行操作。 说明 管理函数计算服务FC权限AliyunFCFullAccess内包含调用函数计算FC服务函数的权限AliyunFCInvocationAccess及只读访问函数计算FC服务权限AliyunFCReadOnlyAccess。当成功授权管理函数计算服务的权限后,您无需再授权调用或只读函数计算的权限。 - 其他云产品服务提供的系统策略。
云产品名称 系统策略 日志服务SLS - AliyunLogReadOnlyAccess:只读访问日志服务Log的权限。
- AliyunLogFullAccess:管理日志服务Log的权限。
说明 基于最小权限的原则,您只需授予RAM用户只读访问日志服务Log的权限AliyunLogReadOnlyAccess就可以访问日志服务Log了。对象存储OSS - AliyunOSSReadOnlyAccess:只读对象存储服务OSS的权限。
- AliyunOSSFullAccess:管理对象存储服务OSS权限。
云监控 AliyunCloudMonitorReadOnlyAccess:只读访问云监控CloudMonitor的权限。 云盾证书服务 AliyunYundunCertReadOnlyAccess:只读访问云盾证书服务的权限。 专有网络VPC AliyunVPCReadOnlyAccess:只读访问专有网络VPC的权限。 云服务器ECS AliyunECSReadOnlyAccess:只读访问云服务器服务ECS的权限。 访问控制RAM - AliyunRAMReadOnlyAccess:只读访问控制RAM的权限,即查看用户、组以及授权信息的权限。
- AliyunRAMFullAccess:管理访问控制RAM的权限,即管理用户以及授权的权限。
说明 AliyunRAMReadOnlyAccess仅适用于在控制台获取角色的列表,当RAM用户还需要进行其他操作,您需给RAM用户添加管理访问控制RAM的权限即AliyunRAMFullAccess。应用实时监控服务ARMS - AliyunARMSReadOnlyAccess:只读访问业务实时监控服务ARMS的权限。
- AliyunARMSFullAccess:管理业务实时监控服务ARMS的权限。
说明 基于最小权限的原则,您只需授予RAM用户只读访问业务实时监控服务ARMS的权限AliyunARMSReadOnlyAccess就可以访问应用实时监控服务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就可以满足访问文件存储服务了。云数据库RDS - AliyunRDSReadOnlyAccess:只读访问云数据库服务RDS的权限。
- AliyunRDSFullAccess:管理云数据库服务RDS的权限。
说明 基于最小权限的原则,您只需授予RAM用户只读访问云数据库服务RDS的权限即AliyunRDSReadOnlyAccess就可以满足访问云数据库服务了。云效 AliyunRDCDevStudioRole:表示帮助您创建云效账号及初始化云效企业。
注意 当阿里云账号给RAM用户授予关于触发器相关的权限例如对象存储OSS的AliyunOSSFullAccess权限后,出现无法更新触发器的情况时,阿里云账号还需给RAM用户添加如下自定义策略,成功授权后RAM用户就可以正常更新对象存储触发器了。
{
"Statement": [
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
自定义策略
除了函数计算默认提供的系统策略外,您也可以通过自定义策略进行更细粒度的权限管理。关于权限策略的基本信息,请参见权限策略基本元素。
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/:version | fc:PublishLayerAsPublic | |
acs:fc:<region>:<account-id>:layers/:layerName/versions/* | fc:ListLayerVersions | 所有层版本。 |
fc:CreateLayerVersion | ||
acs:fc:<region>:<account-id>:layers/:layerName/versions/:version | 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"
}