创build一个自动访问私有S3的Amazon EC2实例

我在想。 假设我在一个专用的S3存储桶中有一个文件,然后我在其rc.local中部署一个类似这样的EC2实例:

GET http://privateamazons3url.com

我该如何做到这一点,以便我自动部署的EC2实例可以访问我的私有S3存储桶,而无需通过AWS控制面板手动添加它。

我问的原因是因为我打算从另一台服务器使用快照映像使用Python boto脚本远程部署我的EC2实例,并且快照映像将包括从我的私有S3存储桶下载文件。

选项1

如果您的新实例在启动后立即下载文件,那么您可以创build一个有时间限制的公用文件:

  1. 为您要下载的文件生成一个有时间限制的url。 见http://docs.aws.amazon.com/AmazonS3/latest/dev/S3_QSAuth.html
  2. 启动您的新实例,将生成的URL传递给用户数据。
  3. 在你的新实例中,读取用户数据并下载文件。

通过以上操作,您的EC2实例不需要凭证。 不过,您的公开url在短时间内是公开的。

选项2

在EC2“angular色”中启动您的新实例。 请参阅http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingIAM.html#UsingIAMrolesWithAmazonEC2Instances

当您使用EC2angular色时,您的实例会定期自动生成自动生成的访问密钥。 所以你不必在你的服务器上保存凭据。 相反,您的AWS客户端将不断向AWS请求使用随时间而改变的新密钥。

这样,您可以给EC2angular色一个允许S3访问您的文件的IAM策略。

如果您想在快照的查询string中公开s3 api信息,则可以使用以下命令

http://docs.aws.amazon.com/AmazonS3/latest/dev/S3_QSAuth.html

你也可以使用IAM来创build一个限制访问这个桶的用户,并且它将生成一个新的API密钥对用于查询string。