使用Spring Cloud的實例配置文件憑證

1.簡介

在這篇快速文章中,我們將構建一個使用實例配置文件憑據連接到S3存儲桶的Spring Cloud應用程序。

2.設置我們的雲環境

實例配置文件是一種AWS功能,允許EC2實例使用臨時憑證連接到其他AWS資源。這些憑證的期限很短,並且由AWS自動輪換。

用戶只能從EC2實例中請求臨時憑據。但是,我們可以在任何地方使用這些憑據,直到它們過期。

要獲得有關實例配置文件配置的更多幫助,請查閱AWS文檔。

2.1。部署方式

首先,我們需要一個具有適當設置的AWS環境。

對於下面的代碼示例,我們需要建立一個EC2實例,一個S3存儲桶以及相應的IAM角色。為此,我們可以在代碼示例中使用CloudFormation模板,也可以簡單地自行建立這些資源。

2.2。驗證

接下來,我們應確保我們的EC2實例可以檢索實例配置文件憑據。將<InstanceProfileRoleName>替換為實際的實例配置文件角色名稱:

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

如果一切設置正確,則JSON響應將包含AccessKeyIdSecretAccessKeyTokenExpiration屬性。

3.配置Spring Cloud

現在,對於我們的示例應用程序。我們需要配置Spring Boot以使用實例配置文件,這可以在我們的Spring Boot配置文件中完成:

cloud.aws.credentials.instanceProfile=true

而且,就是這樣!如果此Spring Boot應用程序部署在EC2實例中,則每個客戶端將自動嘗試使用實例配置文件憑證連接到AWS資源。

這是因為Spring Cloud使用了AWS開發工具包中的[EC2ContainerCredentialsProviderWrapper](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/EC2ContainerCredentialsProviderWrapper.html) 。這將按優先級順序查找憑據,如果在系統中找不到其他配置文件憑據,則自動以實例配置文件憑據結尾。

如果我們需要指定Spring Cloud僅使用實例配置文件,那麼我們可以實例化我們自己的AmazonS3實例。

我們可以使用InstanceProfileCredentialsProvider配置它,並將其發佈為Bean:

@Bean

 public AmazonS3 amazonS3() {

 InstanceProfileCredentialsProvider provider

 = new InstanceProfileCredentialsProvider(true);

 return AmazonS3ClientBuilder.standard()

 .withCredentials(provider)

 .build();

 }

這將替換Spring Cloud提供的默認AmazonS3實例。

4.連接到我們的S3存儲桶

現在,我們可以正常使用Spring Cloud連接到S3存儲桶,而無需配置永久憑證:

@Component

 public class SpringCloudS3Service {



 // other declarations



 @Autowired

 AmazonS3 amazonS3;



 public void createBucket(String bucketName) {

 // log statement

 amazonS3.createBucket(bucketName);

 }

 }

請記住,由於實例配置文件僅發布給EC2實例,因此該代碼僅在EC2實例上運行時有效

當然,我們可以對EC2實例連接到的任何AWS服務重複該過程,包括EC2,SQS和SNS。

5.結論

在本教程中,我們已經看到瞭如何在Spring Cloud中使用實例配置文件憑據。另外,我們創建了一個簡單的應用程序,該應用程序連接到S3存儲桶。

與往常一樣,完整的源代碼可以在GitHub上找到