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

时间:2019-10-03 09:50:19

标签: amazon-web-services yaml aws-codepipeline aws-codebuild aws-secrets-manager

我正在创建与SonarQube集成的CodeBuild,所以我直接在Buildspec.yaml中传递值和声纳凭据

我尝试直接使用以下命令从SecretManager检索以下内容,而不是直接进行硬编码,如以下链接中所述。但是它没有得到正确的值。它会引发错误。

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

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

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

我的使用方式 echo'{{resolve:secretsmanager:arn:aws:secretsmanager:us-east-1:***:secret:*********** ***:SecretString:*******}}'

注意:我的逗号中的*都是密码名和secreturl

3 个答案:

答案 0 :(得分:4)

如果您希望在buildspec文件中检索机密信息,我建议使用与CodeBuild本机集成的Systems Manager参数存储。 Systems Manager本身就是一项服务,请从AWS Console主页上进行搜索,然后在Systems Manager Console页面的左下方找到Paramater Store。

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

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

答案 1 :(得分:4)

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

如果您尝试通过CFN设置代码构建,则可能会看到这种情况。但是,正如shariqmaws提到的,您可以使用参数存储并在其中存储您的秘密,也可以将参数存储用作pass through to secrets manager(以防您想使用Secrets Manager旋转秘密或出于其他原因)。

答案 2 :(得分:2)