默认情况下,只有项目所有者和编辑者可以创建、更新、删除或调用服务和作业;只有项目所有者和 Cloud Run 管理员可以修改 Identity and Access Management (IAM) 政策(例如公开服务)。如需了解详情,请参阅 Cloud Run IAM 角色。
如需向其他主账号或群组授予执行这些操作的权限,请使用 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 按服务或作业控制访问权限。
使某个服务可供公开访问
此选项适用于用作公共 API 或网站的 Cloud Run 服务。
您可以允许在未通过身份验证的情况下调用服务,方法是为 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
如需创建 Cloud Run 服务,请将以下内容添加到现有 main.tf
文件中:
如需针对 roles/run.invoker
更新服务 IAM 绑定,请添加引用 Cloud Run 服务的以下资源:
此绑定仅针对给定角色授权。服务 IAM 政策中的其他 IAM 绑定均会予以保留。
网域限定共享
默认情况下,如果项目受组织政策中网域限定共享限制的约束,您将无法创建公共服务。您可以使用标记和条件政策来避免特定服务受到此限制条件的约束。如需了解详情,请参阅关于在实施网域限定共享时创建公共 Cloud Run 服务的博文。
添加主账号
您可以向作业或服务添加主账号。
向服务添加主账号
如需向服务添加主账号,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要向其添加主账号的服务旁边的复选框。(请勿点击服务本身。)
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
点击添加主账号。
在新的主账号字段中,输入需要访问服务的一个或多个身份。
从“角色”下拉菜单中,选择一个或多个角色。您选择的角色会显示在窗格中,其中包含角色授予的权限的简短说明。
点击保存。
gcloud
使用 gcloud run services add-iam-policy-binding
命令:
gcloud run services add-iam-policy-binding SERVICE_NAME \ --member=MEMBER_TYPE \ --role=ROLE
其中,SERVICE_NAME
是服务名称,MEMBER_TYPE
是主账号类型(例如 user:email@domain.com
),ROLE
是角色。
如需查看 MEMBER_TYPE
可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE
可接受的值列表,请参阅 Cloud Run IAM 角色。
向作业添加主账号
如需向作业添加主账号,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
点击添加主账号。
在新的主账号文本框中,输入需要访问您作业的一个或多个身份。
从“角色”下拉菜单中,选择一个或多个角色。您选择的角色将显示在窗格中,其中包含角色授予的权限的简短说明。
点击保存。
gcloud
使用 gcloud run jobs add-iam-policy-binding
命令:
gcloud run jobs add-iam-policy-binding JOB_NAME \ --member=MEMBER_TYPE \ --role=ROLE
其中,JOB_NAME
是作业名称,MEMBER_TYPE
是主账号类型(例如 user:email@domain.com
),ROLE
是角色。
如需查看 MEMBER_TYPE
可接受的值列表,请参阅 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=MEMBER_TYPE \ --role=ROLE
其中,SERVICE_NAME
是服务名称,MEMBER_TYPE
是主账号类型(例如 user:email@domain.com
),ROLE
是角色。
如需查看 MEMBER_TYPE
可接受的值列表,请参阅 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=MEMBER_TYPE \ --role=ROLE
其中,JOB_NAME
是作业名称,MEMBER_TYPE
是主账号类型(例如 user:email@domain.com
),ROLE
是角色。
如需查看 MEMBER_TYPE
可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE
可接受的值列表,请参阅 Cloud Run IAM 角色。
批量添加或移除主账号
您可以对服务和作业执行批量添加或移除操作。
批量添加和移除服务的主账号
如需为服务批量添加或移除服务,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要添加或移除主账号的服务左侧的复选框。(请勿点击服务本身。)
选择要添加或移除主账号的服务。
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
如果要添加主账号,请执行以下操作:
点击添加主账号。
在新的主账号文本框中,输入需要访问您服务的一个或多个身份。
从“角色”下拉菜单中,选择一个或多个角色。您选择的角色将显示在窗格中,其中包含角色授予的权限的简短说明。
点击保存。
如果要移除主账号,请执行以下操作:
在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。
点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。
在确认对话框中,您可以选择从该服务的所有角色中移除该主账号。点击移除,从角色中移除主账号。
gcloud
创建 IAM 政策:
cat <<EOF > policy.json { "bindings": [ { "role": ROLE, "members": [ MEMBER_TYPE ] } ] } EOF
使用 gcloud run services set-iam-policy
命令:
gcloud run services set-iam-policy SERVICE_NAME policy.json
如需查看 MEMBER_TYPE
可接受的值列表,请参阅 IAM 概念页面。如需查看 ROLE
可接受的值列表,请参阅 Cloud Run IAM 角色。
批量添加和移除作业的主账号
如需针对作业执行批量添加或移除操作,请执行以下操作:
控制台界面
前往 Google Cloud 控制台:
点击要向其添加主账号的作业左侧的复选框。(请勿点击作业本身。)
选择要添加或移除主账号的作业。
在右上角的信息窗格中,点击权限标签页。如果未显示信息窗格,您可能需要点击显示信息面板,然后点击权限。
如果要添加主账号,请执行以下操作:
点击添加主账号。
在新的主账号文本框中,输入需要访问您服务的一个或多个身份。
从“角色”下拉菜单中,选择一个或多个角色。您选择的角色将显示在窗格中,其中包含角色授予的权限的简短说明。
点击保存。
如果要移除主账号,请执行以下操作:
在角色列表过滤条件中输入要移除的主账号,即会显示授予该主账号的所有角色。
点击所需角色中主账号旁边的删除垃圾桶,以从主账号中移除该角色。
在确认对话框中,您可以选择从该作业的所有角色中移除该主账号。点击移除,从角色中移除主账号。
gcloud
创建 IAM 政策:
cat <<EOF > policy.json { "bindings": [ { "role": ROLE, "members": [ MEMBER_TYPE ] } ] } EOF
使用 gcloud run jobs set-iam-policy
命令:
gcloud run jobs set-iam-policy JOB_NAME policy.json
如需查看 MEMBER_TYPE
可接受的值列表,请参阅 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=MEMBER_TYPE \ --role=ROLE
其中,MEMBER_TYPE
是主账号类型(例如 user:email@domain.com
),ROLE
是角色(例如 roles/run.admin
)。
allUsers
和 allAuthenticatedUsers
主账号类型不能应用于项目级层,必须单独添加到每项服务。
为服务停用 Cloud Run Invoker
您可以为任何 Cloud Run 服务停用或重新启用 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 检查
根据需要在组织或项目级层替换组织政策限制条件
constraints/run.requireInvokerIam
。您可以使用标记为特定 Cloud Run 服务设置更精细的规则。如需从 Google Cloud 控制台中移除政策限制条件,请执行以下操作:
点击组织政策标签页。
找到 Allow Invoker IAM Disabled (Cloud Run) 政策,然后从“操作”菜单中选择修改政策。
确保将该政策配置为未实施。
点击设置政策。
停用检查:
控制台
如果您要配置新服务,请点击创建服务,然后根据需要填写初始服务设置页面。如果您要配置现有服务,请点击该服务,然后点击安全性。
清除使用 Cloud IAM 对传入请求进行身份验证。
点击创建或保存。
gcloud
使用
--no-invoker-iam-check
标志:gcloud run deploy 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 检查
如需重新启用检查,请执行以下操作:
控制台
点击相应服务,然后点击安全性。
选择使用 Cloud IAM 对传入请求进行身份验证。
点击保存。
gcloud
通过传递
--invoker-iam-check
标志来更新服务:gcloud beta run services SERVICE_NAME --invoker-iam-check
其中,
SERVICE_NAME
是服务名称。
YAML
如需查看和下载配置,请运行以下命令:
gcloud run services describe SERVICE --format export > service.yaml
更新
run.googleapis.com/invokerIamCheckDisabled:
注释:apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/invokerIamCheckDisabled: false name: SERVICE_NAME
其中,SERVICE_NAME 是 Cloud Run 服务的名称。
前往服务的 HTTPS 端点,验证检查是否已在部署后重新启用。
后续步骤
了解如何以安全的方式向您刚刚添加保护措施的服务对开发者、服务和用户进行身份验证。