CICD AWS Secrets Manager – 如何确定要注入哪些秘密

76次阅读
没有评论

问题描述

正在实施GitLab CI流水线上的”秘密注入”。这些秘密存储在AWS Secrets Manager中。
目标是在部署解决方案之前,创建一个包含秘密的appsettings.json文件,并将此文件添加到构建产物中。
考虑以下两种情况A)和B):
A)
一个数据库DB1。
一个使用Lambda Layer的Lambda函数,该Lambda Layer具有访问DB1的代码。
1. Lambda函数的流水线如何知道函数需要与数据库通信(因此在部署函数之前注入凭据)?

B)
四个数据库DB1、DB2、DB3和DB4。
一个使用两个Lambda Layer的Lambda函数,每个Lambda Layer都有访问不同数据库的代码 – 第一个Layer可以访问DB1,另一个Layer可以访问DB3。
1. 与情况A)中的问题1相同。
2. Lambda函数的流水线如何知道函数需要调用哪个数据库(因此注入正确的凭据)?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在CICD流水线中,可以使用环境变量来确定需要注入哪些秘密。通过在流水线配置中设置环境变量,可以将这些秘密传递给构建和部署过程。
以下是在GitLab CI流水线中实现的步骤:
1. 打开GitLab项目的CI/CD设置。
2. 在”Variables”部分,添加需要注入的秘密作为环境变量。例如,可以添加一个名为DB_PASSWORD的环境变量,并将其值设置为数据库的密码。
3. 在流水线配置文件中,使用这些环境变量来创建appsettings.json文件。可以使用脚本或其他工具来生成这个文件,并将其添加到构建产物中。
以下是一个示例的GitLab CI流水线配置文件:

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - echo "Generating appsettings.json"
    - echo "{ \"db_password\": \"$DB_PASSWORD\" }" > appsettings.json
  artifacts:
    paths:
      - appsettings.json

deploy:
  stage: deploy
  script:
    - echo "Deploying the solution"
    # 添加部署步骤

在上面的示例中,我们定义了两个阶段:builddeploy。在build阶段中,我们使用环境变量DB_PASSWORD来生成appsettings.json文件,并将其添加到构建产物中。在deploy阶段中,可以添加适当的部署步骤来部署解决方案。

方案2

如果有多个数据库和Lambda函数,可以使用不同的环境变量来确定每个函数需要访问的数据库。在流水线配置中,可以为每个函数设置不同的环境变量,并在构建和部署过程中使用这些环境变量。
以下是在GitLab CI流水线中实现的步骤:
1. 打开GitLab项目的CI/CD设置。
2. 在”Variables”部分,为每个Lambda函数添加需要注入的秘密作为环境变量。例如,可以为第一个Lambda函数添加一个名为DB1_PASSWORD的环境变量,并将其值设置为访问DB1所需的密码。为第二个Lambda函数添加一个名为DB3_PASSWORD的环境变量,并将其值设置为访问DB3所需的密码。
3. 在流水线配置文件中,使用这些环境变量来创建appsettings.json文件。可以使用脚本或其他工具来生成这个文件,并将其添加到构建产物中。
以下是一个示例的GitLab CI流水线配置文件:

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - echo "Generating appsettings.json"
    - echo "{ \"db1_password\": \"$DB1_PASSWORD\", \"db3_password\": \"$DB3_PASSWORD\" }" > appsettings.json
  artifacts:
    paths:
      - appsettings.json

deploy:
  stage: deploy
  script:
    - echo "Deploying the solution"
    # 添加部署步骤

在上面的示例中,我们为每个Lambda函数定义了不同的环境变量DB1_PASSWORDDB3_PASSWORD,并在构建阶段中使用这些环境变量来生成appsettings.json文件。

请注意,这只是一种实现CICD流水线中秘密注入的方法。根据你的具体需求和工具的不同,可能会有其他方法来实现相同的目标。

正文完