Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Boto3로 AWS Secrets Manager 특정 경로에 새 시크릿 저장하기

문제 상황

Python에서 boto3 라이브러리를 사용하여 AWS Secrets Manager의 특정 위치에 새로운 시크릿(secret)을 저장하는 방법을 알아봅니다.

해결 접근 방식 및 알고리즘

  • 1단계: 예외 처리를 위해 boto3botocore의 예외 클래스를 임포트합니다.

  • 2단계: 필수 파라미터는 secret_stored_location(시크릿이 저장될 위치)과 secret_key_pair(시크릿 값)입니다. 이때 secret_key_pair는 딕셔너리(dict)가 아닌 반드시 문자열(string) 형태로 작성해야 합니다.

  • 3단계: boto3 라이브러리로 AWS 세션을 생성합니다. 기본 프로파일에 region_name이 설정되어 있는지 확인하세요. 만약 설정되어 있지 않다면, 세션 생성 시 region_name을 명시적으로 전달해야 합니다.

  • 4단계: secretmanager 서비스를 위한 AWS 클라이언트를 생성합니다.

  • 5단계: put_secret_value 메서드를 호출하면서 secret_stored_locationSecretId로, secret_key_pairSecretString으로 전달합니다.

  • 6단계: 호출이 성공하면 새로 추가된 시크릿의 메타데이터가 반환됩니다.

  • 7단계: 시크릿 추가 과정에서 오류가 발생할 경우 일반 예외(generic exception)를 처리합니다.

예제 코드

다음 코드를 사용하면 AWS Secrets Manager에 새로운 시크릿을 저장할 수 있습니다.

import boto3
from botocore.exceptions import ClientError

def store_new_secret_details(secret_stored_location, secret_key_pair):
    session = boto3.session.Session()
    sm_client = session.client('secretmanager')
    try:
        response = sm_client.put_secret_value(
            SecretId=secret_stored_location,
            SecretString=secret_key_pair
        )
        return response
    except ClientError as e:
        raise Exception("store_new_secret_details boto3 클라이언트 오류: " + e.__str__())
    except Exception as e:
        raise Exception("store_new_secret_details 예기치 못한 오류: " + e.__str__())

a = store_new_secret_details('/secrets/aws', '{"user_test2":"test2"}')
print(a)

실행 결과

코드를 실행하면 다음과 같이 새로 추가된 시크릿의 메타데이터가 출력됩니다.

{'ARN': 'arn:aws:secretsmanager:us-east-1:***************:secret:/secrets/aws-wr1Aj6', 'Name': '/secrets/aws', 'VersionId': 'f5308bed-7c23-4d47-a32b-8f2a5f044e53', 'VersionStages': ['AWSCURRENT'], 'ResponseMetadata': {'RequestId': 'b32fe48d**************ab', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sat, 03 Apr 2021 09:40:48 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '197', 'connection': 'keep-alive', 'x-amzn-requestid': *********************************}, 'RetryAttempts': 0}}

핵심 정리

AWS Secrets Manager에 이미 존재하는 시크릿에 새 값을 추가하려면 put_secret_value API를 사용합니다. 중요한 점은 시크릿 값을 JSON 객체 그대로 전달하는 것이 아니라 JSON 형식의 문자열로 직렬화하여 SecretString 파라미터에 넣어야 한다는 것입니다. 또한 호출 결과에는 시크릿의 ARN, 버전 ID(VersionId), 그리고 버전 스테이지(AWSCURRENT) 등 유용한 메타데이터가 포함되어 있어, 이후 버전 관리나 감사(audit) 작업에 활용할 수 있습니다.