https://docs.aws.amazon.com/ko_kr/secretsmanager/latest/userguide/intro.html
AWS Secrets Manager을(를) 사용하면 수명 주기 동안 데이터베이스 보안 인증, 애플리케이션 보안 인증, OAuth 토큰, API 키 및 기타 암호를 관리, 검색, 교체 할 수 있습니다.
암호를 사용하는 다수의 AWS 서비스는 Secrets Manager에 암호를 저장합니다.
Secrets Manager를 사용하면 더 이상 애플리케이션 소스 코드에 하드 코딩된 보안 인증 정보가 필요하지 않으므로 보안 태세를 개선할 수 있습니다.
아래는 오버스펙일 수 있음
Secrets Manager를 사용하면 암호에 대한 자동 교체 일정을 구성할 수 있습니다.
보안 인증 정보가 더 이상 애플리케이션에 저장되지 않으므로 보안 인증 정보를 교체할 때 더 이상 애플리케이션을 업데이트하거나 애플리케이션 클라이언트에 변경 사항을 배포하지 않아도 됩니다.
{
"host" : "ProdServer-01.databases.example.com",
"port" : "8888",
"username" : "administrator",
"password" : "EXAMPLE-PASSWORD",
"dbname" : "MyDatabase",
"engine" : "mysql"
}
arn:aws:secretsmanager:<Region>:<AccountId>:secret:SecretName-6RandomCharacters
Version
Rotation
// Use this code snippet in your app.
// If you need more information about configurations or implementing the sample
// code, visit the AWS docs:
// https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html
// Make sure to import the following packages in your code
// import software.amazon.awssdk.regions.Region;
// import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
// import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
// import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueResponse;
public static void getSecret() {
String secretName = "sample/testKey";
Region region = Region.of("ap-southeast-2");
// Create a Secrets Manager client
SecretsManagerClient client = SecretsManagerClient.builder()
.region(region)
.build();
GetSecretValueRequest getSecretValueRequest = GetSecretValueRequest.builder()
.secretId(secretName)
.build();
GetSecretValueResponse getSecretValueResponse;
try {
getSecretValueResponse = client.getSecretValue(getSecretValueRequest);
} catch (Exception e) {
// For a list of exceptions thrown, see
// https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
throw e;
}
String secret = getSecretValueResponse.secretString();
// Your code goes here.
}
Seret Manager 비용 살펴보기
요금
Secrets Manager를 사용할 경우 사용하는 내역에 대해서만 지불하며 최소 또는 설정 요금이 없습니다. 삭제하도록 표시한 보안 암호에 대해서는 요금이 부과되지 않습니다. 현재 기준의 전체적인 요금 목록은 AWS Secrets Manager 요금을 참조하세요.
https://aws.amazon.com/ko/secrets-manager/pricing/
보안 정보 1개 당 월 0.45$ 예상
AWS Systems Manager의 기능인 Parameter Store는 구성 데이터 관리 및 암호 관리를 위한 안전한 계층적 스토리지를 제공합니다.
암호, 데이터베이스 문자열, Amazon Machine Image(AMI) ID, 라이선스 코드와 같은 데이터를 파라미터 값으로 저장할 수 있습니다. 값을 일반 텍스트 또는 암호화된 데이터로 저장할 수 있습니다
Parameter Store 파라미터는 텍스트 블록, 이름 목록, 암호, AMI ID, 라이선스 키 등과 같이 Parameter Store에 저장되는 모든 데이터입니다. 스크립트, 명령 및 SSM 문서에서 이 데이터를 중앙에서 안전하게 참조할 수 있습니다.
Parameter Store는 String, StringList, SecureString 등 세 가지 유형의 파라미터를 지원합니다.
중요
String 또는 StringList 파라미터에 중요한 데이터를 저장하지 않습니다. 암호화된 상태로 유지해야 하는 모든 중요한 데이터의 경우 SecureString 파라미터 유형만 사용하십시오.
from __future__ import print_function
import json
import boto3
ssm = boto3.client('ssm', 'us-east-2')
def get_parameters():
response = ssm.get_parameters(
Names=['ro-osrm-url-dev'],WithDecryption=True
)
for parameter in response['Parameters']:
return parameter['Value']
def lambda_handler(event, context):
value = get_parameters()
print("value1 = " + value)
return value # Echo back the first key value
SecureString 파라미터 생성 시 Parameter Store에서 비용이 부과되지 않지만 AWS KMS 암호화 사용에 대한 요금이 적용됩니다. 자세한 내용은 AWS Key Management Service 요금을 참조하십시오.
출처
https://www.1strategy.com/blog/2019/02/28/aws-parameter-store-vs-aws-secrets-manager/
https://rainbound.tistory.com/entry/AWS-Parameter-Store-%EC%99%80-AWS-Secrets-Manager-%EA%B3%B5%ED%86%B5%EC%A0%90%EA%B3%BC-%EC%B0%A8%EC%9D%B4%EC%A0%90
비교 표
SSM Parameter Store | Secret Manager | |
---|---|---|
Store Value up to 4096 | O | O |
Values can be encrypted using KMS | O | O |
Can be referenced in CloudFormation | O | O |
Additional Cost | X | O |
Built-in password generator | X | O |
Automated Secret Roation | X | O |
Cross account access | X | O |