Как получить доступ к S3 на AMI в AWS Marketplace?
Я нахожусь в процессе создания 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 Однако, Я не могу понять, как сделать то, что они предлагают. Они предлагают следующее:
- Создайте новую роль экземпляра.
- Добавьте доверительные отношения, которые позволят ec2.amazonaws.com взять на себя эту роль.
- Создайте новую политику, которая определяет необходимые разрешения.
- Добавьте новую политику в новую роль экземпляра.
- Создайте новый экземпляр EC2, который определяет роль IAM.
- Создайте свое приложение с помощью одного из AWS SDK. Не указывайте учетные данные при вызове методов, поскольку SDK автоматически добавляет временные учетные данные.
Ниже я упоминаю, что я сделал для каждого из пунктов выше.
- Готово
- Я не могу добавить доверительные отношения. Я выбираю сервисную роль "Amazon EC2", и "Шаг 3: Установите доверие" автоматически заполняется для меня
3 и 4. Я прикрепляю политику "AmazonS3FullAccess"
- Я запустил новый экземпляр EC2, в котором указана роль, созданная в (1)
Тем не менее, я не уверен, что означает (6)?
Создайте свое приложение с помощью одного из AWS SDK. Не указывайте учетные данные при вызове методов, поскольку 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, мое приложение представляет собой приложение Grails, которое работает на JVM внутри док-контейнера.