代码之家  ›  专栏  ›  技术社区  ›  MP32

如何安全地传递python函数所需的API密钥和电子邮件凭据?

  •  0
  • MP32  · 技术社区  · 3 年前

    我创建了一个简单的应用程序,只需向我发送一封关于我选择的地点的天气的电子邮件。它在本地正常工作,但现在我需要弄清楚如何安全地传递API密钥和电子邮件登录凭据。目前,我把它们放在一个盒子里。env文件,我不希望它暴露在GitHub上。因为我正在使用Azure DevOps作为我的CI/CD管道,所以我需要在那里传递它们吗?我正在让我的管道构建docker映像,但不确定如何将变量传递到dockerfile构建中。这是我的dockerfile:

    
    # Copy function code
    COPY app.py ${LAMBDA_TASK_ROOT}
    
    # Avoid cache purge by adding requirements first
    COPY requirements.txt ${LAMBDA_TASK_ROOT}
    
    RUN pip install --no-cache-dir -r requirements.txt
    
    ARG WEATHER_API_KEY
    ARG EMAIL_USER
    ARG EMAIL_PASSWORD
    ARG AWS_ACCESS_KEY_ID
    ARG AWS_SECRET_ACCESS_KEY
    ARG AWS_DEFAULT_REGION
    
    ENV WEATHER_API_KEY $WEATHER_API_KEY
    ENV EMAIL_USER $EMAIL_USER
    ENV EMAIL_PASSWORD $EMAIL_PASSWORD
    ENV AWS_ACCESS_KEY_ID $AWS_ACCESS_KEY_ID
    ENV AWS_SECRET_ACCESS_KEY $AWS_SECRET_ACCESS_KEY
    ENV AWS_DEFAULT_REGION $AWS_DEFAULT_REGION
    
    # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
    CMD [ "app.handler" ]
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   The Fool    3 年前

    您既不应该使用源代码管理机密,也不应该将它们添加到映像中。这两种方式都是不安全的。

    通常的做法是在运行时读取env变量。在运行容器时提供这些。

    export API_KEY="$(some-cli get-key mykey)"
    docker run -e API_KEY myimage
    

    或者直接设定,尽管你在历史上也有。

    docker run -e API_KEY="foobar" myimage
    

    然后,代码需要从中读取变量 os.environ 而不是。环境文件。

    根据容器的运行方式,这可能看起来有所不同,但总体思路保持不变。