문제 정의
Python의 boto3 라이브러리를 사용하여 AWS Secrets Manager에 저장된 특정 위치의 시크릿(비밀 값) 세부 정보를 조회하는 방법을 알아보겠습니다.
해결 접근 방식 및 알고리즘
1단계: 예외 처리를 위해 boto3와 botocore의 예외 클래스를 임포트합니다.
2단계: secret_stored_location(시크릿이 저장된 경로 또는 이름)은 필수 파라미터입니다.
3단계: boto3 라이브러리를 사용해 AWS 세션을 생성합니다. 기본 프로필에 region_name이 설정되어 있는지 확인하고, 설정되어 있지 않다면 세션 생성 시 region_name을 명시적으로 전달해야 합니다.
4단계: secretmanager 서비스를 위한 AWS 클라이언트를 생성합니다.
5단계: describe_secret 메서드를 호출하고 secret_stored_location 값을 SecretId 파라미터로 전달합니다.
6단계: 해당 시크릿의 메타데이터(ARN, 이름, 마지막 변경/접근 날짜, 버전 스테이지 등)가 반환됩니다.
7단계: 시크릿 정보 조회 과정에서 오류가 발생하면 ClientError 및 일반 예외를 처리합니다.
예제 코드
아래 코드를 사용하면 AWS Secrets Manager에서 특정 시크릿의 세부 정보를 가져올 수 있습니다.
import boto3
from botocore.exceptions import ClientError
def get_secret_details(secret_stored_location):
session = boto3.session.Session()
secrets_client = session.client('secretmanager')
try:
response = secrets_client.describe_secret(SecretId=secret_stored_location)
return response
except ClientError as e:
raise Exception("boto3 client error in get_secret_details: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in get_secret_details: " + e.__str__())
a = get_secret_details('/secrets/aws')
print(a)
출력 결과
{'ARN': 'arn:aws:secretsmanager:us-east-1:***************:secret:/secrets/aws-wr1Aj6', 'Name': '/secrets/aws', 'LastChangedDate': datetime.datetime(2021, 4, 3, 17, 6, 57, 601000, tzinfo=tzlocal()), 'LastAccessedDate': datetime.datetime(2021, 4, 3, 5, 30, tzinfo=tzlocal()), 'VersionIdsToStages': {'f5308bed-7c23-4d47-a32b-8f2a5f044e53': ['AWSCURRENT'], 'fcdc1b5b-2a35-4d12-9d84-65d529651d2e': ['AWSPREVIOUS']}, '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}}
참고 사항
describe_secret은 시크릿 자체의 값이 아니라 메타데이터만 반환한다는 점에 유의하세요. ARN, 이름, 설명, 태그, 버전 스테이지(AWSCURRENT, AWSPREVIOUS 등), 마지막 변경 및 접근 날짜 같은 정보를 확인할 때 유용합니다.
만약 실제 암호화된 시크릿 값이 필요하다면 get_secret_value 메서드를 사용해야 합니다. 또한 이 코드를 실행하려면 해당 IAM 사용자 또는 역할에 secretsmanager:DescribeSecret 권한이 부여되어 있어야 하며, AWS 자격 증명(액세스 키, 시크릿 키)이 사전에 구성되어 있어야 합니다.