python - 使用 Boto 自动上传到 AWS S3 存储桶 Yields Expired Token Error
问题描述
对 AWS 非常陌生。我正在尝试使用 python 和 Boto3 将文件目录上传到 AWS
我已经使用终端设置了从控制台提供的各种令牌,然后可以使用 AWS 命令行使用以下命令成功地将文件传输到我的存储桶:
> aws s3 cp C://dog.jpg s3://mybucketname/dog.jpg
现在我想自动化一大堆文件,所以我在 python 3.7 中运行以下代码
import boto3
from botocore.exceptions import ClientError
os.environ['AWS_ACCESS_KEY_ID'] = "provided access key id"
os.environ['AWS_SECRET_ACCESS_KEY'] = "provided secret access key"
os.environ['AWS_SESSION_TOKEN'] = "provided session token"
#create the client
s3 = boto3.client(
's3',
region_name = 'ca-central-1',
aws_access_key_id=os.environ.get('AWS_ACCESS_KEY_ID'),
aws_secret_access_key=os.environ.get('AWS_SECRET_ACCESS_KEY'),
aws_session_token=os.environ.get('AWS_SESSION_TOKEN'),
)
def upload_file(s3_client, file_name, bucket, object_name=None):
"""Upload a file to an S3 bucket
:param s3_client: client to upload with
:param file_name: File to upload
:param bucket: Bucket to upload to
:param object_name: S3 object name. If not specified then file_name is used
:return: True if file was uploaded, else False
"""
# If S3 object_name was not specified, use file_name
if object_name is None:
object_name = file_name
#try the upload
try:
response = s3_client.upload_file(file_name, bucket, object_name)
except ClientError as e:
logging.error(e)
return False
return True
upload_file(s3,'c:\\dog.jpg','mys3bucket','doggy.jpg')
我收到以下错误
调用 PutObject 操作时出错 (ExpiredToken):提供的令牌已过期。
我使用了与之前完全相同的密钥/凭据。我错过了什么?
谢谢。
解决方案
AWS_SESSION_TOKEN
- 仅当您使用临时凭证时才需要。
你能确定你使用的是临时凭证吗?就像您正在担任一个角色或者您正在做一个网络身份联合。
如果没有,请将其从您的代码中删除
s3 = boto3.client(
's3',
region_name = 'ca-central-1',
aws_access_key_id=os.environ.get('AWS_ACCESS_KEY_ID'),
aws_secret_access_key=os.environ.get('AWS_SECRET_ACCESS_KEY')
)
推荐阅读
- javascript - 切换按钮 - 显示/隐藏信息
- android - 我可以在 Android 应用程序中创建一个 API,以便服务器可以调用这个 API
- machine-learning - Huggingface gpt2语言模型代码中的perplexity在哪里计算?
- r - R:沿维度重复数组的更快方法?
- flutter - 按时间顺序对 Firestore 集合中的文档进行排序
- python - Numpy 矢量化签名
- excel - 在使用 Cellfie 插件将 Excel 电子表格中的数据导入 Protege 5.5 的细化规则方面需要帮助
- python - 从二维列表中找到形成正方形的 4 个点
- python-3.x - Python中的Shebang线
- sql - 在 SQL 上使用 GROUP BY 来获取我的交易表的摘要(买卖)