Я создаю образ 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 внутри док-контейнера.
http://169.254.169.254/latest/meta-data/iam/security-credentials/<role-name>
, где<role-name>
— имя роли, используемое в (1). - person Anthony   schedule 15.12.2016