0

我正在为我的应用程序创建一个 AMI 并将其放在 AWS Marketplace 上。我的应用程序需要访问存储上传到我的应用程序的文档的 S3 存储桶。启动我的应用程序时,我要求用户输入访问密钥、密钥和存储桶名称,如下所示:

docker run -d  --name ourcontainername -e UPLOAD_ACCESS=<access_key> -e UPLOAD_SECRET=<secret_key> -e UPLOAD_BUCKET=<bucket> ourimagename

但是,AWS Marketplace 似乎不允许这种做法。

但是,对于 AWS Marketplace,我们要求应用程序作者使用 AWS Identity and Access Management (IAM) 角色,并且不允许使用访问或密钥。

我正在阅读本文档,其中建议了为此使用 IAM 角色的方法:https ://d0.awsstatic.com/whitepapers/strategies-for-managing-access-to-aws-resources-in-aws-marketplace.pdf但是,我无法理解如何按照他们的建议去做。他们提出以下建议:

  1. 创建一个新的实例角色。
  2. 添加允许 ec2.amazonaws.com 代入该角色的信任关系。
  3. 创建一个指定所需权限的新策略。
  4. 将新策略添加到新实例角色。
  5. 创建一个指定 IAM 角色的新 EC2 实例。
  6. 使用 AWS 开发工具包之一构建您的应用程序。调用方法时不要指定凭据,因为 SDK 会自动添加临时凭据。

下面我会提到我为上述每一点所做的工作。

  1. 完毕
  2. 我无法添加信任关系。我选择“Amazon EC2”服务角色,“第 3 步:建立信任”会自动为我填写

在此处输入图像描述

3 和 4. 我附上了“AmazonS3FullAccess”政策

  1. 我启动了一个新的 EC2 实例,它指定在 (1) 中创建的角色

但是,我不确定(6)是什么意思?

使用 AWS 开发工具包之一构建您的应用程序。调用方法时不要指定凭据,因为 SDK 会自动添加临时凭据。

在我创建的新实例上,当我这样做时

[ec2-user@ip-172-31-42-131 ~]$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<rolename>

我可以看到 ACCESS_KEY、SECRET_KEY 和 TOKEN。我的应用程序应该改用这些吗?

FWIW,我的应用程序是在 Docker 容器内的 JVM 上运行的 Grails 应用程序。

4

0 回答 0