Ubuntu 获取S3对象的EC2用户数据

Ubuntu 获取S3对象的EC2用户数据,ubuntu,amazon-web-services,amazon-s3,amazon-ec2,Ubuntu,Amazon Web Services,Amazon S3,Amazon Ec2,我在公共子网中有一个EC2实例 EC2附带了一个S3完全访问角色。 我在S3文件夹中有一个.jar位置。 S3 Bucket具有默认权限,在创建Bucket时应用这些权限。 我要做的是实现一个用户数据脚本, 这将从S3位置下载EC2上的.jar。 只有当我将.jar公开时,才能设置.jar, 如果我没有将S3上的.jar公开,我将无法从EC2中获取它, 出于安全原因,我不想公开.jar 在不公开.jar的情况下,如何从S3获取.jar 这是我的用户数据脚本- #! /bin/bash sudo

我在公共子网中有一个EC2实例
EC2附带了一个S3完全访问角色。
我在S3文件夹中有一个.jar位置。
S3 Bucket具有默认权限,在创建Bucket时应用这些权限。

我要做的是实现一个用户数据脚本,
这将从S3位置下载EC2上的.jar。
只有当我将.jar公开时,才能设置.jar,

如果我没有将S3上的.jar公开,我将无法从EC2中获取它,
出于安全原因,我不想公开.jar

在不公开.jar的情况下,如何从S3获取.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

查阅文档以更好地了解其工作原理

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

  • 使用这三个元素,您可以在运行时生成一个签名URL并将其传递给wget,或者
  • 您可以使用
    aws cli
    获取文件,该cli内置了对获取和使用实例角色凭据的支持,或者
  • 如果在您的环境中有意义,您可以将bucket策略配置为信任实例在连接到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
请注意,在脚本中,通常最好为命令和文件使用完全限定的路径,因为当前环境的路径和工作目录可能未知或不符合预期。在本例中,我假设
aws
CLI可执行文件已安装在
/usr/local/bin/
中,并且您希望将下载的文件写入
/tmp/
。根据您的环境对其进行自定义


有关此应用程序的安装和aws cli的用法,请参见。

通过
wget
检索文件不会传递您的身份。默认情况下,AmazonS3存储桶中的内容是私有的,匿名用户无法访问

您可以通过API调用或使用访问bucket,例如:

aws s3 cp s3://BUCKET-NAME/FILENAME.zip .
CLI是一个Python应用程序,它使用用于AWS的Python SDK。它知道如何检索由于使用角色启动而分配给实例的凭据


检查实例上是否安装了CLI。如果没有,请在使用之前安装它。

但是我需要自动获取.jar,因为它是自动缩放的,那么我该如何实现呢?我曾经使用用户数据bash脚本获取.jar。@Anirudharaje aws cli适合自动化,而且使用起来相当简单。我添加了示例用法和答案的链接。在用户数据脚本中包含该命令。谢谢您的示例,我不需要密钥路径位,对吗?当我使用角色时,
键是对象的路径和文件名。从S3文档中,它指定了您想要的文件,因此,是的,您将需要这个文件。这不是您的AWS访问密钥ID。我已经在问题中添加了一个用户数据脚本,您可以确认它是否正确,或者是否需要进行任何修改吗?我一直在使用用户数据bash脚本从S3获取公开的.jar,我如何使用您的cli命令?因为我想让这个过程自动化?