«1. Введение

В этой быстрой статье мы собираемся создать приложение Spring Cloud, которое использует учетные данные профиля экземпляра для подключения к корзине S3.

2. Инициализация нашей облачной среды

Профили инстансов — это функция AWS, которая позволяет инстансам EC2 подключаться к другим ресурсам AWS с временными учетными данными. Эти учетные данные недолговечны и автоматически меняются AWS.

Пользователи могут запрашивать временные учетные данные только из инстансов EC2. Однако мы можем использовать эти учетные данные из любого места до истечения срока их действия.

Чтобы получить дополнительную помощь по настройке профиля экземпляра, ознакомьтесь с документацией AWS.

2.1. Развертывание

Прежде всего, нам нужна среда AWS с соответствующей настройкой.

Для приведенного ниже примера кода нам нужно настроить экземпляр EC2, корзину S3 и соответствующие роли IAM. Для этого мы можем использовать шаблон CloudFormation в примере кода или просто настроить эти ресурсы самостоятельно.

2.2. Проверка

Затем мы должны убедиться, что наш экземпляр EC2 может получить учетные данные профиля экземпляра. Замените \u003cInstanceProfileRoleName\u003e на фактическое имя роли профиля экземпляра:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<InstanceProfileRoleName>

Если все настроено правильно, ответ JSON будет содержать свойства AccessKeyId, SecretAccessKey, Token и Expiration.

3. Настройка Spring Cloud

Теперь перейдем к нашему примеру приложения. Нам нужно настроить Spring Boot для использования профилей экземпляров, что мы можем сделать в нашем файле конфигурации Spring Boot:

cloud.aws.credentials.instanceProfile=true

И все! Если это приложение Spring Boot развернуто в экземпляре EC2, каждый клиент будет автоматически пытаться использовать учетные данные профиля экземпляра для подключения к ресурсам AWS.

Это связано с тем, что Spring Cloud использует EC2ContainerCredentialsProviderWrapper из AWS SDK. Это будет искать учетные данные в порядке приоритета, автоматически заканчивая учетными данными профиля экземпляра, если он не может найти другие в системе.

Если нам нужно указать, что Spring Cloud использует только профили экземпляров, мы можем создать собственный экземпляр AmazonS3.

Мы можем настроить его с помощью InstanceProfileCredentialsProvider и опубликовать как bean-компонент:

@Bean
public AmazonS3 amazonS3() {
    InstanceProfileCredentialsProvider provider
      = new InstanceProfileCredentialsProvider(true);
    return AmazonS3ClientBuilder.standard()
      .withCredentials(provider)
      .build();
}

Это заменит экземпляр AmazonS3 по умолчанию, предоставляемый Spring Cloud.

4. Подключение к нашей корзине S3

Теперь мы можем подключиться к нашей корзине S3, используя Spring Cloud, как обычно, но без необходимости настраивать постоянные учетные данные:

@Component
public class SpringCloudS3Service {

    // other declarations

    @Autowired
    AmazonS3 amazonS3;

    public void createBucket(String bucketName) {
        // log statement
        amazonS3.createBucket(bucketName);
    }
}

Помните об этом, поскольку профили экземпляров выдаются только для экземпляров EC2 этот код работает только при работе на экземпляре EC2.

Конечно, мы можем повторить этот процесс для любого сервиса AWS, к которому подключается наш экземпляр EC2, включая EC2, SQS и SNS.

5. Заключение

В этом руководстве мы увидели, как использовать учетные данные профиля экземпляра в Spring Cloud. Кроме того, мы создали простое приложение, которое подключается к корзине S3.

Как всегда, полный исходный код можно найти на GitHub.