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

Linux EC2实例中boto3 get_credentials()返回None的问题求助

问题描述

我在Linux EC2实例上尝试手动创建Elasticsearch域的快照并保存至S3存储桶,使用Python客户端代码注册手动快照仓库时,boto3获取凭证返回None。已设置包含access_key、secret_key和region_name的环境变量,但问题仍未解决,代码如下:

import boto3
import requests
from requests_aws4auth import AWS4Auth

host = 'elastic-domain'
region = 'us-east-1' # For example, us-west-1
service = 'es'
credentials = boto3.Session(region_name=region).get_credentials()
print(credentials)
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

# Register repository
path = '_snapshot/elastic-repo' # the Elasticsearch API endpoint
url = host + path

payload = {
  "type": "s3",
  "settings": {
    "bucket": "bucket-name",
    "region": "us-east-1",
    "role_arn": "arn:aws:iam::account-id:role/specified-role"
  }
}

headers = {"Content-Type": "application/json"}

r = requests.put(url, auth=awsauth, json=payload, headers=headers)

print(r.status_code)
print(r.text)
排查方向及解决方法
  • 检查环境变量命名:boto3默认读取的环境变量是AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,确认你设置的变量名是否完全匹配,避免拼写错误。可以在终端执行echo $AWS_ACCESS_KEY_ID和echo $AWS_SECRET_ACCESS_KEY验证变量是否正确加载。
  • EC2实例IAM角色优先级:如果EC2实例关联了IAM角色,boto3会优先使用实例角色的凭证,而非手动设置的环境变量。若实例角色没有Elasticsearch快照和S3访问权限,就会导致凭证获取异常。可以临时移除实例IAM角色测试,或者为实例角色添加对应权限。
  • boto3会话配置:代码中手动指定了region_name,若环境变量中的AWS_DEFAULT_REGION与代码指定的region不一致,可能影响凭证加载。尝试移除region_name=region参数,让boto3自动从环境变量读取区域配置。
  • 进程环境变量刷新:设置环境变量后,需重启运行代码的终端或进程,否则进程无法读取新的环境变量。比如执行export设置变量后,要重新打开终端再运行代码,或者重启相关服务进程。
  • IAM权限与信任关系:确认access_key对应的IAM用户拥有es:ESHttpPut权限(用于注册快照仓库),同时目标S3桶需配置s3:ListBucket、s3:GetObject、s3:PutObject权限;另外,代码中指定的IAM角色需配置信任关系,允许Elasticsearch服务(es.amazonaws.com)扮演该角色访问S3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:50:43