全部产品
云市场

权限简介

更新时间:2019-06-20 10:13:05

访问控制服务 RAM (Resource Access Management) 是阿里云提供的资源访问控制服务。

在使用函数计算构建应用时,通常您需要管理各种权限。具体如下:

  • 当您想使用阿里云日志服务(SLS)收集函数运行日志时,您需要授权函数计算能将函数运行日志写入到您指定的日志库中。
  • 当您想使用阿里云对象存储服务(OSS) 触发器时,您需要授权 OSS 调用函数的权限。
  • 当您的函数需要访问账户中的阿里云资源时,例如 OSS 中的数据,您可以创建 RAM 角色并授予相关权限。函数计算在执行函数时将扮演该角色,代表您执行函数。

函数计算使用 RAM 基于角色的权限管理机制。授权的基本思想如下:策略(policy)表示访问某个服务的能力,为 角色(role)绑定指定策略,那么角色就具有了访问该服务的能力。当有第三方需要访问这个服务的时候,只需要扮演具有访问能力的角色即可。

权限的类型

在对阿里云产品进行访问时, 需要拥有对该产品的访问权限。函数计算涉及的权限主要有两种:

  • 函数计算访问阿里云其他产品,需要授予函数计算访问其他产品的权限。
  • 事件源触发函数的执行,需要授权事件源来访问函数计算的权限。

这个是两个层面的授权,第一个是 service 层面的角色授权,第二个是 trigger 层面的角色授权,下面我们分别对两种权限进行介绍。

服务角色

service 层的角色授权:是授予函数计算访问其他服务的权限,在函数计算里,执行策略是赋予函数计算本身,角色设置在 service 这层,同一 service 下的所有函数都继承该角色的执行策略。以函数计算访问日志服务为例

  • RAM 提供系统授权策略 AliyunLogFullAccess 具有对日志服务完全的操作权限。
  • 在创建 service 时,为 service 绑定一个角色(可以新建一个角色也可以使用已有角色)
  • 将策略 AliyunLogFullAccess 绑定到该角色上这样函数计算就可以访问日志服务了。

service-role

配置方式

下面展示如何为函数计算的服务配置角色。为服务配置服务角色是在创建服务时/更新服务时。

控制台示例(推荐

创建服务时,为服务添加角色示例:创建服务授权

更新服务时,为服务添加角色示例:更新服务时授权更新服务授权

Fun 示例(推荐

Fun 主要是通过服务下的 Role 与 Policy 属性对角色权限进行配置。更多信息请参考

Role 与 Policy 不可以同时使用。

Role 的含义是直接为服务指定角色,而 Policy 的含义是让 Fun 创建默认的角色,而用户只需要指定 Policy 即可。

下面是一个使用 Role 的例子:

  1. ROSTemplateFormatVersion: '2015-09-01'
  2. Transform: 'Aliyun::Serverless-2018-04-03'
  3. Resources:
  4. MyService: # service name
  5. Type: 'Aliyun::Serverless::Service'
  6. Properties:
  7. Role: acs:ram::12345:role/user-created-role

使用 Role 属性的前提条件是,该角色必须已经存在,并且用户已经手动为该角色分配了相应的策略。

如果角色使用 Role 的方式繁琐,那么可以直接使用 Policy 属性。

Policy 可以指定一个或多个策略:

  1. ROSTemplateFormatVersion: '2015-09-01'
  2. Transform: 'Aliyun::Serverless-2018-04-03'
  3. Resources:
  4. MyService: # service name
  5. Type: 'Aliyun::Serverless::Service'
  6. Properties:
  7. Policies:
  8. - AliyunFCReadOnlyAccess

还支持直接定义策略:

  1. ROSTemplateFormatVersion: '2015-09-01'
  2. Transform: 'Aliyun::Serverless-2018-04-03'
  3. Resources:
  4. MyService: # service name
  5. Type: 'Aliyun::Serverless::Service'
  6. Properties:
  7. Policies:
  8. - AliyunFCReadOnlyAccess
  9. - Version: '1' # Policy Document
  10. Statement:
  11. - Effect: Allow
  12. Action:
  13. - oss:Get*
  14. - oss:List*
  15. Resource: '*'
fcli 示例
  1. // 创建一个 RAM 角色:fc-service-role
  2. mksr fc-service-role
  3. // 创建一个可以读取和写入 OSS 的策略:fc-oss-gp。
  4. mkrp fc-oss-gp -a '["oss:GetObject", "oss:PutObject"]' -r '"*"'
  5. // 将 fc-oss-gp 策略赋予角色 fc-service-role,这样角色 fc-service-role 就能读写 OSS 上的资源了。
  6. attach -p /ram/policies/fc-oss-gp -r /ram/roles/fc-service-role
  7. // 创建 oss_demo 服务,并把 fc-service-role 作为其服务角色,oss_demo 服务下所有的函数都能扮演角色 fc-service-role 对 OSS 上资源进行读取或者写入。
  8. mks oss_demo -r acs:ram::12345:role/fc-service-role

最后一条命令中的 12345 改成自己阿里云的 Account ID。

触发器角色

trigger 层的授权:是授权给某个产品的事件源可以触发函数计算执行代码的权限, 是授权给其他的产品,例如使用 OSS 触发器,需要授权 OSS 事件源触发函数计算执行的权限,这样当有对象上传/删除时,才可以触发函数执行。

当用户建立触发器的时候,需要配置一个角色,当事件源被触发的时候,使用该角色来执行函数。

配置角色

下面展示如何为触发器配置角色。trigger-role

控制台示例

创建触发器时配置角色

创建触发器时配置角色

fcli 示例
  1. // 创建触发器
  2. mkt testTrigger -t oss -r acs:ram::12345:role/AliyunOSSEventNotificationRole -s acs:oss:cn-shanghai:12345:bucketName -c ossTrigger.yaml

命令中的 12345 改成自己阿里云的 Account ID。

ossTrigger.yaml 的内容

  1. triggerConfig:
  2. events:
  3. - oss:ObjectCreated:PostObject
  4. - oss:ObjectCreated:PutObject
  5. filter:
  6. key:
  7. prefix: source/

您在使用过程中遇到任何问题,都可以 联系我们