AWS CDK 是否可以创建具有空白或占位符值的密钥?

pup*_*eno 2 aws-secrets-manager aws-cdk

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

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

当我运行时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)
Run Code Online (Sandbox Code Playgroud)

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

澄清:我不期望 CDK 创建 OAuth 令牌。我想要实现的是 run cdk deploy,让它失败,转到 Secrets Manager 并找到带有占位符值的秘密,输入该值,cdk deploy再次运行,然后这次成功。

fed*_*nev 5

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

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

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

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

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

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