J'ai un projet CodeBuild avec un buildspec qui nécessite la valeur du mot de passe de la base de données pour fonctionner. Je veux que ce buildspec soit indépendant de l'environnement, mais chaque environnement nécessite un mot de passe de base de données différent. La valeur du mot de passe de la base de données pour chaque environnement est stockée dans le magasin SSM sous sa propre clé.
Quelle serait la meilleure approche pour transmettre le mot de passe de la base de données au projet CodeBuild dans ce scénario ?
En utilisant l'interface de CodeBuild env.parameter-store
Il semble que l'approche recommandée soit d'utiliser la solution intégrée de CodeBuild ( env.parameter-store
), mais alors je devrai charger des mots de passe pour chaque environnement et ensuite sélectionner un mot de passe dans le script de la construction :
# Supported Variables
#---------------------
# - ENVIRONMENT
#
version: 0.2
env:
parameter-store:
DB_PASSWORD_PROD: "/acme/prod/DB_PASSWORD"
DB_PASSWORD_STAGE: "/acme/stage/DB_PASSWORD"
DB_PASSWORD_QA: "/acme/qa/DB_PASSWORD"
phases:
build:
commands:
- |-
case "${ENVIRONMENT}" in
"prod") DB_PASSWORD="${DB_PASSWORD_PROD}" ;;
"stage") DB_PASSWORD=${DB_PASSWORD_STAGE} ;;
"qa") DB_PASSWORD=${DB_PASSWORD_QA} ;;
esac
- echo "Doing something with \$DB_PASSWORD…"
Cela nécessitera trois requêtes au SSM et rendra buildspec plus complexe. Cette approche me semble sous-optimale.
Il existe peut-être un moyen de construire une clé SSM à l'aide de la variable ENVIRONMENT dans le système de gestion de l'information. env.parameter-store
?
Passer les paramètres SSM à partir de CodePipeline
L'autre approche serait de passer le mot de passe du CodePipeline comme une variable d'environnement directement au projet CodeBuild. Cela simplifiera considérablement le buildspec. Mais est-ce sûr du point de vue de la sécurité ?
Obtenir les paramètres SSM manuellement dans le script de CodeBuild
Serait-il préférable d'appeler SSM depuis le script manuellement pour charger la valeur requise ?
# Supported Variables
#---------------------
# - ENVIRONMENT
#
version: 0.2
phases:
build:
commands:
- >-
DB_PASSWORD=$(
aws ssm get-parameter
--name "/acme/${ENVIRONMENT}/DB_PASSWORD"
--with-decryption
--query "Parameter.Value"
--output text
)
- echo "Doing something with \$DB_PASSWORD…"
Cette approche serait-elle plus sûre ?