EC2用户数据以获取S3对象

Ani*_*aje 0 ubuntu amazon-s3 amazon-ec2 amazon-web-services

在公共子网中有一个EC2实例
该EC2具有附加的S3完全访问角色
在S3文件夹位置中有一个.jar
S3存储桶具有默认权限,创建存储桶时将应用默认权限。

我要做的是实现一个用户数据脚本,
该脚本将从S3位置的EC2上下载.jar
只能够wget的该.jar当我做出的.jar公开

如果未在S3上公开.jar,则无法从EC2中获取它
。出于安全原因,我不想将.jar公开。

我应该怎么做才能从S3中获取.jar,而又不公开.jar?

这是我的用户数据脚本-

#! /bin/bash

sudo timedatectl set-timezone Asia/Kuala_Lumpur

sudo rm -rf /home/ubuntu/jarName.jar

sudo rm -rf /home/ubuntu/nohup.out

/usr/local/bin/aws s3api get-object --bucket myDemoBucket --key folderNameDemo/jarName.jar /home/ubuntu/jarName.jar

cd /home/ubuntu/

sudo nohup java -jar -Dspring.profiles.active=uat jarName.jar > nohup.out &

exit
Run Code Online (Sandbox Code Playgroud)

Mic*_*bot 5

请查阅文档,以更好地了解EC2实例IAM角色如何工作。

S3和其他AWS API无法直接识别实例。请求仍必须签名。哪些IAM实例角色为您的实例提供了一组易于访问,始终新鲜的相对短暂的临时凭证-熟悉的访问密钥ID和访问密钥机密,以及在签名和提交请求时也必须使用的令牌。

  • 使用这三个元素,您可以在运行时生成一个签名的URL并将其传递给wget,或者
  • 您可以使用来获取文件aws-cli,该文件内置了对获取和使用实例角色凭据的支持,或者
  • 如果在您的环境中有意义,则可以将存储桶策略配置为信任实例连接到S3时将使用的IP地址,并允许来自该地址的任何请求成功。如果您正在使用NAT实例或NAT网关,或者在实例上使用弹性IP地址,则这很简单。如果为S3配置VPC端点,则不支持。

以上选择中最简单的也许是使用aws-cli。

/usr/local/bin/aws s3api get-object --bucket example-bucket --key path/in/s3/to/my_object.txt /tmp/local-file-name.txt
Run Code Online (Sandbox Code Playgroud)

请注意,在脚本中,对命令和文件使用完全限定的路径通常是一个好主意,因为当前环境的路径和工作目录可能未知或与预期不符。在这种情况下,我假定aws已经安装了CLI可执行文件,/usr/local/bin/并且您想要将下载的文件写入/tmp/。根据您的环境自定义它们。

另请参阅http://docs.aws.amazon.com/cli/latest/userguide/installing.html进行安装和http://docs.aws.amazon.com/cli/latest/reference/s3api/get-object。该应用程序使用aws-cli的html