我在公共子网中有 EC2实例,
EC2附加了 S3完全访问角色
我在S3文件夹位置有一个 .jar
S3 Bucket具有默认权限,在创建存储桶时应用这些权限。
我想要做的是实现用户数据脚本,
这将从S3 位置下载EC2上的.jar
只有当我将.jar公开时,我才能忘记.jar,
如果我没有在S3 Public上制作.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
答案 0 :(得分:4)
请参阅文档以更好地了解EC2 Instance IAM Roles的工作原理。
S3和其他AWS API无法直接识别实例。请求仍必须签名。 IAM实例角色为您的实例提供了一个易于访问,总是新鲜的相对短暂的临时凭证集 - 熟悉的访问密钥ID和访问密钥,以及还必须用于签名和提交请求的令牌
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
中已安装/usr/local/bin/
CLI可执行文件,并且您要将下载的文件写入/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的使用情况。
答案 1 :(得分:2)
通过wget
检索文件不会传递您的身份。默认情况下,Amazon S3存储桶中的内容是私有的,匿名用户无法使用。
您可以通过API调用或使用AWS Command-Line Interface (CLI)来访问存储分区,例如:
aws s3 cp s3://BUCKET-NAME/FILENAME.zip .
CLI是一个使用Python SDK for AWS的Python应用程序。它知道如何检索由于使用角色启动而分配给实例的凭据。
检查实例上是否安装了CLI。如果没有,请在使用前进行安装。