使用 IAM 进行访问权限控制
本页面提供了有关使用 Identity and Access Management (IAM) 角色在项目级设置访问权限控制的补充信息,以确定对您的 Google Cloud 项目以及使用 gcloud functions
命令或 Cloud Functions v2 API 创建的函数的访问权限级别。
如果您是使用 Cloud Run 创建或部署的函数,请参阅使用 IAM 控制访问权限和 Cloud Run 角色,详细了解 Cloud Run 预定义角色、如何控制对各个服务的访问权限、如何将服务设为公开或如何为 Cloud Run Invoker IAM 配置组织政策。
针对用户的访问权限控制
您可以将用户作为团队成员添加到项目中,然后使用 IAM 为他们授予角色。
Cloud Run functions 支持以下角色:
- Cloud Run 预定义角色(推荐)
- Cloud Functions 预定义角色
- 基本角色,包括 Editor、Owner 和 Viewer。
针对服务账号的访问权限控制
服务账号是一种特殊类型的Google Cloud 账号,充当需要验证身份并获得授权以访问数据并执行各项操作的非人类用户的身份。其中一些账号由 Google 本身创建和管理,称为服务代理。
以下服务账号用于 Cloud Run functions:
名称 | 成员 ID | 角色 |
---|---|---|
Compute Engine 默认服务账号 | PROJECT_NUMBER-compute@developer.gserviceaccount.com |
编辑者 |
Google Cloud Functions Service Agent | service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com |
Google Cloud Functions Service Agent |
旧版 Cloud Build 服务账号1 | PROJECT_NUMBER@cloudbuild.gserviceaccount.com |
Cloud Build 服务账号 |
Cloud Build Service Account | service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com |
Cloud Build Service Agent |
Google Container Registry Service Agent | service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com |
Container Registry Service Agent |
Artifact Registry Service Agent | service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com |
Artifact Registry Service Agent |
运行时服务账号
在运行时,Cloud Run 函数默认使用 Compute Engine 默认服务账号 (PROJECT_NUMBER-compute@developer.gserviceaccount.com
),该账号在项目中也具有 Editor 角色。您可以更改这些服务账号的角色,以限制或扩展正在运行的函数的权限。您还可以通过在配置服务身份时避免使用默认服务账号来更改使用的服务账号。
如需详细了解服务账号,请参阅服务账号文档。
管理服务账号
如需在创建、更新或删除函数期间对您的项目执行管理操作,Cloud Run functions 中的所有项目都需要 Google Cloud Functions Service Agent 服务账号 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
)。
此外,所有运行时都会在您的项目中执行容器映像构建和存储。为支持这一点,您还需要预配以下各项:
- 旧版 Cloud Build 服务账号1 (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
) - Cloud Build Service Agent 服务账号 (
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
) - Google Container Registry Service Agent 服务账号 (
service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com
)
这些服务账号应具有上表中列出的角色。
Google Cloud Functions Service Agent 服务账号
默认情况下,Google Cloud Functions Service Agent 服务账号 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) 对项目具有 cloudfunctions.serviceAgent 角色。
以下是 cloudfunctions.serviceAgent
使用的一些重要权限:
权限 | 说明 |
---|---|
roles/artifactregistry.admin |
管理存储库库并将构建映像存储在 Artifact Registry 中。 |
roles/cloudbuild.builds.editor |
使用 Cloud Build 在用户项目中执行构建时需要。 |
roles/cloudbuild.customworkers.builder |
在 Cloud Build 自定义工作器中创建构建。 |
compute.globalOperations.get ,compute.networks.access ,vpcaccess.connectors.{get, use} |
预配可访问使用方项目 VPC 的函数。 |
roles/eventarc.developer |
管理函数的 Eventarc 触发器。 |
firebasedatabase.instances.{get, update} |
创建由 Firebase 实时数据库触发的函数。 |
iam.serviceAccounts.{actAs, getAccessToken, signBlob} |
获取运行时服务账号凭据。 |
iam.serviceAccounts.getOpenIdToken |
代理获取用户指定机构的 OpenID 令牌时需要。OpenID 令牌用于调用 IAM 支持的函数。 |
pubsub.subscriptions |
管理用户项目中的订阅。 |
pubsub.topics |
管理用户项目中的主题。 |
roles/run.developer |
管理 Cloud Run 函数服务。 |
storage.buckets.create ,storage.objects.{delete, get, create, list} |
在用户项目中存储源代码时需要。 |
您可以在预定义的 IAM 角色下或运行以下命令来查看整组权限:
gcloud iam roles describe roles/cloudfunctions.serviceAgent
可将此服务账号重置为默认角色,方法是移除该账号所具有的所有角色,并添加 Cloud Functions Service Agent 角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \ --role roles/cloudfunctions.serviceAgent
排查权限错误
如果您在项目中部署、更新、删除或执行函数时发生权限错误,请执行以下步骤:
确保您在项目中拥有 Editor 或 Owner 角色,或您正在使用 Cloud Functions Developer 角色。
如果您使用的是项目级层的 Cloud Functions Developer 角色,还应确保向用户授予 IAM Service Account User角色。
目前,在每个函数级层仅允许执行权限。
验证 Cloud Functions Service Agent 服务账号 (
service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) 是否具有项目的 Cloud Functions Service Agent (cloudfunctions.serviceAgent
) 角色。确保勾选控制台 IAM 页面的权限标签页上的包括 Google 提供的角色授权框,以查看此账号。或者,您也可以使用
gcloud projects add-iam-policy-binding PROJECT_ID
。确保您拥有对触发器来源(例如 Pub/Sub 或 Cloud Storage)的权限。
如果您在运行函数时遇到“权限不足”错误或其他身份验证问题,请确保运行时服务账号拥有适当权限,可以访问函数所需的资源,然后按照第 2 步和第 3 步进行操作。
如果您在部署期间遇到“服务不可用”错误,请确保项目中存在运行时服务账号 PROJECT_ID@appspot.gserviceaccount.com
。如需重新创建这个已删除的服务账号,请参阅恢复删除的服务账号。
另请参阅排查 Cloud Run functions 问题。
1 Cloud Run functions 仅对在 2024 年 7 月之前创建的项目使用旧版 Cloud Build 服务账号。