【问题标题】:Is it possible for AWS CDK to create a secret with a blank or placeholder value?AWS CDK 是否可以创建具有空白或占位符值的密钥?
【发布时间】:2021-12-30 18:32:40
【问题描述】:

我正在将我的 CodePipeline 连接到 Github,所以我添加了以下几行:

CodePipelineSource.gitHub("username/repo", "main", {
   authentication: cdk.SecretValue.secretsManager("github-token")
})

当我运行cdk deploy 时,预期会失败:

Pipeline/Pipeline (Pipeline9850B417) Secrets Manager can't find the specified secret. (Service: AWSSecretsManager; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: eaa59d67-bb64-472c-abc4-9d4896c09d7e; Proxy: null)

CDK 是否可以使用 空白或占位符值 创建密钥,这样它仍然会因某种访问被拒绝而失败,但随后我可以转到 AWS 控制台并只需填写值即可。

澄清:我不希望 CDK 创建 OAuth 令牌。我想要实现的是运行cdk deploy,让它失败,去Secrets Manager,找到带有占位符值的秘密,输入值,再次运行cdk deploy,那一次就成功了。

【问题讨论】:

    标签: aws-cdk aws-secrets-manager


    【解决方案1】:

    您可以像创建任何其他资源一样创建秘密。

    const secret = new secretsmanager.Secret(this, 'Secret');
    

    它将使用生成的占位符值填充它。您还可以使用secret.grantRead(role); 授予某些角色对机密的读/写访问权限

    参考文档: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_secretsmanager.Secret.html

    您还需要告诉 CDK 您的管道依赖于秘密 my_pipeline.node.addDependency(secret);

    【讨论】:

    • 这很好地回答了标题中的问题。但它不会解决海报的问题。如果没有有效的 github 令牌作为秘密值,CDK pipelinesynth action 将失败。如果使用生成的密钥,CDK 将无法创建 github webhook,并且堆栈部署将失败。
    • 当然,它会失败,但为什么这是个问题?您可以部署堆栈、填充密钥并重新运行管道。
    • 我不希望管道能够创建 github 令牌。但是当我尝试这样的事情时,它没有用。我会再试一次。
    • @pupeno 声明资源之间的显式依赖关系是这里的关键。
    • 是的,那是我所缺少的。
    【解决方案2】:

    这有点棘手。长话短说,我们必须在管道堆栈之外创建秘密。

    我们可以使用 CDK 创建一个生成的Secret(并获取它的secretValue: SecretValue)。但是,正如您所发现的,挑战在于使用实际的 github 令牌值安全地更新密钥。在合成操作中设置 mySecret.secretValue 并推迟实际令牌值更新将不起作用。 CDK 生成的秘密值将导致管道堆栈部署失败并出现Invalid credentials 错误。

    那么我们如何创建秘密,设置它的值并将其提供给合成动作呢?有几种选择。每个都涉及在管道堆栈之外构建秘密1

    1. 在 AWS 控制台中手动创建密钥 github 令牌是跨应用程序资源,可能会在多个 CDK 应用程序中重复使用。而不是捆绑 它到一个特定的应用程序,在控制台中手动创建它。接下来,在您的管道堆栈中,使用应用程序中的SecretValue'scdk.SecretValue.secretsManager('github-token') 静态方法来获取对密钥的引用。2
    2. 在单独的新 CDK 应用中创建密钥 在单独的“共享”CDK 应用中创建跨应用资源,例如密钥和 IAM 用户。部署应用程序,更新 将 github-token 值转换为实际的 token 值,然后在您的应用中读取其值。2
    3. 在应用的单独堆栈中创建密钥 部署应用。秘密堆栈将部署,但管道堆栈将失败(因为秘密是 CDK 生成的)。更新控制台中的令牌值,重新部署您的应用程序。第二次,管道将找到有效的令牌并部署好。

    (1) 高级单栈选项:将带有令牌值的部署时间参数传递给调用PutSecretValue API 的自定义资源。复杂,有过度设计的味道。

    (2) 密钥的固定成本为每月 0.50 美元,因此在多个应用程序之间共享 github-token 密钥可能是值得的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2013-03-23
      • 2019-10-16
      • 1970-01-01
      • 2021-03-04
      • 2011-01-18
      • 2021-08-15
      相关资源
      最近更新 更多