Instanzprofil-Berechtigungsnachweise mit Spring Cloud

Instanzprofil-Anmeldeinformationen mit Spring Cloud

1. Einführung

In diesem kurzen Artikel erstellen wir eine Spring Cloud-Anwendung, die Anmeldeinformationen für Instanzprofile verwendet, um eine Verbindung zu einem S3-Bucket herzustellen.

2. Bereitstellung unserer Cloud-Umgebung

Instanzprofile sind eine AWS-Funktion, mit der EC2-Instanzen mit temporären Anmeldeinformationen eine Verbindung zu anderen AWS-Ressourcen herstellen können. Diese Anmeldeinformationen sind von kurzer Dauer und werden von AWS automatisch gedreht.

Benutzer können nur temporäre Anmeldeinformationen innerhalb von EC2-Instanzen anfordern. Wir können diese Anmeldeinformationen jedoch von jedem Ort aus verwenden, bis sie verfallen.

Weitere Informationen zuinstance profile configurationfinden Sie in der AWS-Dokumentation.

2.1. Einsatz

Zunächst benötigen wir eine AWS-Umgebung mit dem entsprechenden Setup.

Für das folgende Codebeispiel müssen Sie eine EC2-Instanz, einen S3-Bucket und die entsprechenden IAM-Rollen bereitstellen. Dazu können wirthe CloudFormation template im Codebeispiel verwenden oder diese Ressourcen einfach selbst bereitstellen.

2.2. Nachprüfung

Als Nächstes sollten wir sicherstellen, dass unsere EC2-Instanz Instanzprofilanmeldeinformationen abrufen kann. Ersetzen Sie<InstanceProfileRoleName> durch den tatsächlichen Namen der Instanzprofilrolle:

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

Wenn alles korrekt eingerichtet ist, enthält die JSON-Antwort die EigenschaftenAccessKeyId,SecretAccessKey,Token undExpiration.

3. Spring Cloud konfigurieren

Nun zu unserer Beispielanwendung. Wir müssen Spring Boot so konfigurieren, dass Instanzprofile verwendet werden. Dies können wir in unserer Spring Boot-Konfigurationsdatei tun:

cloud.aws.credentials.instanceProfile=true

Und das ist es! Wenn diese Spring Boot-Anwendung in einer EC2-Instanz bereitgestellt wird, versucht jeder Client automatisch, Instanzprofilanmeldeinformationen zu verwenden, um eine Verbindung zu AWS-Ressourcen herzustellen.

Dies liegt daran, dass Spring Cloud dieEC2ContainerCredentialsProviderWrapper aus dem AWS SDK verwendet. Dadurch wird nach Anmeldeinformationen in der Prioritätsreihenfolgeautomatically ending with instance profile credentials if it can’t find any others in the system. gesucht

Wenn wir angeben müssen, dass Spring Cloud nur Instanzprofile verwendet, können wir unsere eigeneAmazonS3-Instanz instanziieren.

Wir können es mit einemInstanceProfileCredentialsProvider konfigurieren und als Bean veröffentlichen:

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

Dies ersetzt die von Spring Cloud bereitgestellte StandardinstanzAmazonS3.

4. Anschließen an unseren S3-Eimer

Jetzt können wir mit Spring Cloud wie gewohnt eine Verbindung zu unserem S3-Bucket herstellen, ohne permanente Anmeldeinformationen konfigurieren zu müssen:

@Component
public class SpringCloudS3Service {

    // other declarations

    @Autowired
    AmazonS3 amazonS3;

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

Beachten Sie, dassthis code only works when running on an EC2 instance, da Instanzprofile nur für EC2-Instanzen ausgegeben werden.

Natürlich können wir den Vorgang für jeden AWS-Service wiederholen, mit dem unsere EC2-Instanz verbunden ist, einschließlich EC2, SQS und SNS.

5. Fazit

In diesem Lernprogramm haben wir gesehen, wie Sie Anmeldeinformationen für Instanzprofile mit Spring Cloud verwenden. Außerdem haben wir eine einfache Anwendung erstellt, die eine Verbindung zu einem S3-Bucket herstellt.

Wie immer kann die vollständige Quelleover on GitHub gefunden werden.