新聞資訊
行業(yè)資訊
將 AWS Secrets Manager 與 Spring Boot 集成
2023-11-30 08:50:43
摘要:在本文中,讀者將了解 Amazon Secrets Manager 如何成為一個強(qiáng)大的工具,幫助開發(fā)人員使用 Spring Boot 更安全地管理應(yīng)用程序機(jī)密。

在本文中,讀者將了解 Amazon Secrets Manager 如何成為一個強(qiáng)大的工具,幫助開發(fā)人員使用 Spring Boot 更安全地管理應(yīng)用程序機(jī)密。


免綁卡注冊AWS云賬戶http://hkonecloud.755800.com/


在微服務(wù)架構(gòu)中,通常有多個服務(wù)需要訪問敏感信息,例如 API 密鑰、密碼或證書。將此敏感信息存儲在代碼或配置文件中是不安全的,因為如果攻擊者可以訪問您的源代碼或配置文件,他們很容易獲得此信息的訪問權(quán)限。


為了保護(hù)敏感信息,微服務(wù)通常使用密鑰管理系統(tǒng)(例如 Amazon Secrets Manager)來安全地存儲和管理這些信息。機(jī)密管理系統(tǒng)提供了一種安全且集中的方式來存儲和管理機(jī)密,并且它們通常提供加密、訪問控制和審計等功能。


Amazon Secrets Manager 是一項完全托管的服務(wù),可以輕松存儲和檢索秘密,例如數(shù)據(jù)庫憑證、API 密鑰和其他敏感信息。它提供了一種安全且可擴(kuò)展的方式來存儲機(jī)密,并與其他 AWS 服務(wù)集成以支持從您的應(yīng)用程序和服務(wù)安全訪問這些密鑰。


在您的微服務(wù)中使用 Amazon Secrets Manager 的一些好處包括:


集中管理:您可以將所有機(jī)密存儲在一個中央位置,這樣可以更輕松地管理和輪換它們。

細(xì)粒度的訪問控制:您可以控制誰可以訪問您的密鑰,并使用 AWS Identity and Access Management (IAM) 策略根據(jù)需要授予或撤銷訪問權(quán)限。

自動輪換:您可以將 Amazon Secrets Manager 配置為按計劃自動輪換您的密鑰,從而降低機(jī)密泄露的風(fēng)險。

與其他 AWS 服務(wù)集成:您可以使用 Amazon Secrets Manager 從其他 AWS 服務(wù)(例如 Amazon RDS或 AWS Lambda)安全地訪問機(jī)密。

總體而言,使用機(jī)密管理系統(tǒng)(如 Amazon Secrets Manager)可以通過降低敏感信息暴露或泄露的風(fēng)險來幫助提高微服務(wù)的安全性。


在本文中,我們將討論如何在 Amazon Secrets Manager 中定義機(jī)密,然后使用Spring Boot微服務(wù)提取它。


創(chuàng)造密鑰


要在 Amazon Secrets Manager 中創(chuàng)建新密鑰,您可以按照以下步驟操作:

通過導(dǎo)航到“ AWS 管理控制臺”,從服務(wù)列表中選擇“ Secrets Manager ”,然后單擊主頁上的“ Create secret ” ,打開 Amazon Secrets Manager 控制臺。

選擇您要創(chuàng)建的密鑰類型:您可以在“ RDS 數(shù)據(jù)庫憑據(jù)”或“其他密鑰類型”之間進(jìn)行選擇。如果您選擇“其他類型的密鑰”,您將需要為您的密鑰輸入一個自定義名稱。

輸入秘密詳細(xì)信息:您需要輸入的信息取決于您創(chuàng)建的秘密類型。例如,如果您正在創(chuàng)建數(shù)據(jù)庫憑證,則需要輸入數(shù)據(jù)庫的用戶名和密碼。

配置加密設(shè)置:默認(rèn)情況下,Amazon Secrets Manager 使用 AWS KMS 來加密您的密鑰。您可以選擇使用默認(rèn) KMS 密鑰或選擇自定義密鑰。

定義密鑰權(quán)限:您可以通過添加一個或多個 AWS Identity and Access Management (IAM) 策略來定義誰可以訪問密鑰。

查看并創(chuàng)建機(jī)密:輸入所有必需信息后,查看您的設(shè)置并單擊“創(chuàng)建密鑰”以創(chuàng)建密鑰。

或者,您也可以使用 AWS 開發(fā)工具包或 CLI 以編程方式創(chuàng)建密鑰。以下是如何使用 AWS CLI 創(chuàng)建新密鑰的示例:

aws secretsmanager create-secret --name my-secret --secret-string {"username": "myuser", "password": "mypassword"}

此命令使用包含用戶名和密碼的 JSON 格式的秘密字符串創(chuàng)建一個名為“my-secret”的新秘密。您可以將秘密字符串替換為您想要作為秘密存儲的任何其他 JSON 格式的數(shù)據(jù)。


您還可以從您的微服務(wù)中創(chuàng)建這些密鑰:


將適用于 Java 的 AWS 開發(fā)工具包依賴項添加到您的項目:您可以通過將以下依賴項添加到您的pom.xml文件來執(zhí)行此操作:


com.amazonaws

aws-java-sdk-secretsmanager

1.12.83


初始化 AWS Secrets Manager 客戶端:您可以通過將以下代碼添加到 Spring Boot 應(yīng)用程序的配置類來執(zhí)行此操作:

@Configuration

public class AwsConfig {

@Value("${aws.region}")

private String awsRegion;

@Bean

public AWSSecretsManager awsSecretsManager() {

return AWSSecretsManagerClientBuilder.standard()

.withRegion(awsRegion)

.build();

}

}

此代碼為 AWS Secrets Manager 客戶端創(chuàng)建一個新的bean,并從文件中注入 AWS 區(qū)域application.properties。

創(chuàng)建一個新的密鑰:您可以通過將以下代碼添加到您的 Spring Boot 服務(wù)類來完成此操作:

@Autowired

private AWSSecretsManager awsSecretsManager;

public void createSecret(String secretName, String secretValue) {

CreateSecretRequest request = new CreateSecretRequest()

.withName(secretName)

.withSecretString(secretValue);

CreateSecretResult result = awsSecretsManager.createSecret(request);

String arn = result.getARN();

System.out.println("Created secret with ARN: " + arn);

}

此代碼創(chuàng)建一個具有指定名稱和值的新密鑰。它使用CreateSecretRequest類來指定密鑰的名稱和值,然后調(diào)用createSecretAWS Secrets Manager 客戶端的方法來創(chuàng)建密鑰。該方法返回一個CreateSecretResult對象,其中包含新創(chuàng)建的密鑰的 ARN(亞馬遜資源名稱)。

這些只是在 Amazon Secrets Manager 中創(chuàng)建密鑰的一些基本步驟。根據(jù)您的用例和要求,可能需要額外的配置或設(shè)置。

使用微服務(wù)獲取密鑰

以下是使用 Spring Boot 從 Amazon Secrets Manager 中提取密鑰的完整步驟:

首先,您需要將以下依賴項添加到您的 Spring Boot 項目中:


com.amazonaws

aws-java-sdk-secretsmanager

1.12.37



com.amazonaws

aws-java-sdk-core

1.12.37



org.springframework.cloud

spring-cloud-starter-aws

2.3.2.RELEASE


接下來,您需要在application.yml文件中配置 AWS 憑證和區(qū)域:

aws:

accessKey:

secretKey:

region:

創(chuàng)建用于提取密鑰的配置類:

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.cloud.aws.secretsmanager.AwsSecretsManagerPropertySource;

import org.springframework.context.annotation.Configuration;

import com.amazonaws.services.secretsmanager.AWSSecretsManager;

import com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder;

import com.amazonaws.services.secretsmanager.model.GetSecretValueRequest;

import com.amazonaws.services.secretsmanager.model.GetSecretValueResult;

import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration

public class SecretsManagerPullConfig {

@Autowired

private AwsSecretsManagerPropertySource awsSecretsManagerPropertySource;

publicT getSecret(String secretName, ClassvalueType) throws Exception {

AWSSecretsManager client = AWSSecretsManagerClientBuilder.defaultClient();

String secretId = awsSecretsManagerPropertySource.getProperty(secretName);

GetSecretValueRequest getSecretValueRequest = new GetSecretValueRequest()

.withSecretId(secretId);

GetSecretValueResult getSecretValueResult = client.getSecretValue(getSecretValueRequest);

String secretString = getSecretValueResult.getSecretString();

ObjectMapper objectMapper = new ObjectMapper();

return objectMapper.readValue(secretString, valueType);

}

}

在您的 Spring Boot 服務(wù)中,您可以注入SecretsManagerPullConfig類并調(diào)用getSecret方法來檢索密鑰:

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

@Service

public class MyService {

@Autowired

private SecretsManagerPullConfig secretsManagerPullConfig;

public void myMethod() throws Exception {

MySecrets mySecrets = secretsManagerPullConfig.getSecret("mySecrets", MySecrets.class);

System.out.println(mySecrets.getUsername());

System.out.println(mySecrets.getPassword());

}

}

在上面的示例中,MySecrets是一個Java類,表示 Amazon Secrets Manager 中的密鑰結(jié)構(gòu)。該方法返回一個包含密鑰值getSecret的實例。MySecrets

注意:以上代碼假定 Spring Boot 應(yīng)用程序在具有 IAM 角色的EC2實例上運(yùn)行,該角色有權(quán)從 Amazon Secrets Manager 讀取密鑰。如果您在本地或不同環(huán)境中運(yùn)行應(yīng)用程序,則需要提供具有讀取密鑰所需權(quán)限的 AWS 憑證。


Amazon Secrets Manager 是一種安全便捷的方式,用于在云中存儲和管理 API 密鑰、數(shù)據(jù)庫憑證和其他敏感信息等機(jī)密信息。通過使用 Amazon Secrets Manager,您可以避免在 Spring Boot 應(yīng)用程序中對密碼進(jìn)行硬編碼,而是在運(yùn)行時安全地檢索它們。這降低了暴露代碼中敏感數(shù)據(jù)的風(fēng)險,并使跨不同環(huán)境管理密鑰變得更加容易。


借助適用于 Java 的 AWS 開發(fā)工具包,將 Amazon Secrets Manager 與 Spring Boot 集成是一個簡單的過程。只需幾行代碼,您就可以在 Spring Boot 應(yīng)用程序中從 Amazon Secrets Manager 創(chuàng)建和檢索密鑰。這使您可以構(gòu)建更安全和可擴(kuò)展的應(yīng)用程序,這些應(yīng)用程序可以輕松部署到云中。


總的來說,Amazon Secrets Manager 是一款功能強(qiáng)大的工具,可以幫助您以更安全、更高效的方式管理應(yīng)用程序密鑰。通過將它與 Spring Boot 集成,您可以利用它的特性和優(yōu)勢,而不會影響應(yīng)用程序的性能或功能。



海外服務(wù)器免費(fèi)測試http://running-capacitor.com/


USA-IDC為您提供免備案服務(wù)器 0元試用
立即聯(lián)系在線客服,即可申請免費(fèi)產(chǎn)品試用服務(wù)
立即申請