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 SDK 的 EC2ContainerCredentialsProviderWrapper。它將按照優先級查找憑據,如果無法找到其他系統中的憑據,則自動結束於實例配置文件憑據。
如果我們需要指定 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 存儲桶的簡單應用程序。