You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker容器的AWS Lambda函数中使用python-gnupg导入私钥?

问题:Lambda Docker容器中GPG导入私钥失败

背景

尝试部署Docker容器化的Python Lambda函数,功能是连接FTP获取加密文件并解密。使用gpg结合私钥解密,已通过Dockerfile安装gnupg,但导入私钥时持续报错:

gpg: Fatal: can't create directory /home/sbx_user1051/.gnupg: No such file or directory
gpg returned a non-zero error code: 2

当前Dockerfile

FROM amazon/aws-lambda-python:3.9
RUN yum update
RUN yum install -y gnupg
RUN yum -y install gcc g++ sudo
COPY requirements.txt  .
RUN  pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

COPY . ${LAMBDA_TASK_ROOT}

CMD [ "app.handler" ] 

当前Python代码片段

import gnupg
import os

my_gpg = gnupg.GPG(gpgbinary="/usr/bin/gpg")
my_gpg.import_keys_file("/var/task/keys/priv_key.asc", passphrase=os.getenv("PASSPHRASE"))

解决方案

方案1:手动创建默认GPG目录并配置权限

Lambda运行时使用sbx_user1051用户,该用户无权限在/home下自动创建目录。在Dockerfile中添加命令创建目录并设置正确权限:

修改后的Dockerfile:

FROM amazon/aws-lambda-python:3.9
RUN yum update -y && yum install -y gnupg gcc g++ sudo
# 创建GPG目录并设置权限
RUN mkdir -p /home/sbx_user1051/.gnupg && \
    chown -R sbx_user1051:sbx_user1051 /home/sbx_user1051/.gnupg && \
    chmod 700 /home/sbx_user1051/.gnupg
COPY requirements.txt  .
RUN  pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

COPY . ${LAMBDA_TASK_ROOT}

CMD [ "app.handler" ] 

方案2:指定GPG工作目录到Lambda可写路径

Lambda容器中/var/task目录是可写的,可将GPG的home目录指定到这里,避免权限问题:

  1. 修改Python代码,指定homedir参数:
import gnupg
import os

# 指定GPG工作目录到/var/task下的.gnupg
my_gpg = gnupg.GPG(gpgbinary="/usr/bin/gpg", homedir="/var/task/.gnupg")
my_gpg.import_keys_file("/var/task/keys/priv_key.asc", passphrase=os.getenv("PASSPHRASE"))
  1. 在Dockerfile中提前创建该目录并设置权限:
FROM amazon/aws-lambda-python:3.9
RUN yum update -y && yum install -y gnupg gcc g++ sudo
# 创建自定义GPG目录
RUN mkdir -p /var/task/.gnupg && chmod 700 /var/task/.gnupg
COPY requirements.txt  .
RUN  pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

COPY . ${LAMBDA_TASK_ROOT}

CMD [ "app.handler" ] 

关键说明

  • GPG要求密钥目录权限必须为700(仅所有者可读写执行),否则会拒绝操作,所以必须设置chmod 700。
  • 两种方案任选其一即可,方案2更灵活,避免依赖/home目录的用户权限限制。

内容的提问来源于stack exchange,提问作者Jeff Gruenbaum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:00:19