本文介绍函数计算中权限的应用场景、类型以及管理机制。
应用场景
使用函数计算构建应用时,会涉及各种权限。例如:
- 当您想使用阿里云日志服务(SLS)收集函数运行日志时,您需要授予函数计算将函数运行日志写入您指定的日志库中的权限。
- 当您想使用阿里云对象存储服务(OSS)触发器时,您需要授予OSS调用函数的权限。
- 当您需要不同的人员管理的函数需要访问账户中的阿里云资源时,例如OSS中的数据,您可以创建RAM角色并授予函数访问阿里云资源的权限。
权限类型
访问阿里云云产品,需要拥有对该产品的访问权限。函数计算涉及的权限主要有以下几种:
- 函数计算访问阿里云其他产品,需要授予函数计算访问其他产品的权限。
该权限是服务级别的,当某服务配置了指定权限,同一服务下的所有函数都继承该权限。您的函数代码中使用
context.credentials
来访问其他云产品,示例代码如下。// 使用context访问OSS。 var OSSClient = require('ali-oss').Wrapper; exports.handler = function (event, context, callback) { console.log(event.toString()); var ossClient = new OSSClient({ accessKeyId: context.credentials.accessKeyId, accessKeySecret: context.credentials.accessKeySecret, stsToken: context.credentials.securityToken, region: 'oss-cn-shanghai', bucket: 'my-bucket', }); ossClient.put('my-object', new Buffer('hello, fc')).then(function (res) { callback(null, 'put object'); }).catch(function (err) { callback(err); }); };
如何配置服务权限,请参见配置服务权限。
- 事件源触发函数执行,需要授予事件源访问函数计算的权限。
该权限是触发器级别的权限,每个触发器需要根据实际需要设置相应的权限。
触发器的权限是在创建触发器过程中配置,具体操作步骤请参见: - RAM子账号访问函数计算资源需要授予相应的权限。
该权限是RAM账号级别的。访问控制(RAM)允许在一个云账号下创建并管理多个身份,并允许给单个身份或一组身份分配不同的权限,从而实现不同权限组拥有不同的云资源访问权限。您可以通过主账号给RAM子账号授权,让子账号有权限操作函数计算相关资源。
如何为RAM子账号设置权限,请参见为RAM用户授权。
函数计算RAM子账号的操作权限、资源访问权限及系统权限策略如下:- 函数计算RAM自定义权限策略
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: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 所有标签。 - 函数计算系统权限策略
函数计算默认提供三个系统策略AliyunFCReadOnlyAccess、AliyunFCInvocationAccess和AliyunFCFullAccess。您也可以自定义策略进行更细粒度的权限管理,具体请参见权限策略基本元素。
- AliyunFCReadOnlyAccess系统策略:表示允许对函数计算所有资源进行读操作。
{ "Version": "1", "Statement": [ { "Action": [ "fc:Get*", "fc:List*" ], "Resource": "*", "Effect": "Allow" } ] }
- AliyunFCInvocationAccess系统策略:表示允许对所有函数资源进行执行操作。
{ "Version": "1", "Statement": [ { "Action": [ "fc:InvokeFunction" ], "Resource": "*", "Effect": "Allow" } ] }
- AliyunFCFullAccess系统策略:表示允许对所有函数计算资源进行所有执行操作。
{ "Version": "1", "Statement": [ { "Action": "fc:*", "Resource": "*", "Effect": "Allow" } ] }
- 自定义策略:表示允许对杭州区域下的foo服务下的bar函数进行执行操作。
{ "Version": "1", "Statement": [ { "Action": [ "fc:InvokeFunction" ], "Resource": "acs:fc:cn-hangzhou:*:services/foo/functions/bar", "Effect": "Allow" } ] }
- AliyunFCReadOnlyAccess系统策略:表示允许对函数计算所有资源进行读操作。
- 函数计算RAM自定义权限策略
权限管理机制
访问控制服务RAM(Resource Access Management)是阿里云提供的资源访问控制服务。函数计算使用RAM基于角色的权限管理机制。
- 授权基本思路
策略(policy)表示访问指定服务的能力,当您为指定的角色(role)绑定指定策略后,该角色就具有访问指定服务的能力。当有第三方需要访问这个服务时,只需要扮演具有访问能力的角色即可。关于更多策略(policy)和角色(role)的内容请参见访问控制。
- 授权示例
- 函数计算访问阿里云其他产品
以函数计算访问日志服务为例,RAM提供系统授权策略
AliyunLogFullAccess。该策略具有对日志服务完全的操作权限。在配置服务权限时,您可以为该服务绑定一个角色(可以新建一个角色也可以使用已有角色)。然后将策略
AliyunLogFullAccess绑定到该角色上,这样函数计算就可以访问日志服务了。
- 事件源访问函数计算
以OSS事件源触发函数计算代码执行为例,RAM提供系统授权策略
AliyunOSSEventNotificationRole。该策略具有OSS事件源触发函数计算代码执行的权限。在创建触发器时,您可以为触发器绑定一个角色(可以新建角色也可以使用已有角色)。然后将策略
AliyunOSSEventNotificationRole绑定到该角色上,这样OSS事件源就可以触发函数计算代码执行了。
- RAM子账号访问函数计算
以授予RAM子账号对函数计算中所有资源读权限为例,函数计算提供系统授权策略AliyunFCReadOnlyAccess。在创建RAM子账号后,您可以为该子账号绑定一个角色(可以新建角色也可以使用已有角色)。然后将策略AliyunFCReadOnlyAccess绑定到该角色上,这样该子账号就可以访问函数计算中的所有资源了。
- 函数计算访问阿里云其他产品