我有一个 公共(public)子网中的 EC2 实例 ,
EC2 有一个 S3 完全访问角色 附在它上面。
我有一个 S3 文件夹中的 .jar 地点。
S3 存储桶具有默认权限,在创建存储桶时应用。
我想要做的是实现一个用户数据脚本,
那将从 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
最佳答案
查阅文档以更好地了解 EC2 Instance IAM Roles工作。
S3 和其他 AWS API 无法直接识别实例。请求仍然必须签名。哪些 IAM 实例角色为您的实例提供易于访问、始终新鲜的一组相对较短的临时凭证——熟悉的访问 key ID 和访问 key secret ,以及在签署和提交您的请求时也必须使用的 token .
aws-cli
获取文件,它具有对获取和使用实例角色凭据的内置支持,或 上述选择中最简单的可能是使用 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/
.根据您的环境自定义这些。另见 http://docs.aws.amazon.com/cli/latest/userguide/installing.html安装和http://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html用于此应用程序的 aws-cli。
关于ubuntu - EC2 用户数据以获取 S3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39280251/