【问题标题】:How to retrieve Secret Manager data in buildspec.yaml如何在 buildspec.yaml 中检索 Secret Manager 数据
【发布时间】:2020-02-01 14:53:28
【问题描述】:

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

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

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

链接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:*******}}'

注意:我的命令中的所有 * 都是 secretname 和 secreturl

【问题讨论】:

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


    【解决方案1】:

    如果您希望检索构建规范文件中的机密,我建议使用与 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”)
    - 使用以下 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

    【讨论】:

    • 感谢您的快速转身,帮助我了解有关 Parameter Store 的一些想法。
    • 您能否举例说明如何在 CodeBuild 和 CodePipeline 中使用它?对于 buildspec.yaml 参数存储:CUSTOM_PARAM:/aws/reference/secretsmanager/DBUser1 例如:我有一个名为“SajivSecret”的秘密,它几乎没有键和值对。其中一个名为“DBUser1”的Key和一个名为“***”的Value。我想在我的 buildspec.yaml 文件中检索这个特定的密钥我的问题是,它会在 Secret Manager 的所有密钥中查找名为 DBUSer1 的密钥还是作为 DBUser1 的密钥
    • 如何在参数存储下 buildspec.yaml 中的 Secret Manager 中检索特定于我的 Secret 的秘密
    • @SajivSriraam 它将查找名为 DBUSer1 的 Secret -“当您从 Parameter Store 检索 Secrets Manager 密钥时,参数名称必须以以下保留路径开头:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager " - docs.aws.amazon.com/systems-manager/latest/userguide/…
    • @committedandroider - 我在哪里可以找到秘密管理器中的秘密 ID。我可以看到 SecretKey Name、Secret Name、Secret ARN
    【解决方案2】:

    【讨论】:

    • 这应该是公认的答案。这是对op的问题最直接的解决方案。
    • 是的,这就是答案。 docs.aws.amazon.com/codebuild/latest/userguide/… 在以下示例中,TestSecret 是存储在 Secrets Manager 中的键值对的名称。 TestSecret 的键是 MY_SECRET_VAR。您可以在构建期间使用 LOCAL_SECRET_VAR 名称访问该变量。 env:秘密管理器:LOCAL_SECRET_VAR:“TestSecret:MY_SECRET_VAR”
    【解决方案3】:

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

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

    【讨论】:

    • 您能否举例说明如何在 CodeBuild 和 CodePipeline 中使用它?对于 buildspec.yaml 参数存储:CUSTOM_PARAM:/aws/reference/secretsmanager/DBUser1 例如:我有一个名为“SajivSecret”的秘密,它几乎没有键和值对。其中一个名为“DBUser1”的Key和一个名为“***”的Value。我想在我的 buildspec.yaml 文件中检索这个特定的密钥我的问题是,它会在 Secret Manager 的所有密钥中查找名为 DBUSer1 的密钥还是作为 DBUser1 的密钥
    猜你喜欢
    • 2021-07-17
    • 2023-01-30
    • 2021-06-29
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 2020-12-02
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多