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

使用角色通过Python脚本访问S3是否需AWS访问密钥与密码?

解决boto3找不到凭证访问S3的问题

首先,不需要强制在~/.aws/credentials文件中存储长期访问密钥与密码——既然你已经拥有AWS角色,应该利用角色的临时凭证机制来获取访问权限,这比长期密钥更安全。

以下是针对角色场景的几种可行方案:

  • 在AWS托管服务上运行脚本:如果你的脚本在EC2实例、EKS Pod、ECS任务等AWS内部服务上运行,只要给这些资源关联了你的AWS角色,boto3会自动从实例元数据服务(IMDS)获取临时凭证,无需手动配置任何凭证文件。

  • 本地测试用角色切换配置:在本地开发环境运行脚本时,可通过~/.aws/config文件配置角色切换,而非credentials文件。示例配置如下:

    [profile my-role-profile]
    role_arn = arn:aws:iam::123456789012:role/YourRoleName
    source_profile = default
    

    其中source_profile是本地已有的基础凭证(需具备STS AssumeRole权限),运行脚本时指定该profile即可:

    import boto3
    session = boto3.Session(profile_name='my-role-profile')
    s3 = session.client('s3')
    
  • 手动调用STS获取临时凭证:若上述方式不适用,可在脚本中直接调用STS服务获取角色临时凭证,再传入boto3:

    import boto3
    
    sts_client = boto3.client('sts')
    response = sts_client.assume_role(
        RoleArn='arn:aws:iam::123456789012:role/YourRoleName',
        RoleSessionName='MySessionName'
    )
    
    credentials = response['Credentials']
    s3 = boto3.client(
        's3',
        aws_access_key_id=credentials['AccessKeyId'],
        aws_secret_access_key=credentials['SecretAccessKey'],
        aws_session_token=credentials['SessionToken']
    )
    
  • 排查常见问题:若仍报凭证找不到,检查以下几点:

    • 确认AWS角色已正确关联到运行脚本的资源(或本地profile配置的角色ARN无误)
    • 角色权限策略是否包含S3访问权限(如s3:ListBucket、s3:GetObject等)
    • 本地环境是否存在冲突的AWS环境变量(如AWS_ACCESS_KEY_ID),这类变量会优先于配置文件生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:45:45