如何在没有API密钥的情况下导入Amazon S3存储桶?

时间:2017-07-11 20:40:23

标签: python amazon-web-services amazon-s3 boto

根据我的研究,似乎S3存储桶通常是从API Key所源自的同一AWS账户下载的。

我已获得访问新AWS账户的权限,此帐户包含我需要每天下载的S3存储桶。问题是我的API密钥与另一个AWS账户相关联。有没有办法将新的S3存储桶导入我现有的AWS账户,或者尝试在已经拥有我需要的S3存储桶的AWS账户上创建新的API密钥更简单?

我正在使用python和boto3。谢谢!

1 个答案:

答案 0 :(得分:0)

Amazon S3存储桶的所有者可以添加存储桶策略,该策略允许公开或特定AWS用户访问,包括来自其他AWS账户的用户。这样,您可以使用帐户A中的凭据访问帐户B中的存储桶。

例如,此Bucket Policy授予对其他帐户中用户的访问权限:

{
  "Id": "S3Access",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DownloadFiles",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/fred"
        ]
      }
    },
    {
      "Sid": "ListFiles",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/fred"
        ]
      }
    }
  ]
}

可以通过查看IAM管理控制台中的IAM用户来获取ARN。

我建议不要每次下载整个存储桶,而是使用AWS Command-Line Interface (CLI),它有一个方便的aws s3 sync命令。这可以将文件与Amazon S3同步,并且只复制自上次同步以来添加或修改的文件。您可以定期运行它(例如每小时)以获得桶的本地副本,其概念与DropBox类似。