AWS JAVA SDK - Могу ли я программно получить доступ к другим сервисам с помощью aws sdk, запущенного в той же учетной записи aws, без учетных данных жесткого кодирования?

У меня есть java-код, работающий в кластере fargate, мне нужно получить доступ к другим службам aws из кода java с помощью aws sdk. Прямо сейчас у меня есть жестко запрограммированный доступ / секрет / токен внутри класса java, и он работает нормально.

BasicSessionCredentials sessionCredentials = new BasicSessionCredentials(accessKey, secretAccessKey, token);

Поскольку я запускаю java-код из той же учетной записи aws, есть ли лучший способ, чтобы мне не приходилось жестко кодировать учетные данные?


person user10916892    schedule 11.11.2020    source источник


Ответы (2)


Да, вы всегда можете назначить своей задаче роль задачи. Затем SDK автоматически определит учетные данные и будет использовать их при выполнении запросов.

Политика доверия будет выглядеть примерно так:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Затем необходимо указать документ политики. После этого SDK выполнит сброс. Дополнительную информацию можно найти в документации AWS здесь: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html

person Aleksander Wons    schedule 11.11.2020

Я получил его, используя DefaultAWSCredentialsProviderChain.java при создании целевого клиента службы. Наряду с этим я добавил разрешения для целевой службы в роли, прикрепленной к вызывающей службе. Например - если код, выполняющийся внутри задач ECS, должен вызывать службу SSM, добавьте разрешения для роли, прикрепленной к задачам ECS, для выполнения действий в SSM и из кода вместо учетных данных жесткого кодирования, используйте указанный ниже код:

AWSSimpleSystemsManagement awsSimpleSystemsManagement = AWSSimpleSystemsManagementClient.builder()
                .withCredentials(new DefaultAWSCredentialsProviderChain());
person user10916892    schedule 12.11.2020