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