如何创建一个 pubsub 日志接收器到不同的 google 云 project/org?
How can I create a pubsub log sink to a different google cloud project/org?
我想定义从一个项目到另一个项目的 pubsub 日志导出接收器的步骤。作为次要目标,我希望汇集到桥梁组织。到目前为止,我已按照 gcloud
帮助页面和 auth documentation.
中概述的这些步骤进行操作
首先我创建了一个接收器:
# from project A
gcloud logging sinks create \
<sink_name> \
pubsub.googleapis.com/projects/<project_B>/topics/<topic_name> \
--log-filter <filter>
CLI returns 成功并提供了一些关于为其创建的服务帐户设置权限的建议:
Created [https://logging.googleapis.com/v2/projects/<project_A>/sinks/<sink_name>].
Please remember to grant `serviceAccount:<new_user>@logging-<project_A_account_number>.iam.gserviceaccount.com` Pub/Sub Publisher role to the topic.
More information about sinks can be found at https://cloud.google.com/logging/docs/export/configure_export
按照这个建议,我为新服务帐户授予了该主题的适当权限。
gcloud projects add-iam-policy-binding <project_B> \
--member serviceAccount:<new_user>@logging-<project_A_account_numbe_id>.iam.gserviceaccount.com \
--role roles/pubsub.publisher
此命令 returns 没有问题。
尽管看起来一切正常,但没有日志流过接收器。
这里有一些线索:日志查看器上的“导出”选项卡报告接收器中存在权限错误。项目 Activity 选项卡报告权限问题。
Image: Logs Viewer, Exports
Image: Project, Activity
有解决办法吗?是否可以概括这一点以将日志从其他 gcloud 组织发送到该项目中的接收器?
我已经能够重现您想要的场景。让我设置场景描述的基础知识:
- 项目 A(存储我的日志的地方):project-a
- 项目 B(我的 Pub/Sub 主题和订阅是):project-b
- 主题:projects/project-b/topics/myTopic
- 订阅:我的订阅
- 接收器:测试接收器
那么,我是这样处理的:
- 在项目 A 中: 在 Google Cloud Console 的 Logging > Logs 选项卡中为日志创建一个过滤器。
使用下图中的元素创建导出(记得将 pubsub.googleapis.com/ 附加到您在其他项目中的主题名称):
移动到 Exports 选项卡并复制 Writer Identity,其格式应为 test-sink@XXXXXXXX.iam.gserviceaccount.com
在项目 B: 转到控制台中的 IAM & admin > IAM 选项卡并添加一个新的成员是在步骤 3 中获得的先前服务帐户,角色 Pub/Sub 已启用编辑器.
使用命令 gcloud beta pubsub subscriptions create --topic myTopic mySub
创建一个 Pub/Sub 订阅
执行一些操作,使您在项目 A 中指定的过滤器读取日志。
使用订阅使用写入主题的日志,使用命令gcloud beta pubsub subscriptions pull mySub
。
在那里您会找到从项目 A 写入到项目 B 中的热带的日志。我已经从一个简单的 App Engine 应用程序重现了同样的场景写入日志(因此使用适当的日志过滤器搜索 App Engine日志),当我向 App Engine 应用程序发出请求时,会创建一些日志,然后将其写入 myTopic,我可以使用 mySub 读取这些日志.
关于你的第二个问题,我无法确定同样的过程是否适用于跨组织场景,但我认为这没有问题。
Matt,您创建接收器并向接收器使用的服务帐户授予发布者角色的 gcloud 命令看起来是正确的。您看到的错误可能是暂时的,应该会在一段时间后解决。
错误的一个可能原因可能是两个命令之间存在时间延迟,并且接收器在您授予 IAM 角色之前立即尝试导出日志。您能否确认错误最终自行解决?
要回答您的最后一个问题,是的,您可以将日志从一个项目导出到不同组织中另一个项目的目标位置。
我想定义从一个项目到另一个项目的 pubsub 日志导出接收器的步骤。作为次要目标,我希望汇集到桥梁组织。到目前为止,我已按照 gcloud
帮助页面和 auth documentation.
首先我创建了一个接收器:
# from project A
gcloud logging sinks create \
<sink_name> \
pubsub.googleapis.com/projects/<project_B>/topics/<topic_name> \
--log-filter <filter>
CLI returns 成功并提供了一些关于为其创建的服务帐户设置权限的建议:
Created [https://logging.googleapis.com/v2/projects/<project_A>/sinks/<sink_name>].
Please remember to grant `serviceAccount:<new_user>@logging-<project_A_account_number>.iam.gserviceaccount.com` Pub/Sub Publisher role to the topic.
More information about sinks can be found at https://cloud.google.com/logging/docs/export/configure_export
按照这个建议,我为新服务帐户授予了该主题的适当权限。
gcloud projects add-iam-policy-binding <project_B> \
--member serviceAccount:<new_user>@logging-<project_A_account_numbe_id>.iam.gserviceaccount.com \
--role roles/pubsub.publisher
此命令 returns 没有问题。
尽管看起来一切正常,但没有日志流过接收器。
这里有一些线索:日志查看器上的“导出”选项卡报告接收器中存在权限错误。项目 Activity 选项卡报告权限问题。
Image: Logs Viewer, Exports
Image: Project, Activity
有解决办法吗?是否可以概括这一点以将日志从其他 gcloud 组织发送到该项目中的接收器?
我已经能够重现您想要的场景。让我设置场景描述的基础知识:
- 项目 A(存储我的日志的地方):project-a
- 项目 B(我的 Pub/Sub 主题和订阅是):project-b
- 主题:projects/project-b/topics/myTopic
- 订阅:我的订阅
- 接收器:测试接收器
那么,我是这样处理的:
- 在项目 A 中: 在 Google Cloud Console 的 Logging > Logs 选项卡中为日志创建一个过滤器。
使用下图中的元素创建导出(记得将 pubsub.googleapis.com/ 附加到您在其他项目中的主题名称):
移动到 Exports 选项卡并复制 Writer Identity,其格式应为 test-sink@XXXXXXXX.iam.gserviceaccount.com
在项目 B: 转到控制台中的 IAM & admin > IAM 选项卡并添加一个新的成员是在步骤 3 中获得的先前服务帐户,角色 Pub/Sub 已启用编辑器.
使用命令
gcloud beta pubsub subscriptions create --topic myTopic mySub
创建一个 Pub/Sub 订阅
执行一些操作,使您在项目 A 中指定的过滤器读取日志。
使用订阅使用写入主题的日志,使用命令
gcloud beta pubsub subscriptions pull mySub
。
在那里您会找到从项目 A 写入到项目 B 中的热带的日志。我已经从一个简单的 App Engine 应用程序重现了同样的场景写入日志(因此使用适当的日志过滤器搜索 App Engine日志),当我向 App Engine 应用程序发出请求时,会创建一些日志,然后将其写入 myTopic,我可以使用 mySub 读取这些日志.
关于你的第二个问题,我无法确定同样的过程是否适用于跨组织场景,但我认为这没有问题。
Matt,您创建接收器并向接收器使用的服务帐户授予发布者角色的 gcloud 命令看起来是正确的。您看到的错误可能是暂时的,应该会在一段时间后解决。 错误的一个可能原因可能是两个命令之间存在时间延迟,并且接收器在您授予 IAM 角色之前立即尝试导出日志。您能否确认错误最终自行解决?
要回答您的最后一个问题,是的,您可以将日志从一个项目导出到不同组织中另一个项目的目标位置。