我正在使用 Docker 构建一系列应用程序,并希望安全地存储我的 api key 、数据库访问 key 等。为了使我的应用程序更安全,我将我的配置文件存储在密码保护、压缩、卷设置为只读。我可以使用 ZipFile
python 包来访问它以读取配置,包括使用密码。
但是,出于显而易见的原因,我不想将密码显式存储在图像中。我玩过passlib
为密码生成哈希值并进行比较。虽然我可以将散列存储在图像中的文件中,但生成我想做的散列而不将值存储在图像的图层中。
这样做是个好习惯吗? Dockerfile
我想到的是如下所示:
FROM my_custom_python_image:3.6
WORKDIR /app
COPY . /app
RUN python -m pip install -r requirements.txt
RUN python create_hash.py --token 'mysecret' >> myhash.txt
# The rest of the file here
和
create_hash.py
看起来像:from passlib.hash import pbkdf2_sha256
import argparse
# Logic to get my argparse token flag
hash = pbkdf2_sha256.encrypt(args.token, rounds=200000, salt_size=16)
print(hash)
如果我的
Dockerfile
不存储在图像中并且文件系统是只读的,是我放入--token
的值存储?如果是的话,这里有什么好的解决方法?同样,最终目标是使用 context.verify(user_token, hash)
通过user_token
至ZipFile
并且不在任何地方明确存储密码
最佳答案
您应该将这些值作为运行时部署的一部分传递,而不是构建时间。
它使您的应用程序更灵活(因为它可以在不同的环境中使用,只需更改参数)并且更安全,因为 key 根本不存在。
在部署期间安全地传递值更多地取决于部署的环境和功能
关于python-3.x - 在 Docker 镜像中安全地存储哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51215343/