如何在 buildspec.yaml 中检索 Secret Manager 数据

How to retrieve Secret Manager data in buildspec.yaml

我正在创建与 SonarQube 集成的 CodeBuild,所以我直接在 Buildspec.yaml

中传递值和声纳凭证

我尝试使用 SecretManager 中的以下命令来检索,而不是直接进行硬编码,如下面 link 中提到的那样。但它没有得到正确的值。它会引发错误。

命令:'{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}'

Link: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-secretsmanager

错误 [错误] SonarQube 服务器 [{{resolve:secretsmanager:arn:aws:secretsmanager:us-east-1:*********:secret :**********:SecretString:SonarURL}}] 无法访问

我如何使用 echo '{{resolve:secretsmanager:arn:aws:secretsmanager:us-east-1:***:secret:****** ********:SecretString:*******}}'

注意:我的commard里面所有的*都是secretname和secreturl

如果您希望在构建规范文件中检索机密,我建议使用与 CodeBuild 原生集成的 Systems Manager Parameter Store。 Systems Manager本身就是一个服务,在AWS控制台首页搜索,Paramater Store在Systems Manager控制台页面的左下角。

假设您要在 buildspec.yml 文件中包含访问密钥和秘密密钥:
- 为 IAM 用户
创建 AccessKey/SecretKey 对 - 将上述密钥保存在 SSM 参数存储中作为安全字符串(例如“/CodeBuild/AWS_ACCESS_KEY_ID”和“/CodeBuild/AWS_SECRET_ACCESS_KEY”)
- 使用以下构建规范指令导出构建环境中的两个值:

version: 0.2
env:
    parameter-store:
        AWS_ACCESS_KEY_ID_PARAM: /CodeBuild/AWS_ACCESS_KEY_ID
        AWS_SECRET_ACCESS_KEY_PARAM: /CodeBuild/AWS_SECRET_ACCESS_KEY

phases:
    build:
        commands:
            - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID_PARAM
            - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY_PARAM
            # Your Ansible commands below
            - ansible-playbook -i hosts ec2-key.yml 

[1] CodeBuild 构建规范参考 - 构建规范语法 - https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-syntax

您尝试使用的动态引用语法仅适用于 Cloud Formation (CFN) 服务。在某些情况下,CFN 会限制这些对秘密的动态引用的扩展位置。具体来说,它们不会在控制台中可能显示机密的地方展开,例如在 EC2 元数据中。

如果您尝试通过 CFN 设置代码构建,这可能就是您所看到的。但是,正如 shariqmaws 所提到的,您可以使用参数存储并将您的秘密存储在那里,或者将参数存储用作 pass through to secrets manager(如果您想使用秘密管理器轮换您的秘密或出于其他原因)。

CodeBuild 今天刚刚发布 - https://aws.amazon.com/about-aws/whats-new/2019/11/aws-codebuild-adds-support-for-aws-secrets-manager/