AWS Secret Manager VS Parameter Store

개발자 생존기·2023년 6월 22일
0

AWS

목록 보기
2/4

1 AWS Secrets Manager

https://docs.aws.amazon.com/ko_kr/secretsmanager/latest/userguide/intro.html

  1. AWS Secrets Manager을(를) 사용하면 수명 주기 동안 데이터베이스 보안 인증, 애플리케이션 보안 인증, OAuth 토큰, API 키 및 기타 암호를 관리, 검색, 교체 할 수 있습니다.
    암호를 사용하는 다수의 AWS 서비스는 Secrets Manager에 암호를 저장합니다.

  2. Secrets Manager를 사용하면 더 이상 애플리케이션 소스 코드에 하드 코딩된 보안 인증 정보가 필요하지 않으므로 보안 태세를 개선할 수 있습니다.

    • Secrets Manager에 보안 인증 정보를 저장하면 애플리케이션 또는 구성 요소를 조사할 수 있는 누군가로 인해 손상될 가능성을 방지할 수 있습니다. 하드 코딩된 보안 인증 정보를 Secrets Manager 서비스에 대한 런타임 호출로 대체하여 필요할 때 동적으로 보안 인증 정보를 검색합니다.

아래는 오버스펙일 수 있음

  1. Secrets Manager를 사용하면 암호에 대한 자동 교체 일정을 구성할 수 있습니다.

    • 따라서 단기 보안 암호로 장기 보안 암호를 교체할 수 있어 손상 위험이 크게 줄어듭니다.
  2. 보안 인증 정보가 더 이상 애플리케이션에 저장되지 않으므로 보안 인증 정보를 교체할 때 더 이상 애플리케이션을 업데이트하거나 애플리케이션 클라이언트에 변경 사항을 배포하지 않아도 됩니다.

주요 개념

Secret

  • Secret은 secret value와 metadata 쌍으로 존재
  • secret value는 아래와 같은 json 방식이 널리 사용
{
  "host"       : "ProdServer-01.databases.example.com",
  "port"       : "8888",
  "username"   : "administrator",
  "password"   : "EXAMPLE-PASSWORD",
  "dbname"     : "MyDatabase",
  "engine"     : "mysql"
}
  • metadata는 다음을 포함
    • SeretManager에 대한 ARN
    arn:aws:secretsmanager:<Region>:<AccountId>:secret:SecretName-6RandomCharacters
    • secret에 대한 정보 (name, description, policy, tags)
    • AWS KMS Key 암호화 키에 대한 ARN
    • 교체를 설정한 경우 보안 암호 교체에 대한 장법

Version과 Rotation은 오버스펙이긴 하지만 알아보자

Version

  • Version별로 관리 가능하며, secret value를 바꾸거나 secret이 rotation되면 version이 올라간다.

Rotation

  • 주기적으로 secret value를 업데이트하여 관리할 수 있다.

필사




Sample Code

// 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 System Manager Parameter Store

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/systems-manager-parameter-store.html

개요

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 : 안전한 방식으로 저장되고 참조되어야 하는 모든 민감한 데이터

중요
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

비용

  • Parameter Store 에는 돈이 들지 않지만, secureString 방식으로 저장하게 된다면 AWS KMS 사용에 대한 요금이 적용

    SecureString 파라미터 생성 시 Parameter Store에서 비용이 부과되지 않지만 AWS KMS 암호화 사용에 대한 요금이 적용됩니다. 자세한 내용은 AWS Key Management Service 요금을 참조하십시오.

  • 이미 KMS 키는 계정마다 가지고 있을테니 결국 비용은 없다고 봐도 될듯

3 비교

출처
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 StoreSecret Manager
Store Value up to 4096OO
Values can be encrypted using KMSOO
Can be referenced in CloudFormationOO
Additional CostX O
Built-in password generatorXO
Automated Secret RoationXO
Cross account accessXO
profile
NP-Hard 문제를 풀어봅니다.

0개의 댓글