如何在Makefile中获取AWS机密

2024-05-14 18:40:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Makefiles的新手,想知道如何将AWS机密存储在Makefile中的AWS机密管理器中,并设置将在Makefile中进一步使用的变量。这些变量将用于连接MySQL(用户名、密码)。因此,如果我能够在DB_password:=中获得密码秘密值

我成功地从下面的链接中获得了“python代码”中的秘密(您可以直接转到下面链接页面末尾的代码): https://www.capside.com/labs/using-aws-secrets-manager/

然而,我在Makefile中找不到任何方法

我的文件看起来像:

DB := prod
# DB := staging

ifeq ($(DB),staging)
DB_HOST := <staging database>
OBJ_DIR := ./obj/staging
else
DB_HOST := <prod database>
OBJ_DIR := ./obj/prod
endif
DB_PASSWORD := <password>
DB_USER := <user>
DB_PORT := 3306
DB_DATABASE := <database name>

MKDIR := mkdir -p
RM := rm
SRC_DIR := ./sql
SRC_FILES := $(wildcard $(SRC_DIR)/*.sql)
OBJECTS := $(SRC_FILES:%.sql=%.o)
OBJECTS := ${subst $(SRC_DIR),$(OBJ_DIR),$(OBJECTS)}

export MYSQL_PWD=$(DB_PASSWORD)

all: deploy

$(OBJ_DIR):
    $(MKDIR) $@

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.sql
    @cat $< | mysql -h $(DB_HOST) -P $(DB_PORT) -u $(DB_USER) $(DB_DATABASE)
    @touch $@
    @echo "Deploy of $< !"

clean:
    $(RM) $(OBJECTS)

deploy: $(OBJ_DIR) $(OBJECTS)
    @echo 'CALL create_views();' | mysql -h $(DB_HOST) -P $(DB_PORT) -u $(DB_USER) $(DB_DATABASE)
    @echo "Deploy complete on $(DB) !"

注意/提示:AWS CLI也可以检索机密: https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html


Tags: srcawsobjhostdbsqlobjectsport
1条回答
网友
1楼 · 发布于 2024-05-14 18:40:45

因为您知道如何使用AWS CLI获取机密,所以可以使用JQ从输出中获取值

试着这样做:

get-secret-username: 
@ $(eval USERNAME = $(shell aws secretsmanager get-secret-value  secret-id vikings-aurora-postgres-secret | jq -r '.SecretString' | jq '.username'))
@ echo "username: $(USERNAME)"

在本例中,我使用JQ的-r解析secretmanager中的SecretString(这是一个带有转义字符的JSON字符串),然后从第一个JQ命令的结果中获得我想要的值

请参阅JQ手册中有关调用JQ的内容,以更好地了解原始输出: https://stedolan.github.io/jq/manual/#Invokingjq

编辑了使用JQ的^{}实现更惯用解决方案的答案

get-secret-username: 
@ $(eval USERNAME = $(shell aws secretsmanager get-secret-value  secret-id vikings-aurora-postgres-secret | jq '.SecretString | fromjson | .username'))
@ echo "username: $(USERNAME)"

相关问题 更多 >

    热门问题