可信云服务可以通过RAM角色扮演的方式访问其他云服务的资源。可信实体为阿里云服务的RAM角色,包括普通服务角色和服务关联角色。本文介绍函数计算的服务关联角色。
什么是服务关联角色
在某些场景下,函数计算为了完成自身的某个功能,需要获取其他云服务的访问权限,因此,函数计算创建了与云服务关联的角色,即服务关联角色AliyunServiceRoleForFC。函数计算3.0支持AliyunServiceRoleForFC和FaaS函数的绑定,实现最小授权范围内授予函数访问其他云服务的权限。
使用函数计算时,系统提供的服务关联角色及其包含的系统权限策略如下:
服务关联角色:AliyunServiceRoleForFC
系统权限策略:AliyunServiceRolePolicyForFC
AliyunServiceRoleForFC
服务关联角色AliyunServiceRoleForFC可以获取访问专有网络 VPC、云服务器 ECS、日志服务 SLS(Simple Log Service)和容器镜像服务等云资源的权限,以实现函数VPC互通、镜像下载、资源回收和日志导出等功能。
服务关联角色AliyunServiceRoleForFC被授予权限策略AliyunServiceRolePolicyForFC,该权限策略的内容如下。
{
"Version": "1",
"Statement": [
{
"Action": [
"vpc:DescribeVSwitchAttributes",
"vpc:DescribeVpcAttribute"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ecs:CreateNetworkInterface",
"ecs:DeleteNetworkInterface",
"ecs:DescribeNetworkInterfaces",
"ecs:CreateNetworkInterfacePermission",
"ecs:DeleteNetworkInterfacePermission",
"ecs:DescribeNetworkInterfacePermissions"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"cr:PullRepository",
"cr:GetArtifactTag",
"cr:GetAuthorizationToken",
"cr:GetRepository",
"cr:GetRepositoryTag",
"cr:GetRepoTagManifest",
"cr:GetRepositoryManifest",
"cr:GetInstanceVpcEndpoint",
"cr:GetInstance",
"cr:GetNamespace",
"cr:GetArtifactBuildRule",
"cr:CreateArtifactBuildTask"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"fc:InvokeFunction",
"eventbridge:PutEvents",
"mq:PUB",
"mq:OnsInstanceBaseInfo",
"mns:SendMessage",
"mns:PublishMessage",
"fnf:ReportTaskSucceeded",
"fnf:ReportTaskFailed"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"log:CreateProject",
"log:CreateLogStore",
"log:GetProject",
"log:GetLogStore",
"log:DeleteProject",
"log:DeleteLogStore",
"log:GetLogStoreLogs"
],
"Resource": [
"acs:log:*:*:project/aliyun-fc-*",
"acs:log:*:*:project/*/logstore/function-log*"
],
"Effect": "Allow"
},
{
"Action": [
"log:PostLogStoreLogs"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ram:GetRole"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": "ram:DeleteServiceLinkedRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"ram:ServiceName": "fc.aliyuncs.com"
}
}
}
]
}
以下是使用函数计算时,需要创建和使用服务关联角色的场景:
为函数计算配置专有网络VPC、交换机或弹性网卡等,提升数据安全性,实现VPC内的网络互通。
访问容器镜像仓库拉取镜像创建容器镜像函数,能够利用容器镜像资源灵活部署函数。
配置消息队列或事件总线等消息服务的访问权限,使用函数计算监听消息源的事件。当有新的消息或事件产生时,可以直接触发函数执行,实现事件驱动的计算模型。
配置日志服务相关权限,允许自动收集函数执行日志,便于日志的搜索、分析和可视化展示,帮助用户快速定位问题。
创建服务关联角色
登录函数计算3.0控制台时,系统会检查当前账号是否已有服务关联角色AliyunServiceRoleForFC,如果不存在则会弹出提示,在您确认授权自动创建服务关联角色AliyunServiceRoleForFC并授权AliyunServiceRolePolicyForFC后,系统自动创建AliyunServiceRoleForFC。
创建完成后,您可以在RAM控制台的角色管理页面、API或CLI调用ListRoles - 获取角色列表的返回结果中查看已创建的服务关联角色。您还可以登录函数计算3.0控制台,如果可以正常使用则表示已成功创建服务关联角色。
删除服务关联角色
您可以登录RAM控制台删除服务关联角色。删除后,将无法正常使用函数计算3.0控制台,请谨慎操作。
使用RAM管理员登录RAM控制台。
在左侧导航栏,选择 。
在角色页面,单击目标RAM角色操作列的删除角色。
在删除角色对话框,输入RAM角色名称,然后单击删除角色。
当您尝试删除一个服务关联角色时,RAM会先检查这个角色是否仍被云资源使用,如果被占用则会删除失败,可以根据删除失败的提示信息,查看哪些云资源在使用该角色。您需要找到对应的云资源并手动清理这些云资源,然后再删除该服务关联角色。
RAM用户使用服务关联角色需要的权限
如果使用RAM用户创建或删除服务关联角色,必须使用阿里云账号(主账号)为该RAM用户授予ram:CreateServiceLinkRole和ram:DeleteServiceLinkedRole权限,或直接授予AliyunRAMFullAccess权限。
以下示例为允许RAM用户为函数计算创建和删除服务关联角色的自定义权限策略示例。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ram:CreateServiceLinkedRole",
"ram:DeleteServiceLinkedRole"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"ram:ServiceName": "fc.aliyuncs.com"
}
}
}
]
}