使用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響應將包含AccessKeyId
, SecretAccessKey
, Token
和Expiration
屬性。
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上找到。