google-cloud-platform - 将来自不同项目的服务帐户分配给 Pub/Sub 上的推送订阅
问题描述
场景如下:我在同一个组织和文件夹中有两个项目;让我们打电话给他们project1
和project2
。我有一个 Pub/Sub 主题,project2
并且我有一个 Cloud Run 服务project1
,我想将其用作该主题的推送订阅的端点。但是,我不希望每个人都能够访问我的 Cloud Run 服务:我只希望授权的服务帐户能够调用该服务。project1
因此,我创建了一个具有role/run.invoker
Cloud Run 服务角色的服务帐户。现在,当我project2
使用 Cloud Run 服务作为端点在主题中创建订阅时,我尝试project1
使用以下命令将服务帐户与其关联:
gcloud --project=project2 pubsub subscriptions create test_subscrption --topic=topic-name --topic-project=project2 --push-auth-service-account=service_account1 --push-endpoint=https://my-cloud-run-service.run.app/
我得到以下信息:
ERROR: Failed to create subscription [projects/project2/subscriptions/test_subscrption]: User not authorized to perform this action.
ERROR: (gcloud.pubsub.subscriptions.create) Failed to create the following: [test_subscrption].
请注意,我用于登录 GCP 的帐户具有Owner
组织级别的权限。此外,如果我在 中创建一个服务帐户project2
并使用它而不是在 上的服务帐户project1
,则可以毫无问题地创建订阅。我知道在将服务帐户关联到推送订阅之前需要设置一些权限(如此处serviceAccountTokenCreator
所述和此处iam.serviceAccounts.actAs
所述),但我可以保证我在尝试创建订阅之前确实设置了这些权限,但我仍然遇到同样的错误。综上所述,我得出的结论是,无法将来自不同项目的服务帐户与 Pub/Sub 中的推送订阅相关联(更重要的是,如果我尝试从下拉菜单中的 GCP UI 创建订阅对于与推送订阅关联的服务帐户,我只看到与主题和订阅属于同一项目的服务帐户)。谁能证实这一点,或告诉我如何实现我的目标?我目前的解决方案是创建一个服务帐户project2
并将其与推送订阅相关联,但我想知道我的原始计划是否可行。
解决方案
正如评论中提到的,当您使用 UI 进行操作时,您只能选择当前项目的服务帐户,而无法使用外部服务帐户。相反,您可以在 project1 中创建推送订阅并在 project2 中创建主题。
推荐阅读
- vb.net - 从有条件的列表中删除元素(VB)
- reactjs - ionic :文件 C:\Users\Admin\AppData\Roaming\npm\ionic.ps1 无法加载,因为在此系统上禁用了运行脚本
- mfc - 更改 CMFCMenuButton 的样式看起来像我对话框上的常规按钮
- java - 在 Java 中解密和重新验证 JWT 令牌
- php - 在 laravel 中使用碳的 settimezone 查询问题
- c# - C# Dapper 与泛型方法的一对多关系
- r - R mutate & gsub 其中模式基于列
- ruby-on-rails - Rails 创建唯一令牌
- android - 如何开始为华为开发移动应用程序
- qliksense - 在 SQL 语句之间的 loadscript 中连接