角色与授权

最近更新时间:2019-08-21 17:29:02

简介

角色(Role)是腾讯云 访问管理(Cloud Access Management,CAM)提供的拥有一组权限的虚拟身份,主要用于对角色载体授予腾讯云中服务、操作和资源的访问权限,这些权限附加到角色后,通过将角色赋予腾讯云的服务,允许服务代替用户完成对授权资源的操作。

角色和权限

云函数服务通过向用户申请两类角色及对应策略的授权,完成不同的角色创建、授权及使用。角色载体均为 产品服务-scf.qcloud.com,代表仅有云函数服务会使用此角色及角色上拥有的策略,完成相关操作。

  • 配置角色 SCF_QcsRole:您在创建云函数时,通过配置角色授予云函数运行时允许云函数服务对对应资源的操作权限。例如 COS 触发器创建和删除所需的 COS 权限,API 网关触发器创建和删除时的 API 网关权限,COS 代码文件 zip 包读取的权限等。
  • 运行角色 QCS_SCFExcuteRole:您在创建云函数时,通过运行角色授予云函数运行时允许代码对对应资源的操作权限。例如在您的代码中有对 COS 文件读写的操作,您可以通过在此角色中增加 COS 的读写权限,实现代码对 COS 文件的访问授权。

配置角色

配置角色用于授予云函数服务在配置过程中读取、操作用户资源的权限。用户在创建函数的过程中无需单独操作配置角色,配置角色在创建云函数时已经默认选择。

  • 角色名:SCF_QcsRole
  • 角色载体:产品服务-scf.qcloud.com
  • 角色描述:云函数默认配置角色。该服务角色用于提供云函数 SCF 配置对接其他云上资源的权限,包括但不限于代码文件访问、触发器配置。配置角色的预设策略可支持函数执行的基本操作。

此角色当前所拥有以下策略:

默认策略 策略类型 功能
QcloudCOSFullAccess 预设策略 对象存储(COS)全读写访问权限。
QcloudCOSBucketConfigWrite 预设策略 用于配置 COS 对象存储触发器时向 Bucket 配置中写入触发配置信息。
QcloudCOSBucketConfigRead 预设策略 用于读取 COS 对象存储 Bucket 中的触发器配置信息。
QcloudCOSDataReadOnly 预设策略 用于在使用 COS 对象存储更新代码时,从 Bucket 完成代码 zip 包的读取操作。
QcloudAPIGWFullAccess 预设策略 用于配置 API 网关触发器时,完成 API 网关的服务、API创建,以及服务发布等操作。
注意:

通过运行角色权限修改,可以查看当前配置角色默认关联的策略,用户可对关联策略“新增”或“移除”,但修改配置角色关联策略可能会带来云函数无法正常执行的问题,故不建议修改。

运行角色

运行角色用于授权函数代码在运行时有读取,操作资源。函数在创建时为用户提供了 “SCF 默认运行角色”,又称 “QCS_SCFExcuteRole”。

  • 默认角色名:QCS_SCFExcuteRole
  • 角色载体:产品服务-scf.qcloud.com
  • 角色描述:云函数默认操作角色,该服务角色用于提供云函数 SCF 运行时操作其他云上资源的基本权限

此角色当前所拥有以下策略:

默认策略 策略类型 功能
QcloudSCFFullAccess 预设策略 可以在代码运行时访问调用其他同账号下云函数。
QcloudCLSFullAccess 预设策略 用于在运行函数时向 CLS 日志服务中写入函数运行日志。

创建角色

您除了可以直接使用默认运行角色外,也可以自行创建运行角色。操作步骤如下:

  1. 打开访问管理控制台的 角色管理页面,选择【新建角色】。
  2. 在弹出的“选择角色载体”页面,单击【腾讯云产品服务】,以授权云服务通过角色使用您的云资源。
  3. 在支持角色的服务中选择【云函数】并单击【下一步】。
  4. 在“配置角色策略”页面选择您需要的策略并单击【下一步】。
  5. 输入“角色名称”、“角色描述”后单击【完成】即可创建完成新角色。

除此之外,您还可以在创建函数的流程中新建运行角色。设定角色载体为云函数并完成策略配置后,即可通过函数创建或修改配置时使用自定义角色。通过使用自定义角色,您可以更灵活且自主的控制函数代码在运行时获取的权限和操作的资源。

使用角色

使用配置角色

您在访问控制台时,如果云函数服务有访问对应资源的权限,会自动弹出请求授权页面。您可以通过单击确认授权,完成角色的自动创建以及向角色中增添默认授权。
如果您未通过控制台,而是通过命令行或 API 接口管理和配置云函数,在进行需授权的相关操作时会有错误返回。例如,在通过 COS Bucket 更新函数代码时,所使用的账号下没有名为 SCF_QcsRole 的角色或角色内无 QcloudCOSDataReadOnly 预设策略,将会导致此操作报错。您可以通过在使用的账号下自行添加名为 SCF_QcsRole 的角色,授权给 产品服务-scf.qcloud.com,并配置如上所列的预设策略,完成配置角色授权。

使用运行角色

当云函数服务在函数被触发执行时,运行角色会自动使用。根据 使用角色 的说明,云函数服务将在函数被触发运行时,通过在服务后台获取角色临时凭证的接口,获取到角色对应的临时凭证,并将临时凭证以环境变量的形式设置到云函数代码的运行环境中。在运行环境中设置的临时变量包括 TENCENTCLOUD_SECRETIDTENCENTCLOUD_SECRETKEYTENCENTCLOUD_SESSIONTOKEN。您可以通过 使用环境变量 的方式,根据环境变量 Key,读取到对应值。

临时凭证的环境变量说明如下:

环境变量 Key 环境变量 Value 示例 说明
TENCENTCLOUD_SECRETID AKIDRVI54XXn10r58oZpmzbBOnwt47xO1LRv 作为 API 请求时的 SecretId
TENCENTCLOUD_SECRETKEY 3t0SYPHRIpjmAAUPfKM8b4yXnff4Aq56 作为 API 请求时的 SecretKey
TENCENTCLOUD_SESSIONTOKEN 289986df622a1fdbe0d29ee2b642c904d8d670df40001 作为 API 请求时的 Token

例如,在使用对象存储 COS 的 Python 代码中环境变量。示例如下:

# -*- coding=utf-8
from qcloud_cos_v5 import CosConfig
from qcloud_cos_v5 import CosS3Client
import sys
import logging
import os

logging.basicConfig(level=logging.INFO, stream=sys.stdout)

# 1. 设置用户配置, 包括 secretId,secretKey 等
secret_id = os.environ.get('TENCENTCLOUD_SECRETID')      # 使用环境变量中的 secretId
secret_key = os.environ.get('TENCENTCLOUD_SECRETKEY')    # 使用环境变量中的 secretKey
region = 'ap-beijing-1'     
token = os.environ.get('TENCENTCLOUD_SESSIONTOKEN')      # 使用环境变量中的 token 作为使用临时密钥时需要传入 token
scheme = 'https'          
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)

# 2. 获取客户端对象
client = CosS3Client(config)