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

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

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

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

2 ответа

Решение

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

AWSSimpleSystemsManagement awsSimpleSystemsManagement = AWSSimpleSystemsManagementClient.builder()
                .withCredentials(new DefaultAWSCredentialsProviderChain());

Да, вы всегда можете назначить своей задаче роль задачи. Затем 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

Другие вопросы по тегам