google-cloud-platform - GCP - 以用户身份模拟服务帐号

标签 google-cloud-platform impersonation service-accounts google-iam google-cloud-iam

我希望允许用户模拟服务帐户对长时间运行的进程进行操作。
但是,所有代码示例都说明了模拟另一个服务帐户的服务帐户。

用户可以直接模拟服务帐号吗?如果是这样,如何?

我正在关注 this example code .

初始化无权访问列表存储桶的源凭据:

from google.oauth2 import service_acccount

target_scopes = [
    'https://www.googleapis.com/auth/devstorage.read_only']

source_credentials = (
    service_account.Credentials.from_service_account_file(
        '/path/to/svc_account.json',
        scopes=target_scopes))

现在使用源凭据获取凭据以模拟另一个服务帐户:
from google.auth import impersonated_credentials

target_credentials = impersonated_credentials.Credentials(
  source_credentials=source_credentials,
  target_principal='impersonated-account@_project_.iam.gserviceaccount.com',
  target_scopes = target_scopes,
  lifetime=500)

最佳答案

不要尝试从用户帐户模拟服务帐户,而是授予用户创建服务帐户 OAuth 访问 token 的权限。

在服务帐户上授予用户 roles/iam.serviceAccountTokenCreator 角色。

调用 API generateAccessToken 以从服务帐户创建访问 token 。

projects.serviceAccounts.generateAccessToken

一个简单的 HTTP POST 请求将返回一个访问 token 。使用服务帐户电子邮件地址修改以下请求。

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE-ACCOUNT-NAME@PROJECTID.iam.gserviceaccount.com:generateAccessToken

请求正文:
{
  "delegates": [],
  "scope": [
      "https://www.googleapis.com/auth/cloud-platform"
  ],
  "lifetime": "3600s"
}

此 API 需要授权。在 HTTP 授权 header 中包含用户的 OAuth 访问 token 。
Authorization: Bearer ACCESS_TOKEN

响应机构:
{
   "accessToken": "eyJ0eXAifeA...NiK8i",
   "expireTime": "2020-03-05T15:01:00.12345678Z"
}

关于google-cloud-platform - GCP - 以用户身份模拟服务帐号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60554732/

相关文章:

c# - 模拟在 ASP.NET MVC 中工作吗

java - Gmail Api 服务帐户提供失败的前提条件响应

google-api - 是否可以在不代表域范围委派中的用户的情况下从服务帐户调用 API?

google-cloud-platform - 有没有办法通过docker容器内的代理访问谷歌云SQL

c# - 是否可以对进行 P/Invoke 调用的类进行单元测试?

kubernetes - 服务器选择在 30000 毫秒后超时 {"name":"MongooseTimeoutError","reason": {"name" :"MongoNetworkError"}}

c# - 模拟 Windows 用户

google-analytics - Google Analytics - 是否必须从托管 Google Analytics 帐户的 Google 配置文件创建服务帐户?

google-cloud-platform - 配置 Google Cloud Load Balancer 路径规则

google-app-engine - 'gcloud deploy' 提示同时拥有 .gcloudignore 和 skip_files,即使我两者都没有