ubuntu - EC2 用户数据以获取 S3 对象

标签 ubuntu amazon-web-services amazon-s3 amazon-ec2

我有一个 公共(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 .

  • 使用这三个元素,您可以在运行时生成签名 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
    

    请注意,在脚本中,对命令和文件使用完全限定的路径通常是个好主意,因为当前环境的路径和工作目录可能未知或不符合预期。在这种情况下,我假设 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/

    相关文章:

    php - 如何配置 php 以在不重新编译的情况下与 mysql 一起工作

    c++ - 让 G++ 自动使用我的库

    linux - 每次我重新启动虚拟机时,Oracle VM 都会让我安装 Ubuntu

    django - boto.exception.S3ResponseError : S3ResponseError: 400 Bad Request 错误

    bash - 使用 AWS 签名版本 4 的 REST API 调用(无法签署 AWS API 请求)

    shell - inotifywait 与 Docker 命令和变量

    amazon-web-services - 从VPC Terraform社区模块获取subnet_id

    node.js - AWS 弹性 Beanstalk/nginx : connect() failed (111: Connection refused

    java - 如何设置S3文件夹中所有文件的ACL

    amazon-web-services - 尝试使用 cloudFormation 模板创建堆栈时获取 'Error occurred while GetObject. S3 Error Code: NoSuchKey'