Задачи ECS могут быть назначены роли IAM, чтобы обеспечить возможность взаимодействия с API AWS без необходимости передавать учетные данные пользователя в задачу. Это работает как для интерфейса командной строки AWS, так и для SDK. Здесь есть неплохая документация здесь, но я не смог найти подходящий пример, охватывающий все детали, я создам вопрос для самостоятельного ответа, чтобы избавить других от боли.
Как назначить роль IAM для задачи ECS
Ответы (1)
Я создал репозиторий Git с полным примером. Важные моменты:
- Создание определения роли IAM с помощью AssumeRolePolicyDocument.
- Присвоение задаче роли IAM.
Используя AWS JS SDK.
IAMRole: Type: AWS::IAM::Role Properties: RoleName: !Sub role-task-${AWS::StackName} # Doesn't matter too much but let's make it nice anyway Path: / # No idea about this one but / seems to work # This is the funky stuff.. don't try to understand just copy-paste. Source: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_IAM_role.html AssumeRolePolicyDocument: | { "Statement": [{ "Effect": "Allow", "Principal": { "Service": [ "ecs-tasks.amazonaws.com" ]}, "Action": [ "sts:AssumeRole" ] }] } Policies: - PolicyName: !Sub ecs-task-${AWS::StackName} # You can add any actions here you want your container to be allowed to execute. PolicyDocument: { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" # more actions if needed ], "Resource": "*" }] }
Инициализация AWS SDK. AWS SDK автоматически обнаружит, что контейнер имеет доступ к учетным данным роли, и инициализирует себя. Вам не нужно выполнять никакой инициализации, кроме создания объектов API.
var AWS = require('aws-sdk');
var cw = new AWS.CloudWatch();
var s3 = new AWS.S3();
person
adam.sandor
schedule
16.09.2017
Вам не нужно вручную получать учетные данные или инициализировать SDK с этими учетными данными; все SDK (после того, как функция была введена) должны делать это автоматически. Проверьте здесь для минимальных версий SDK.
- person Samuel Karp; 18.09.2017
Как тогда выглядел бы код инициализации? Только 1_ ? Я пытался заставить его работать без ручного получения учетных данных, но мне это не удалось.
- person adam.sandor; 20.09.2017
Я не знаком с SDK для JavaScript, но похоже, что цепочка поставщиков учетных данных по умолчанию верна: github.com/aws/aws-sdk-js/blob/
- person Samuel Karp; 22.09.2017
Таким образом, решение состоит в том, что вам вообще не следует возиться с AWS.Config. Можете ли вы сейчас проверить, правильно ли это @SamuelKarp?
- person adam.sandor; 27.09.2017