微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Pulumi 中,在定义 GCP CloudBuild 触发器时,我应该使用什么作为 kmsKeyName 来表示托管机密?

如何解决在 Pulumi 中,在定义 GCP CloudBuild 触发器时,我应该使用什么作为 kmsKeyName 来表示托管机密?

我的目标是使用 Pulumi 创建 GCP CloudBuild 触发器。我正在使用 Typescript 客户端。

在创建 Google 管理的机密(而不是客户管理的机密)时,我不使用 KMS。 我会在所需的 (!) 变量 build.secrets[0].kmsKeyName 中放入什么?这在使用 KMS 时很简单,但我发现没有“认”或“全局”KMS 名称可以在使用 Google 管理的机密运行触发器时起作用。我可以使用“假”KMS 名称创建触发器,但它无法运行,并抱怨: Failed to trigger build: generic::invalid_argument: invalid build: invalid secrets: kmsKeyName "?WHAT TO PUT HERE?" is not a valid KMS key resource

预先感谢您的任何建议。

import * as gcp from "@pulumi/gcp";

const ghToken = new gcp.secretmanager.Secret("gh-token",{
    secretId: "gh-token",replication: {
        automatic: true,},})

const ghTokenSecretVersion = new gcp.secretmanager.SecretVersion("secret-version",{
    secret: ghToken.id,secretData: "the-secret-token",});

const cloudBuild = new gcp.cloudbuild.Trigger("trigger-name",{
    github: {
        owner: "the-org",name: "repo-name",push: {
            branch: "^main$"
        }
    },build: {
        substitutions: {
            "_SERVICE_NAME": "service-name","_DEPLOY_REGION": "deploy-region","_GCR_HOSTNAME": "gcr.io",steps: [
            {
                id: "Build",name: "gcr.io/cloud-builders/docker",entrypoint: "bash",args: [
                    "-c",`docker build --no-cache
                    -t $_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA
                    --build-arg GH_TOKEN=$$GH_TOKEN
                    .
                    -f Dockerfile
                    `,],secretEnvs: ["GH_TOKEN"],tags: ["my-tag"],secrets: [
            {
                kmsKeyName: "?WHAT TO PUT HERE?",secretEnv: {
                    "GH_TOKEN": ghTokenSecretVersion.secretData
                }
            }
        ]
    },})

解决方法

我认为您不能通过 Pulumi 将 SecretManager 秘密用于云构建。我通过创建 kms 密钥并使用 gcp.kms.Ciphertext 加密我的数据解决了这个问题。这是它的样子:

import * as gcp from "@pulumi/gcp";
import * as pulumi from "@pulumi/pulumi";

export const keyRing = new gcp.kms.KeyRing("keyring",{
  location: "global",},{protect: true});

export const secretsEncryptionKey = new gcp.kms.CryptoKey("secrets-key",{
  keyRing: keyRing.id,rotationPeriod: "100000s",{ protect: true });

const config = new pulumi.Config();

export const githubTokenCiphertext = new gcp.kms.SecretCiphertext("github-token",{
  cryptoKey: secretsEncryptionKey.id,plaintext: config.requireSecret("github-token"),});

const cloudBuild = new gcp.cloudbuild.Trigger("trigger-name",{
  github: {...},build: {
    ...,secrets: [
      {
        kmsKeyName: githubTokenCiphertext.cryptoKey,secretEnv: {
          "GH_TOKEN": githubTokenCiphertext.ciphertext,}
      }
    ]
  },})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?