【问题标题】:How to impersonate a GCP service account from credentials generated by Application Default Credentials如何从应用程序默认凭据生成的凭据中模拟 GCP 服务帐户
【发布时间】:2020-05-27 05:34:12
【问题描述】:

我有一个服务帐户,并且我正在将此服务帐户的“ServiceAccountUser”角色授予一位真实用户。用户将应用程序默认凭据设置为他的配置的一部分,以避免每次运行时出现登录屏幕。我不确定该用户运行代码以操作仅对服务帐户可访问的某些资源的最佳方式是什么。出于安全原因,我不想使用服务帐户密钥 JSON 文件。我正在尝试以下代码

import google.auth
service_account_email='my-service-account@my-project.iam.gserviceaccount.com'
adc_credentials,adc_project=google.auth.default()

delegated_credentials=adc_credentials.with_subject(service_account_email)

我收到错误: AttributeError:“凭据”对象没有属性“with_subject”

【问题讨论】:

  • 需要导入google.oauth2才能使用with_subject
  • 向您的问题添加更多详细信息,了解 ADC 发现了哪种类型的凭据(用户凭据、服务帐户)。域范围委派使用模拟,以便服务帐户可以模拟用户。
  • @JohnHanley:感谢您的建议。我想从用户凭据中模拟服务帐户,而不是相反。我的资源被授予访问服务帐户的权限,而不是个人用户。
  • 您不能使用用户凭据模拟服务帐户。仅支持反向用例。
  • 需要明确的是,您有一个对资源具有特定访问权限的服务帐户,一个没有该访问权限的用户帐户,但具有 ServiceAccountUser 的角色。并且您希望此用户被模拟为有权访问受限资源的服务帐户,所有这些都无需使用服务帐户密钥 JSON?

标签: google-cloud-platform service-accounts


【解决方案1】:

如指定的Here 服务帐户用户角色授予您使用服务帐户部署资源的权限,而不是授予此帐户的权限。

如果担心长期使用的凭据很容易被盗,那么您可以使用Short lived credentials

要模拟服务帐户,您需要服务帐户令牌创建者的角色。 here 是一篇解释这种模拟过程的文章。

【讨论】:

    猜你喜欢
    • 2017-10-19
    • 2023-01-31
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多