为即将到来的授权变更做好准备

Application Integration 正在更新集成授权方式。这些更改很快就会生效。大多数集成将继续运行,无需进行任何更改,而某些集成需要进行配置更改才能继续运行。本页面中介绍的所有内容都使用您已控制的配置,因此您可以立即进行这些更改。

即将进行的授权变更

Application Integration 正在更新其处理集成运行身份的方式。每个运行都必须具有明确的身份,充当以下角色之一:

  • 触发运行的用户。被调用的系统会应用相应用户的访问权限。
  • 以服务账号身份运行。您可以像控制 Google Cloud 项目中的任何其他服务账号一样,控制、限定和审核此账号。

在此次更新后:

  • 如需运行集成,您需要有权充当运行身份服务账号。
  • 如果这两个身份均不可用,则集成运行失败。

准备工作

按顺序完成以下任务。先执行第一个,因为其他两个都以发布结束,而发布本身会检查权限。

  1. 向运行、审批、修改或发布集成的人员(包括自动化使用的服务账号)授予您已使用的每个 run-as 服务账号的“Service Account User”权限。
  2. 无人值守且没有运行身份的服务账号的集成设置运行身份的服务账号
  3. 为类型为服务账号OIDC 令牌的每个身份验证配置文件中指定的服务账号授予服务账号用户权限。这些账号通常与您的“以服务账号身份运行”服务账号不同。

需要以服务账号身份运行的集成

确定集成是否需要一个

只有在整个运行过程中都没有可用的凭据时,您才需要运行身份服务账号。这种情况只会在以下两种情况下发生:

集成运行方式 是否有人的凭据可用? 是否需要以服务账号身份运行?
同步 - 某人启动了该操作并等待结果 是,整个跑步过程
异步 - 已排队,稍后完成 仅在触发时
无人值守 - 由时间表或事件启动 否,从来没有真人

确定受影响的集成

首先,它是否会在无人时运行?如果存在以下任一情况,则会:

其次,其以服务账号身份运行的账号是否为空?如需列出某个区域中的每个已发布版本及其以运行身份运行的服务账号,请运行以下命令:

curl -s -G -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  --data-urlencode "filter=state=ACTIVE" \
  --data-urlencode "pageSize=1000" \
  "https://REGION-integrations.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/integrations/-/versions" \
| jq -r '.integrationVersions[]
         | [ .name, (.runAsServiceAccount // "NONE") ]
         | @tsv'

替换以下内容:

  • REGION:集成所在的区域。如需查看受支持区域的列表,请参阅位置
  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • 如果显示 NONE 的行也符合前半部分,则需要采取行动。
  • 如需改为检查单个集成,请在 Google Cloud 控制台中打开该集成,然后查看集成工具栏中的 集成摘要窗格。

更新集成

授予服务账号用户

如需向某人授予该角色,请运行以下命令:

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT \
    --project=SERVICE_ACCOUNT_PROJECT_ID \
    --member='user:PRINCIPAL' \
    --role='roles/iam.serviceAccountUser'

替换以下内容:

  • SERVICE_ACCOUNT:以运行身份服务账号的电子邮件地址,或身份验证配置文件中指定的账号的电子邮件地址
  • SERVICE_ACCOUNT_PROJECT_ID拥有服务账号的项目的 ID
  • PRINCIPAL:用户的电子邮件地址。

对于其他主账号类型,请使用相应的 --member 前缀:

  • 群组:使用 group:。我们建议您使用 Google 群组,而不是个人用户账号,以便在团队成员发生变化时简化访问权限管理。
  • 服务账号:使用 serviceAccount: 进行自动化流程和应用。

如需在 Google Cloud 控制台中执行相同的操作,请执行以下操作:

  1. 前往 IAM 和管理 > 服务账号
  2. 选择服务账号。
  3. 依次点击权限 > 授予访问权限

如需了解详情,请参阅管理对服务账号的访问权限

设置以指定服务账号身份运行

  1. 选择或创建服务账号,并向其授予集成任务在所涉及的资源上所需的角色。如需确定要授予哪些角色,请查看项目 Application Integration 服务代理 service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com 目前所拥有的角色,然后仅向新账号授予此集成所使用的部分角色。
  2. 向运行、审批、修改或发布集成(包括任何自动化)的所有人授予“服务账号用户”权限。
  3. 打开集成,然后在集成工具栏的 集成摘要窗格中设置服务账号。
  4. 发布集成。如需了解详情,请参阅测试和发布集成

Google Cloud 建议您为每个集成使用专用且范围最小的服务账号,而不是使用一个在所有集成之间共享的广泛特权账号,因为这样做可以:

  • 包含任何一项集成的影响。
  • 按名称显示在审核日志中。

如需了解详情,请参阅使用服务账号的最佳实践

排查权限缺失问题

被拒绝的操作有两种原因,值得区分:

  • 以服务账号的身份运行 - 您无法以该服务账号的身份运行,或者该服务账号无法访问任务所需的内容。
  • 您自己的 IAM 角色 - 您完全无权执行相应操作。

这两项检查均适用,因此修复其中一项并不能修复另一项。

以服务账号身份运行时的错误

情况 您将看到的内容 您需要采取的措施
有人触发了集成,但无法充当其以运行身份运行的服务账号 触发器被拒绝,返回 PERMISSION_DENIED。检查在运行排队之前进行,因此执行日志中不会显示任何内容,看起来好像什么都没发生,而不是任务失败 向触发者授予 Service Account User
没有用户凭据的运行没有以服务账号身份运行 连接器、“调用 REST 端点”任务和 Cloud Run 函数任务无法访问其尝试访问的任何内容。发布时: The integration is missing run-as service account since governance is enabled for your project. 设置以服务账号身份运行
任务使用的身份验证配置文件的服务账号是调用方无法以其身份执行操作的 在运行的其余部分继续进行时,该任务被拒绝: You do not have permission to use Auth Config ID because you cannot act as its service account: SERVICE_ACCOUNT. 向配置文件中指定的账号授予“服务账号用户”角色
审批人不能充当以服务账号身份运行的账号 审批流程会以静默方式失败,而不会生成可见的错误。运行会一直保持暂停状态,直到过期,因此您会注意到审批似乎已停止运作 向可能需要审批的所有人授予服务账号用户权限
有人未经许可修改或发布集成 Publisher does not have required permission to publish integration with service account: SERVICE_ACCOUNT. 任何已发布的内容都会继续运行。如果自动化功能为您发布,则会在部署流水线中显示,而不是在控制台中显示 向编辑者、发布者和自动化账号授予服务账号用户角色
任务以触发者的身份运行,但该用户无法访问资源 运行正常开始,然后一个任务失败,并命名了一个资源,即使集成的任何方面都没有更改 向这些人员授予对资源的访问权限,或将集成迁移到已拥有该权限的以服务账号身份运行的账号上 - 通常这是更好的解决方案,因为这样可以避免集成访问权限因运行人员而异

如需查看完整的 Application Integration 错误代码列表,请参阅错误代码

IAM 角色错误

除了以运行身份服务账号运行之外,Application Integration 还会针对每项操作验证您的用户 IAM 权限。如果您在与集成互动时遇到 PERMISSION_DENIED 错误,或者执行日志无法加载,请确保您拥有可授予所需权限的角色:

为此,请执行以下操作 您需要拥有以下角色之一
查看和打开集成 roles/integrations.integrationViewer
查看执行日志和详细信息 roles/integrations.integrationViewerroles/integrations.integrationInvoker
运行集成 roles/integrations.integrationInvokerroles/integrations.integrationEditor
创建和修改集成 roles/integrations.integrationEditor
发布集成 roles/integrations.integrationDeployerroles/integrations.integrationEditor
批准或恢复已暂停的运行 roles/integrations.suspensionResolverroles/integrations.integrationAdmin
对所有集成的完全访问权限 roles/integrations.integrationAdmin

如需授予角色,请运行以下命令:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='user:PRINCIPAL' \
    --role='ROLE'

详情请参阅以下内容:

常见问题

我已授予相应角色,但任务仍然失败。我错过了什么?

  • 公益金发放到了错误的项目。必须在拥有服务账号的项目中进行,该项目不一定拥有集成。
  • 尚未生效。请稍等几分钟。除了正常的 IAM 传播延迟之外,授权决策还会短暂缓存。
  • 涉及第二个服务账号。您的以其他身份运行的服务账号和每个身份验证配置文件的服务账号是分开的,两者都需要授权。
  • 该块是您自己的角色,而不是服务账号。“服务账号用户”权限是指您是否可以运行身份服务账号身份行事;是否允许您执行相应操作由单独的 IAM 角色控制。请参阅 IAM 角色错误

为什么 Integration Invoker 角色不再足够?

您仍然可以运行集成。但它从未允许您以集成运行所用的服务账号身份执行操作,而这正是决定运行可获取多少访问权限的关键。以下角色均不会授予 iam.serviceAccounts.actAs,因此始终需要单独授予:

  • roles/integrations.integrationAdmin
  • roles/integrations.integrationEditor
  • roles/integrations.integrationInvoker

我的集成只能同步运行。我需要以服务账号身份运行吗?

否。同步运行已有身份:触发运行的人员。请参阅确定集成是否需要一个

控制台中未标记任何内容。我是否可以放心了?

不一定。警告在一定程度上取决于观测到的运行情况,因此,如果集成运行频率较低,或者最近无人触发,则可能需要采取措施,但系统不会向您显示警告。请完成需要以“run-as”服务账号运行的集成,而不是将安静的控制台视为一切正常。

后续步骤