如何使用模拟的服务帐户运行python代码



我在搜索谷歌后来到这里,但我找不到任何我能理解的答案。请帮助我解决我的问题。

如果我想使用模拟的服务帐户访问GCP资源,我知道我可以使用它使用命令,例如在项目中列出一个桶:Gsutil -i service-account-id ls -p project-id

但是我如何运行python代码ex: test1.py来访问使用模拟服务帐户的资源?有任何包或类,我需要使用它吗?如果是,那么如何使用?PFB场景和代码:

我有一个pub/sub主题托管在项目a,其中所有者是xyz@gmail.com,我有一个python代码托管在项目b,其中所有者是abc@gmail.com。在项目- a我已经创建了一个服务帐户,我已经添加abc@gmail.com来模拟服务帐户,其中有发布/订阅管理角色。现在我如何通过项目b中的python代码访问pubsub主题而不使用密钥?

"""Publishes multiple messages to a Pub/Sub topic with an error handler."""
import os
from collections.abc import Callable
from concurrent import futures
from google.cloud import pubsub_v1
# os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "C:gcp_pockeymy-GCP-project.JSON"
project_id = "my-project-id"
topic_id = "myTopic1"
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_id)
publish_futures = []
def get_callback(publish_future: pubsub_v1.publisher.futures.Future, data: str) -> Callable[[pubsub_v1.publisher.futures.Future], None]:
def callback(publish_future: pubsub_v1.publisher.futures.Future) -> None:
try:
# Wait 60 seconds for the publish call to succeed.
print(f"Printing the publish future result here: {publish_future.result(timeout=60)}")
except futures.TimeoutError:
print(f"Publishing {data} timed out.")
return callback
for i in range(4):
data = str(i)
# When you publish a message, the client returns a future.
publish_future = publisher.publish(topic_path, data.encode("utf-8"))
# Non-blocking. Publish failures are handled in the callback function.
publish_future.add_done_callback(get_callback(publish_future, data))
publish_futures.append(publish_future)
# Wait for all the publish futures to resolve before exiting.
futures.wait(publish_futures, return_when=futures.ALL_COMPLETED)
print(f"Published messages with error handler to {topic_path}.")

创建具有适当角色的服务帐户。然后创建一个服务帐户密钥文件并下载它。然后将密钥文件的路径放入"GOOGLE_APPLICATION_CREDENTIALS"环境变量。Client Library将选择该密钥文件并将其用于进一步的身份验证/授权。请阅读官方文档以了解更多关于应用程序默认凭据的工作原理。

我想这里有一个可能的例子如何做到https://github.com/salrashid123/gcp_pubsub_message_encryption/blob/master/2_svc/publisher.py#L93

根据我的理解,您需要从https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/{}:signBlob中提取keyId,然后将其传递给客户端命令(在您的情况下是publisher.publish)。

注::我还没有测试过这个脚本,它是2年前的,但这种方法对我来说是正确的。

相关内容

  • 没有找到相关文章

最新更新