服务关联角色

可信云服务可以通过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控制台,请谨慎操作。

  1. 使用RAM管理员登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 角色

  3. 角色页面,单击目标RAM角色操作列的删除角色

  4. 删除角色对话框,输入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"
                }
            }
        }
    ]
}