本文介绍函数计算中权限的应用场景、类型以及管理机制。

应用场景

使用函数计算构建应用时,会涉及各种权限。例如:

  • 当您想使用阿里云日志服务(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操作(Action)
      接口名称 描述 Action
      ListServices 获取服务列表。 fc:ListServices
      GetService 获取指定服务。 fc:CreateService
      CreateService 新建一个服务。 fc:GetService
      UpdateService 更新指定服务。 fc:UpdateService
      DeleteService 删除指定服务。 fc:DeleteService
      ListFunctions 获取服务下的函数列表。 fc:ListFunctions
      GetFunction 获取指定函数的配置信息。 fc:GetFunction
      CreateFunction 新建一个新函数。 fc:CreateFunction
      UpdateFunction 更新函数,包括配置和代码。 fc:UpdateFunction
      DeleteFunction 删除指定的函数。 fc:DeleteFunction
      InvokeFunction 触发函数,分为同步和异步触发。 fc:InvokeFunction
      ListTriggers 获取函数下的触发器列表。 fc:ListTriggers
      GetTrigger 获取指定触发器。 fc:GetTrigger
      UpdateTrigger 更新指定函数触发器配置。 fc:UpdateTrigger
      DeleteTrigger 删除指定函数的触发器。 fc:DeleteTrigger
    • 函数计算RAM资源
      资源 描述
      acs:fc:<region>:<account-id>:services/<serviceName> 特定服务资源。
      acs:fc:<region>:<account-id>:services/* 所有服务资源。
      acs:fc:<region>:<account-id>:services/<serviceName>.<qualifier> 特定版本的服务资源。
      acs:fc:<region>:<account-id>:services/<serviceName>.* 特定服务的所有版本资源。
      acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName> 特定服务下的特定函数资源。
      acs:fc:<region>:<account-id>:services/<serviceName>/functions/* 特定服务下的所有函数资源。
      acs:fc:<region>:<account-id>:services/<serviceName>.*/functions/* 特定服务的所有版本下的所有函数资源。
      acs:fc:<region>:<account-id>:services/<serviceName>.<qualifier>/functions/* 特定服务的指定版本下的所有函数资源。
      acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/triggers/<triggerName> 特定服务下的特定函数下的特定触发器资源。
      acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/triggers/* 特定服务下的特定函数下的所有触发器资源。
    • 函数计算系统权限策略

      函数计算默认提供三个系统策略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"
                }
            ]
        }

权限管理机制

访问控制服务RAM(Resource Access Management)是阿里云提供的资源访问控制服务。函数计算使用RAM基于角色的权限管理机制。

  • 授权基本思路

    策略(policy)表示访问指定服务的能力,当您为指定的角色(role)绑定指定策略后,该角色就具有访问指定服务的能力。当有第三方需要访问这个服务时,只需要扮演具有访问能力的角色即可。关于更多策略(policy)和角色(role)的内容请参见访问控制

  • 授权示例
    • 函数计算访问阿里云其他产品
      以函数计算访问日志服务为例,RAM提供系统授权策略 AliyunLogFullAccess。该策略具有对日志服务完全的操作权限。在配置服务权限时,您可以为该服务绑定一个角色(可以新建一个角色也可以使用已有角色)。然后将策略 AliyunLogFullAccess绑定到该角色上,这样函数计算就可以访问日志服务了。 服务角色
    • 事件源访问函数计算
      以OSS事件源触发函数计算代码执行为例,RAM提供系统授权策略 AliyunOSSEventNotificationRole。该策略具有OSS事件源触发函数计算代码执行的权限。在创建触发器时,您可以为触发器绑定一个角色(可以新建角色也可以使用已有角色)。然后将策略 AliyunOSSEventNotificationRole绑定到该角色上,这样OSS事件源就可以触发函数计算代码执行了。 trigger-authorize
    • RAM子账号访问函数计算

      以授予RAM子账号对函数计算中所有资源读权限为例,函数计算提供系统授权策略AliyunFCReadOnlyAccess。在创建RAM子账号后,您可以为该子账号绑定一个角色(可以新建角色也可以使用已有角色)。然后将策略AliyunFCReadOnlyAccess绑定到该角色上,这样该子账号就可以对读函数计算中的所有资源了。