在使用函数计算提供的日志、VPC、异步调用目标服务等功能时,函数计算需要访问其他的云服务。例如配置函数日志时,用户需要授权函数计算对指定日志的Logstore的写入权限,才能够将函数日志写入Logstore。函数计算支持服务关联角色,用户授权后,创建的函数默认将使用服务关联角色,函数不需要配置角色即可使用日志、VPC、异步调用目标服务等功能。而用户代码逻辑如果需要访问其他云服务,或需要更细粒度的授权,可以选择使用函数角色来授权。
功能原理
函数计算根据函数配置的角色,通过AssumeRole获取一个临时密钥(STS Token)。然后通过上下文中的参数Credentials或credentials将临时密钥传递给您的函数。此临时密钥包含了您所配置的权限的所有资源,您可以在函数代码中使用其访问其他阿里云服务。
临时密钥的有效期为36小时,且不支持修改。函数的最大执行时间为24小时,因此,执行函数过程中,临时密钥不会过期。
不同的运行时,参数Credentials或credentials的位置不同,您可以点击以下链接访问对应的文档。需要强调的是,当您使用Custom Runtime或Custom Container的时候,临时密钥会被注入HTTP请求的Header中。
示例:授予函数计算访问OSS的权限
本文以授予函数计算访问对象存储OSS管理权限为例进行介绍。如果需要指定函数具有管理对象存储服务的权限,可以为该函数绑定一个角色,然后为此角色授予管理对象存储的权限。
前提条件
操作步骤
登录函数计算控制台,在左侧导航栏,单击函数。
在顶部菜单栏,选择地域,然后在函数页面,单击目标函数操作列的配置。
在函数详情页面,选择配置页签,然后在左侧导航栏选择权限,单击编辑,在编辑权限面板,单击创建角色跳转至RAM控制台,根据界面提示创建角色并为角色授予所需权限。
您也可以使用已有的角色,如果权限不足,单击编辑策略根据需要添加权限策略。具体操作,请参见为RAM角色授权。
在RAM控制台的角色页面,单击创建角色。
在选择类型页签,选择可信实体类型为阿里云服务,然后单击下一步。
在配置角色页签,选择普通服务角色,设置角色名称(本文示例为
mytestrole
),选择受信服务为函数计算,然后单击完成。在创建完成页签,单击为角色授权,然后单击目标角色右侧操作列的新增授权。
在授权页面,选择授权范围,授权主体默认为选择的目标角色,选择所需系统策略或自定义策略,单击添加到右侧已选择列表,然后单击确定。更多信息,请参见权限策略及示例。
整个云账号:权限在当前阿里云账号内生效。
指定资源组:权限在指定的资源组内生效。指定资源组授权生效的前提是该云服务已支持资源组。更多信息,请参见支持资源组的云服务。
本文示例为管理对象存储OSS,因此,您需要为新建角色增加系统策略AliyunOSSFullAccess。
为目标函数绑定上一步创建的新角色
mytestrole
。测试已绑定角色
mytestrole
的函数是否有管理OSS的权限。在函数列表,单击目标函数,然后选择代码页签,单击测试函数右侧的下拉列表,选择配置测试参数配置,测试参数示例如下。
{ "endpoint": "http://oss-cn-hangzhou.aliyuncs.com", "bucket": "web****", "objectName": "myObj", "message": "your-message" }
上述示例中,
bucket
需替换为与函数相同的地域下您已创建的bucket名称。在代码页签的代码编辑器中,编写代码,然后单击部署代码。
以Python标准运行时为例,您可以使用函数计算为您提供的临时密钥访问对象存储OSS。
import json import oss2 def handler(event, context): evt = json.loads(event) creds = context.credentials # 输入用户临时密钥,包括临时Token。 # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 # 建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 # 本示例以从上下文中获取AccessKey/AccessSecretKey为例。 auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token) bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket']) bucket.put_object(evt['objectName'], evt['message']) return 'success'
单击测试函数,执行成功后,登录对象存储OSS控制台,找到目标Bucket,您可以看到目标对象内容已替换为测试参数中
message
的内容。
相关文档
函数计算3.0支持使用服务关联角色最小化授权,关于服务关联角色的权限策略内容,请参见AliyunServiceRoleForFC。
关于如何为目标函数配置角色,请参见创建函数。