标签: workload-identity

GCP 工作负载身份联合 - Github 提供商 - “无法获取模拟凭据”

我严格按照这些说明进行操作,以允许我使用短期令牌身份验证方法从我们的 github 操作工作流程访问 gcloud 资源。

我已经使用上面的确切说明创建了服务帐户、工作负载身份池和 github 提供程序池,但身份验证步骤似乎并未获取正确的令牌(或根本没有任何令牌)。GCP 服务帐户具有正确的 IAM 权限。

在这gcloud compute instances list一步中,我收到错误:

ERROR: (gcloud.compute.instances.list) There was a problem refreshing your current auth tokens: ('Unable to acquire impersonated credentials: No access token or invalid expiration in response.', '{\n  "error": {\n    "code": 403,\n    "message": "The caller does not have permission",\n    "status": "PERMISSION_DENIED"\n  }\n}\n')
Please run:

  $ gcloud auth login

to obtain new credentials.
Run Code Online (Sandbox Code Playgroud)

我的github actions文件如下:

ERROR: (gcloud.compute.instances.list) There was a problem refreshing your current auth …
Run Code Online (Sandbox Code Playgroud)

oauth-2.0 google-cloud-platform workload-identity

7
推荐指数
2
解决办法
5437
查看次数

GCP 工作负载身份池的位置参数是什么

根据文档

创建身份池的示例是

gcloud iam workload-identity-pools create my-workload-identity-pool --location="global" --display-name="我的工作负载池" --description="我的工作负载池描述" --disabled

全球位置是什么意思?这个论点的目的是什么?它显然不是像 us-central1 这样的位置,而是一个逻辑位置。

哪些值可用?我没有找到任何关于此的好的文档,所以我问。

google-cloud-platform google-cloud-iam workload-identity

6
推荐指数
1
解决办法
1071
查看次数

Composer 2/GKE Autopilot 集群 PodOperator 任务的工作负载身份和服务帐户

我正在尝试在 Composer 2 环境中运行 GKEStartPodOperator/KubernetesPodOperator 任务,该环境在自动驾驶模式下使用 GKE 集群。我们现有的 Composer 1 环境中的 GKE 集群不处于自动驾驶模式。我们使用 Google Cloud Platform 服务(BigQuery、GCS 等)进行身份验证的任务在 Composer 2 环境中失败并出现 401 未经授权,但在 Composer 1 环境中成功。

在日志文件中,我可以看出两个环境中的任务都是通过向元数据服务器发出请求来获取凭据的。主要区别是 Composer 1 中的任务请求分配给任务运行所在节点的服务帐户,但 Composer 2 中的任务请求似乎是工作负载身份池,例如[project-name].svc.id.goog.

Composer 1 的日志是:

[2021-10-22 12:38:01,349] {pod_launcher.py:148} INFO - DEBUG:google.auth._default:Checking None for explicit credentials as part of auth process...
[2021-10-22 12:38:01,351] {pod_launcher.py:148} INFO - DEBUG:google.auth._default:Checking Cloud SDK credentials as part of auth process...
[2021-10-22 12:38:01,352] {pod_launcher.py:148} INFO - DEBUG:google.auth._default:Cloud SDK credentials not found on disk; not …
Run Code Online (Sandbox Code Playgroud)

service-accounts google-kubernetes-engine airflow google-cloud-composer workload-identity

5
推荐指数
1
解决办法
2765
查看次数

GKE Workload Identity 可以与域范围委派一起使用吗?

我们一直在内部应用程序上使用Google Directory API来获取用户的个人资料。当我们进行身份验证时,我们一直在为服务和google-auth-library JWT类使用 json 密钥文件。服务帐户具有域范围委派来使用此端点。因此,访问令牌需要设置subject为工作区管理员。

const jwt = new JWT({
  email: key.client_email,
  key: key.private_key,
  subject: '<admin-email-address>',
  scopes: 'https://www.googleapis.com/auth/admin.directory.user.readonly',
})

const accessToken = await jwt.getAccessToken()
Run Code Online (Sandbox Code Playgroud)

我们的组织正在尝试不再使用服务帐户密钥文件,而是转向 GKE Workload Identity。我们可以使用应用程序默认凭据进行身份验证,在 中设置主题clientOptions

const auth = new GoogleAuth({
  scopes: 'https://www.googleapis.com/auth/admin.directory.user.readonly',
  clientOptions: {
    subject: '<admin-email-address>'
  }
})

const accessToken = await auth.getAccessToken()
Run Code Online (Sandbox Code Playgroud)

但是,创建的访问令牌没有设置主题。这意味着令牌无法访问 Directory API。

有没有办法使用 Workload Identity 创建一个令牌?

google-api-nodejs-client google-kubernetes-engine google-workspace workload-identity

5
推荐指数
0
解决办法
378
查看次数

Gmail API 以及与 AWS 和 Google Cloud 的工作负载身份联合

我希望与 Gmail API 集成,并希望使用具有全网域委托的服务用户来代表 Google Workspaces 中的用户请求数据。我的代码在AWS的EC2中运行。通读文档,最佳实践似乎是使用工作负载身份联合来作为服务用户进行身份验证,这样就不存在密钥泄露的风险。

我已按照Google 网站上的步骤设置与 AWS 的工作负载身份联合,此外,还在 google cloud shell 中运行以下命令:

gcloud iam service-accounts add-iam-policy-binding <service_account_email>  \    
--role=roles/iam.workloadIdentityUser  \ 
--member="principalSet://iam.googleapis.com/projects/<project_id>/locations/global/workloadIdentityPools/<pool_id>/attribute.aws_role/arn:aws:sts::<aws_account_id>:assumed-role/<aws_role_name>" \
--project <google_cloud_project_name>
Run Code Online (Sandbox Code Playgroud)

我有以下测试应用程序代码:

const { google } = require("googleapis");
const { GoogleAuth } = require("google-auth-library");
const path = require("path");

module.exports = async (req, res) => {
  const scopes = [
    "https://www.googleapis.com/auth/gmail.readonly",
    "https://www.googleapis.com/auth/admin.directory.user.readonly",
  ];

  let status = "";

  try {

    //Inject the client library config as the GOOGLE_APPLICATION_CREDENTIALS
    const configPath = path.join(__dirname, "client_library_config.json");
    process.env["GOOGLE_APPLICATION_CREDENTIALS"] = …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js google-cloud-platform gmail-api workload-identity

5
推荐指数
0
解决办法
257
查看次数

如何在 GKE Deployment.YAML 中为 Pod 指定 ServiceAccountName

我已经为工作负载身份配置了集群和节点池(https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity),但为了让它工作,我还需要让我的 Pod 使用我为工作负载身份创建的 kubernetes 服务帐户。

我发现我可以在 pod 的 YAML 中指定serviceAccountName,但是如何使用使用了 deployment.yaml 的 Google CI/CD 来执行此操作?或者我可以以某种方式引用 pod 的 YAML 来用作我的 deployment.yaml 中的规范模板吗?抱歉,我是 k8s 新手!

参考号 https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/

本质上,我只是想让 Workload Identity 与我的应用程序一起使用,因此GOOGLE_APPLICATION_CREDENTIALSGoogle 将其设置为在我的应用程序中使用!

我在我的deployment.yaml中尝试了以下操作,但收到错误unknown field "serviceAccountName" in io.k8s.api.core.v1.Container;

spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-application
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: my-application
    spec:
      containers:
        - image: >-
            gcr.io/my-project/github.com/my-org/my-repo
          imagePullPolicy: IfNotPresent
          name: my-application
          serviceAccountName: my-k8s-svc-acct
Run Code Online (Sandbox Code Playgroud)

kubernetes google-kubernetes-engine workload-identity

4
推荐指数
1
解决办法
3154
查看次数

谷歌神器regitsry NPM + github操作

google-github-actions/auth@v0我正在尝试通过 github 使用和在 GAR(Google Artifact Registry)上发布 npm 包google-artifactregistry-auth

对于从 github 到 google 的身份验证,我使用联合工作负载身份执行以下操作:

export PROJECT_ID="my-project-id"

gcloud iam service-accounts create "gh-deploy-service-account" --project "${PROJECT_ID}"

gcloud iam workload-identity-pools create "github-pool" --project="${PROJECT_ID}" --location="global" --display-name="Github pool"

gcloud iam workload-identity-pools describe github-pool" --project="${PROJECT_ID}" --location="global" --format="value(name)"

export WORKLOAD_IDENTITY_POOL_ID=projects/my-custom-id-number/locations/global/workloadIdentityPools/github-pool

gcloud iam workload-identity-pools providers create-oidc "github-provider" \
  --project="${PROJECT_ID}" \
  --location="global" \
  --workload-identity-pool="github-pool" \
  --display-name="Github provider" \
  --attribute-mapping="google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository" \
  --issuer-uri="https://token.actions.githubusercontent.com"

export REPO="@example/my-package"

gcloud iam service-accounts add-iam-policy-binding "gh-deploy-service-account@${PROJECT_ID}.iam.gserviceaccount.com" \
  --project="${PROJECT_ID}" \
  --role="roles/iam.workloadIdentityUser" \
  --member="principalSet://iam.googleapis.com/${WORKLOAD_IDENTITY_POOL_ID}/attribute.repository/${REPO}"
Run Code Online (Sandbox Code Playgroud)

然后我在谷歌上创建了我的工件存储库:

gcloud artifacts repositories create …
Run Code Online (Sandbox Code Playgroud)

github gcloud github-actions google-artifact-registry workload-identity

4
推荐指数
1
解决办法
1879
查看次数

是否可以在 GKE 中创建多个工作负载身份

是否可以在 GKE 中的同一命名空间上设置 2 个工作负载身份?

如果上述情况可行,我们希望根据 Pod 的服务帐户为其分配不同的标识。

google-cloud-platform google-kubernetes-engine workload-identity

1
推荐指数
1
解决办法
864
查看次数