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

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


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


在微服務(wù)架構(gòu)中,通常有多個(gè)服務(wù)需要訪問(wèn)敏感信息,例如 API 密鑰、密碼或證書。將此敏感信息存儲(chǔ)在代碼或配置文件中是不安全的,因?yàn)槿绻粽呖梢栽L問(wèn)您的源代碼或配置文件,他們很容易獲得此信息的訪問(wèn)權(quán)限。


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


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


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


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

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

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

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

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


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


創(chuàng)造密鑰


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

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

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

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

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

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

查看并創(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)建一個(gè)名為“my-secret”的新秘密。您可以將秘密字符串替換為您想要作為秘密存儲(chǔ)的任何其他 JSON 格式的數(shù)據(jù)。


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


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


com.amazonaws

aws-java-sdk-secretsmanager

1.12.83


初始化 AWS Secrets Manager 客戶端:您可以通過(guò)將以下代碼添加到 Spring Boot 應(yīng)用程序的配置類來(lái)執(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)建一個(gè)新的bean,并從文件中注入 AWS 區(qū)域application.properties。

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

@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)建一個(gè)具有指定名稱和值的新密鑰。它使用CreateSecretRequest類來(lái)指定密鑰的名稱和值,然后調(diào)用createSecretAWS Secrets Manager 客戶端的方法來(lái)創(chuàng)建密鑰。該方法返回一個(gè)CreateSecretResult對(duì)象,其中包含新創(chuàng)建的密鑰的 ARN(亞馬遜資源名稱)。

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

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

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

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


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


接下來(lái),您需要在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方法來(lái)檢索密鑰:

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是一個(gè)Java類,表示 Amazon Secrets Manager 中的密鑰結(jié)構(gòu)。該方法返回一個(gè)包含密鑰值getSecret的實(shí)例。MySecrets

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


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


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


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



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


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