默认情况下,只有项目所有者和编辑者可以创建、更新、删除或调用服务和作业;只有项目所有者和 Cloud Run 管理员可以修改 Identity and Access Management (IAM) 政策(例如公开服务)。如需了解详情,请参阅 Cloud Run IAM 角色。
如需向其他主账号或群组授予执行这些操作的权限,请使用 IAM 为不同主账号授予角色。
如果您使用 gcloud functions
命令或 Cloud Functions v2 API 创建或部署了函数,并且需要使用这些选项以实现向后兼容性,请参阅使用 IAM 进行访问权限控制。
Cloud Run 预定义角色
与基本角色(Owner、Editor 和 Viewer)相比,以下预定义角色具有用于访问 Cloud Run 资源的更精细的访问权限控制:
角色 | 说明 |
---|---|
Cloud Run Admin (roles/run.admin ) |
可以创建、更新和删除服务和作业,可以获取、列出、删除作业执行。 可以调用服务和作业,可以取消作业执行。 可以获取和设置 IAM 政策。 可以查看、应用和忽略建议。 需要额外配置才能部署服务。 |
Cloud Run Developer (roles/run.developer ) |
可以创建、更新和删除服务和作业,可以获取、列出、删除作业执行。 可以获取,但不能设置 IAM 政策。 可以查看、应用和忽略建议。 |
Cloud Run Viewer (roles/run.viewer ) |
可以查看服务、作业和作业执行。 可以获取 IAM 政策。 可以查看建议。 |
Cloud Run Invoker (roles/run.invoker ) |
可以调用服务和作业,可以取消作业执行。 |
控制对个别服务或作业的访问权限
您可以使用 IAM 按服务或作业控制访问权限。
添加主账号
您可以向作业或服务添加主账号。
向服务添加主账号
如需向服务添加主账号,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要向其添加主账号的服务旁边的复选框。(请勿点击服务本身。)
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
点击添加主账号。
在新的主账号字段中,输入需要访问服务的一个或多个身份。
从“角色”下拉菜单中,选择一个或多个角色。您选择的角色会显示在窗格中,其中包含角色授予的权限的简短说明。
点击保存。
gcloud
使用 gcloud run services add-iam-policy-binding
命令:
gcloud run services add-iam-policy-binding SERVICE_NAME \ --member=PRINCIPAL \ --role=ROLE
其中,SERVICE_NAME
是服务名称,PRINCIPAL
是主账号(例如 user:[email protected]
),ROLE
是角色。
如需查看 PRINCIPAL
的可接受值列表,请参阅主账号标识符。如需查看 ROLE
可接受的值列表,请参阅 Cloud Run IAM 角色。
向作业添加主账号
如需向作业添加主账号,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
点击添加主账号。
在新主账号字段中,输入需要访问您作业的一个或多个身份。
从角色菜单中,选择一个或多个角色。您选择的角色将显示在窗格中,其中包含角色授予的权限的简短说明。
点击保存。
gcloud
使用 gcloud run jobs add-iam-policy-binding
命令:
gcloud run jobs add-iam-policy-binding JOB_NAME \ --member=PRINCIPAL \ --role=ROLE
其中,JOB_NAME
是作业名称,PRINCIPAL
是主账号类型(例如 user:[email protected]
),ROLE
是角色。
如需查看 PRINCIPAL
可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE
可接受的值列表,请参阅 Cloud Run IAM 角色。
从角色中移除主账号
您可以从服务或作业中移除主账号。
从服务的角色中移除主账号
如需从服务的角色中移除主账号,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要从中移除主账号的服务左侧的复选框。(请勿点击服务本身。)
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。
点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。
在确认对话框中,您可以选择从该服务的所有角色中移除该主账号。点击移除,从角色中移除主账号。
gcloud
使用 gcloud run services remove-iam-policy-binding
命令:
gcloud run services remove-iam-policy-binding SERVICE_NAME \ --member=PRINCIPAL \ --role=ROLE
其中,SERVICE_NAME
是服务名称,PRINCIPAL
是主账号类型(例如 user:[email protected]
),ROLE
是角色。
如需查看 PRINCIPAL
可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE
可接受的值列表,请参阅 Cloud Run IAM 角色。
从作业的角色中移除主账号
如需从作业的角色中移除主账号,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。
点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。
在确认对话框中,您可以选择从该作业的所有角色中移除该主账号。点击移除,从角色中移除主账号。
gcloud
使用 gcloud run jobs remove-iam-policy-binding
命令:
gcloud run jobs remove-iam-policy-binding JOB_NAME \ --member=PRINCIPAL \ --role=ROLE
其中,JOB_NAME
是作业名称,PRINCIPAL
是主账号类型(例如 user:[email protected]
),ROLE
是角色。
如需查看 PRINCIPAL
可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE
可接受的值列表,请参阅 Cloud Run IAM 角色。
批量添加或移除主账号
您可以对服务和作业执行批量添加或移除操作。
批量添加和移除服务的主账号
如需为服务批量添加或移除服务,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要添加或移除主账号的服务左侧的复选框。(请勿点击服务本身。)
选择要添加或移除主账号的服务。
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
如果要添加主账号,请执行以下操作:
点击添加主账号。
在新的主账号字段中,输入需要访问服务的一个或多个身份。
从角色菜单中,选择一个或多个角色。您选择的角色将显示在窗格中,其中包含角色授予的权限的简短说明。
点击保存。
如果要移除主账号,请执行以下操作:
在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。
点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。
在确认对话框中,您可以选择从该服务的所有角色中移除该主账号。点击移除,从角色中移除主账号。
gcloud
创建 IAM 政策:
cat <<EOF > policy.json { "bindings": [ { "role": ROLE, "members": [ PRINCIPAL ] } ] } EOF
使用 gcloud run services set-iam-policy
命令:
gcloud run services set-iam-policy SERVICE_NAME policy.json
如需查看 PRINCIPAL
可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE
可接受的值列表,请参阅 Cloud Run IAM 角色。
批量添加和移除作业的主账号
如需针对作业执行批量添加或移除操作,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)
选择要添加或移除主账号的作业。
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
如果要添加主账号,请执行以下操作:
点击添加主账号。
在新的主账号字段中,输入需要访问服务的一个或多个身份。
从角色菜单中,选择一个或多个角色。您选择的角色将显示在窗格中,其中包含角色授予的权限的简短说明。
点击保存。
如果要移除主账号,请执行以下操作:
在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。
点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。
在确认对话框中,您可以选择从该作业的所有角色中移除该主账号。点击移除,从角色中移除主账号。
gcloud
创建 IAM 政策:
cat <<EOF > policy.json { "bindings": [ { "role": ROLE, "members": [ PRINCIPAL ] } ] } EOF
使用 gcloud run jobs set-iam-policy
命令:
gcloud run jobs set-iam-policy JOB_NAME policy.json
如需查看 PRINCIPAL
可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE
可接受的值列表,请参阅 Cloud Run IAM 角色。
查看主账号
您可以查看服务和作业的主账号。
查看服务的主账号
如需查看服务的主账号,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要查看其主账号和角色的服务左侧的复选框。(请勿点击服务本身。)
选择要查看主账号和角色的服务。
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
此时将显示角色和主账号列表,并按授予的角色进行分组。
gcloud
使用 gcloud run services get-iam-policy
命令:
gcloud run services get-iam-policy SERVICE_NAME
查看作业的主账号
如需查看作业的主账号,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)
选择要查看主账号和角色的作业。
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
此时将显示角色和主账号列表,并按授予的角色进行分组。
gcloud
使用 gcloud run jobs get-iam-policy
命令:
gcloud run jobs get-iam-policy JOB_NAME
控制对项目中所有服务和作业的访问权限
如果您想要针对项目中的所有服务和作业向主账号授予角色,可以使用项目级 IAM。
控制台界面
前往 Google Cloud 控制台:
找到您要授予项目级层角色的主账号。
点击该主账号所在行右侧的修改按钮(铅笔图标)。
点击添加其他角色,然后选择所需的角色。
点击保存。
gcloud
使用 gcloud projects add-iam-policy-binding
命令:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
其中,PRINCIPAL
是主账号(例如 user:[email protected]
),ROLE
是角色(例如 roles/run.admin
)。
allUsers
和 allAuthenticatedUsers
主账号类型不能应用于项目级层,必须单独添加到每项服务。
使某个服务可供公开访问
此选项适用于用作公共 API 或网站的 Cloud Run 服务。
您可以通过以下两种方式创建公共 Cloud Run 服务:
停用 Cloud Run Invoker IAM 检查
如需将服务设为公开服务,建议停用 Cloud Run Invoker IAM 检查。默认情况下,系统会强制执行该检查。如果项目受组织政策中网域限定共享限制的约束,此解决方案尤为适用。
如需为服务停用或重新启用 Invoker IAM 检查,您必须拥有以下权限:
run.services.create
run.services.update
run.services.setIamPolicy
Owner 和 Cloud Run Admin 角色均可提供这些权限。如需查看角色及其关联权限的完整列表,请参阅 Cloud Run IAM 角色。
停用 Cloud Run Invoker IAM 检查
如需停用此检查,请执行以下操作:
控制台
如果您要配置新服务,请点击创建服务,然后根据需要填写初始服务设置页面。如果您要配置现有服务,请点击该服务,然后点击安全性。
清除使用 IAM 对传入请求进行身份验证。
点击创建或保存。
gcloud
对于新服务,请使用带有
--no-invoker-iam-check
标志的gcloud run deploy
命令:gcloud run deploy SERVICE_NAME --no-invoker-iam-check
其中,
SERVICE_NAME
是服务名称。对于现有服务,请使用带有
--no-invoker-iam-check
标志的gcloud run services update
命令:gcloud run services update SERVICE_NAME --no-invoker-iam-check
其中,
SERVICE_NAME
是服务名称。
YAML
如需查看和下载配置,请运行以下命令:
gcloud run services describe SERVICE --format export > service.yaml
更新
run.googleapis.com/invoker-iam-disabled:
注释:apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/invoker-iam-disabled: true name: SERVICE_NAME
其中,SERVICE_NAME 是您的 Cloud Run 服务的名称。
使用以下命令将服务的配置替换为新配置:
gcloud run services replace service.yaml
前往服务的 HTTPS 端点,验证检查是否已在部署后停用。
重新启用 Cloud Run Invoker IAM 检查
如需重新启用检查,请执行以下操作:
控制台
点击相应服务,然后点击安全性。
选择使用 IAM 对传入请求进行身份验证。
点击保存。
gcloud
通过传递
--invoker-iam-check
标志来更新服务:gcloud run services update SERVICE_NAME --invoker-iam-check
其中,
SERVICE_NAME
是服务名称。
YAML
如需查看和下载配置,请运行以下命令:
gcloud run services describe SERVICE --format export > service.yaml
更新
run.googleapis.com/invoker-iam-disabled:
注释:apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/invoker-iam-disabled: false name: SERVICE_NAME
其中,SERVICE_NAME 是 Cloud Run 服务的名称。
前往服务的 HTTPS 端点,验证检查是否已在部署后重新启用。
为 Cloud Run 调用方 IAM 检查配置组织政策
如果您是管理员,则可以使用 constraints/run.managed.requireInvokerIam
受管限制来限制停用调用方 IAM 检查的权限。默认情况下,系统不会强制执行此限制条件。
将 Cloud Run IAM 调用者角色分配给 allUsers
成员类型
您可以允许在未通过身份验证的情况下调用服务,方法是为 allUsers
成员类型分配 Cloud Run IAM Invoker 角色。
您必须具有 run.services.setIamPolicy
权限才能在 Cloud Run 服务上配置身份验证。Owner 和 Cloud Run Admin 角色均拥有这项权限。如需查看角色及其关联权限的完整列表,请参阅 Cloud Run IAM 角色。
控制台界面
对于现有 Cloud Run 服务:
前往 Google Cloud 控制台:
点击要公开的服务左侧的复选框。(请勿点击服务本身。)
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
点击添加主账号。
在新的主账号字段中,输入值 allUsers
从“角色”下拉菜单中,选择 Cloud Run Invoker 角色。
点击保存。
系统会提示您确认是否要公开此资源。点击允许公开访问将更改应用到服务的 IAM 设置。
若要创建新服务,请点击创建服务,但务必选中身份验证标签页中的允许未通过身份验证的调用复选框,以使该服务可供公开访问。如果选择需要身份验证,则会将服务设为不公开。
gcloud
如需使服务可公开访问,请使用 gcloud run services
命令向服务添加特殊 allUsers
成员类型并向其授予 roles/run.invoker
角色:
gcloud run services add-iam-policy-binding [SERVICE_NAME] \ --member="allUsers" \ --role="roles/run.invoker"
运行 gcloud run deploy
命令以在部署服务时使服务可公开访问:
gcloud run deploy [SERVICE_NAME] ... --allow-unauthenticated
YAML
创建一个名为 policy.yaml
的文件,其中包含以下内容:
bindings:
- members:
- allUsers
role: roles/run.invoker
使用以下命令允许对现有 SERVICE 进行未经身份验证的调用:
gcloud run services set-iam-policy SERVICE policy.yaml
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
将以下内容添加到 Terraform 配置中的google_cloud_run_v2_service
资源:如需针对 roles/run.invoker
更新服务 IAM 绑定,请添加引用 Cloud Run 服务的以下资源:
此绑定仅针对给定角色授权。服务 IAM 政策中的其他 IAM 绑定均会予以保留。
对服务使用 IAM 条件
您可以使用 IAM Conditions 为 Cloud Run 资源定义和强制执行基于属性的条件访问权限控制。Cloud Run 支持 (request.host
) 和 (request.path
) 条件属性,以便在调用 Cloud Run 服务时授予有条件的访问权限。
如需在调用 Cloud Run 服务时使用
request.host
和request.path
属性授予条件访问权限,请在运行以下命令时添加condition
字段:gcloud run services add-iam-policy-binding SERVICE_NAME \ --member=PRINCIPAL \ --role=ROLE \ --region=REGION \ --condition=[KEY=VALUE,...]
您需要进行如下替换:
- 将
SERVICE_NAME
替换为服务名称(例如my-service
)。 PRINCIPAL
与正文(例如user:[email protected]
)。- 具有相应角色的
ROLE
(例如roles/run.invoker
)。 - 将
REGION
替换为区域(例如us-central1
)。 - 包含要添加到绑定中的条件的
KEY=VALUE
。--condition
标志必须包含键值对expression
和title
。
- 将
后续步骤
了解如何以安全的方式向您刚刚添加保护措施的服务对开发者、服务和用户进行身份验证。