首页 > 解决方案 > 使用 Python 3 测试从 EC2 实例到 S3 的连接

问题描述

我正在尝试确定 EC2 实例是否可以访问 S3。目前我正在通过上传来做到这一点:

try:
    # Create empty ping file
    subprocess.run(['touch', '/tmp/ping'])

    # Run upload commands
    upload_result = subprocess.run(['aws', 's3', 'cp', '/tmp/ping', 's3://mybucket/ping'])
    
    # Check if it succeeded
    upload_result.check_returncode()
except Exception as e:
    print('Could not reach S3')

但是,我想知道是否有更有效(非 boto)的方式来做到这一点。EC2 实例没有s3:getObject权限,只有s3:putObject预期的权限。但是,如果有一种方法可以通过简单的 HTTPS 请求或类似的方式来建立它,我很想听听。

标签: python-3.xamazon-web-servicesamazon-s3amazon-ec2

解决方案


这里有几件事不理想:

  1. 向 awscli 发起攻击(我会改用 boto3 SDK)
  2. 调用变异操作 (PutObject) 只是为了测试连接性

您可能会考虑授予此 Lambda 函数对特定标记对象(例如 s3://mybucket/headtest)的读取权限,然后针对它调用HeadObject


推荐阅读