문제 상황
Python의 boto3 라이브러리를 사용해 AWS Secrets Manager에서 랜덤 비밀번호를 생성하는 방법을 알아보겠습니다.
해결 접근 방식 및 알고리즘
1단계: 예외 처리를 위해 boto3와 botocore의 예외 클래스를 임포트합니다.
2단계: 이 작업에는 필수 파라미터가 없습니다.
3단계: boto3 라이브러리로 AWS 세션을 생성합니다. 기본 프로파일에 region_name이 설정되어 있지 않다면, 세션 생성 시 region_name을 명시적으로 전달해야 합니다.
4단계: secretmanager 서비스를 위한 AWS 클라이언트를 생성합니다.
5단계: get_random_password 함수를 호출하고, 원하는 비밀번호 복잡도에 맞게 파라미터를 전달합니다.
6단계: 생성된 랜덤 비밀번호가 반환됩니다.
7단계: 랜덤 비밀번호 생성 과정에서 문제가 발생할 경우 일반 예외(generic exception)를 처리합니다.
주요 파라미터 설명
PasswordLength: 생성할 비밀번호의 길이를 지정합니다(기본값 32자).
ExcludeCharacters: 비밀번호에서 제외할 문자를 지정합니다.
ExcludeNumbers / ExcludeUppercase / ExcludeLowercase: 각각 숫자, 대문자, 소문자 사용 여부를 제어합니다.
ExcludePunctuation: 문장 부호(!@# 등) 포함 여부를 결정합니다. True로 설정하면 특수문자가 제외됩니다.
IncludeSpace: 공백 문자 포함 여부를 설정합니다.
RequireEachIncludedType: 허용된 모든 문자 유형(대문자, 소문자, 숫자, 특수문자)이 최소 하나씩 포함되도록 강제합니다.
예제 코드
아래 코드를 사용하면 랜덤 비밀번호를 생성할 수 있습니다.
import boto3
from botocore.exceptions import ClientError
def generate_random_password():
session = boto3.session.Session()
s3_client = session.client('secretmanager')
try:
response = s3_client.get_random_password(
PasswordLength=18,
ExcludeCharacters="",
ExcludeNumbers=False,
ExcludePunctuation=True,
ExcludeUppercase=False,
ExcludeLowercase=False,
IncludeSpace=False,
RequireEachIncludedType=True
)
return response
except ClientError as e:
raise Exception("boto3 client error in generate_random_password: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in generate_random_password: " + e.__str__())
a = generate_random_password()
print(a["RandomPassword"])실행 결과
mcwJ6tLfN0uidY9zcY
위 예제에서는 길이 18자의 비밀번호를 생성하면서 문장 부호는 제외하고, 나머지 문자 유형은 모두 허용하도록 설정했습니다. 실무 환경에서는 보안 요구 사항에 따라 PasswordLength 값을 늘리고, 필요한 경우 ExcludeCharacters로 애플리케이션에서 사용하기 어려운 특수문자를 제외하는 것이 좋습니다.