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

从Linux服务调用程序时,如何配置AWS凭证与配置文件?

解决Linux服务运行Python S3上传程序的凭证问题

我猜你现在卡壳的核心点是:终端用自己的用户能正常传文件到S3,但做成Linux服务后就不行了——原因很简单,你通过aws config配置的凭证存在个人用户目录(比如/home/你的用户名/.aws)里,而Linux系统服务默认是用root或者专门的系统用户(比如nobody)运行的,这些用户的家目录里根本没有.aws文件夹,自然读不到凭证。

下面给你几个靠谱的解决办法,按推荐程度排序:

1. 让服务用你的个人用户身份运行(最省心)

既然你的个人用户已经配好凭证了,直接让服务继承这个环境就行。修改你的服务配置文件(一般在/etc/systemd/system/你的服务名.service):

[Service]
User=你的用户名
Group=你的用户组
ExecStart=/path/to/你的python解释器 /path/to/你的上传脚本.py
# 其他原有配置...

修改完后重新加载配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart 你的服务名.service

这样服务就会用你的用户身份运行,能直接读取~/.aws里的凭证,和你终端运行的环境完全一致。

2. 给服务运行的用户单独配置凭证

如果不想让服务用你的个人用户,也可以给服务默认的运行用户(比如root)配置凭证:

  • 切换到服务运行的用户:
    sudo su - root  # 如果服务用root运行
    # 要是你创建了专门的服务用户,就用 sudo su - 服务用户名
    
  • 运行aws configure重新输入你的IAM凭证,这样会在该用户的家目录(比如/root/.aws)下生成凭证文件。
  • 退出用户后重启服务即可。

3. 代码里硬编码凭证(临时测试可用,生产绝对别用)

虽然能解决问题,但把凭证直接写在代码里风险极高,一旦代码泄露,你的AWS密钥就没了。仅用于临时测试:

s3client = boto3.client(
    's3',
    aws_access_key_id='你的ACCESS_KEY',
    aws_secret_access_key='你的SECRET_KEY'
)
s3client.upload_file(FILE_PATH, BUCKET_NAME, FILE_PATH)

4. 给服务器绑定IAM角色(生产环境最佳实践)

如果你的Linux服务器是AWS EC2实例,最安全的方式是给EC2绑定IAM角色:

  • 在AWS控制台创建一个IAM角色,添加仅允许上传到目标S3桶的权限策略(比如只给s3:PutObject权限,别给全S3权限)。
  • 把这个角色绑定到你的EC2实例上。
  • 代码里不需要任何凭证配置,直接初始化boto3客户端就行,它会自动从EC2实例元数据获取临时权限。

最后提醒一句:不管用哪种方法,都要遵循最小权限原则——只给凭证/角色刚好能完成上传的权限,别给多余权限,降低安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:12:28