AWS Lambda 함수에서 AWS Secrets Manager 보안 암호 사용 - AWS Secrets Manager

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Lambda 함수에서 AWS Secrets Manager 보안 암호 사용

AWS 파라미터 및 보안 암호 Lambda 확장을 사용하면 SDK를 사용하지 않고도 Lambda 함수에서 AWS Secrets Manager 보안 암호를 검색하고 캐싱할 수 있습니다. 캐싱된 보안 암호를 검색하는 것이 Secret Manager에서 검색하는 것보다 빠릅니다. Secrets Manager API를 호출하는 데는 비용이 발생하므로 캐시를 사용하면 비용을 줄일 수 있습니다. 이 익스텐션은 Secrets Manager 보안 암호와 Parameter Store 파라미터를 모두 검색할 수 있습니다. Parameter Store에 대한 자세한 내용은 AWS Systems Manager 사용 설명서Using Parameter Store parameters in Lambda functions(Lambda 확장과 Parameter Store 통합)를 참조하세요.

Lambda 확장은 Lambda 함수의 기능에 추가되는 동반 프로세스입니다. 자세한 내용은 Lambda 개발자 안내서Lambda 확장을 참조하세요. 컨테이너 이미지의 확장 사용에 대한 자세한 내용은 컨테이너 이미지의 Lambda 계층 및 확장을 통한 작업을 참조하세요. Lambda는 Amazon CloudWatch Logs를 사용하여 익스텐션에 대한 실행 정보를 함수와 함께 기록합니다. 기본적으로 이 익스텐션은 CloudWatch에 최소한의 정보를 기록합니다. 세부 정보를 기록하려면 환경 변수 PARAMETERS_SECRETS_EXTENSION_LOG_LEVELdebug로 설정합니다.

파라미터 및 보안 암호에 대한 인 메모리 캐시를 제공하기 위해 확장은 로컬 HTTP 엔드포인트인 localhost 포트 2773을 Lambda 환경에 노출합니다. 환경 변수 PARAMETERS_SECRETS_EXTENSION_HTTP_PORT를 설정하여 포트를 구성할 수 있습니다.

Lambda는 함수에 필요한 동시성 레벨에 해당하는 별도의 인스턴스를 인스턴스화합니다. 각 인스턴스는 격리되며 구성 데이터의 자체 로컬 캐시를 유지합니다. Lambda 인스턴스 및 동시성에 대한 자세한 내용은 Lambda 개발자 안내서Lambda 예약된 동시성 관리를 참조하세요.

ARM 익스텐션을 추가하려면 Lambda 함수의 arm64 아키텍처를 사용해야 합니다. 자세한 내용은 Lambda 개발자 안내서Lambda 명령 세트 아키텍처를 참조하세요. 이 익스텐션은 아시아 태평양(뭄바이), 미국 동부(오하이오), 유럽(아일랜드), 유럽(프랑크푸르트), 유럽(취리히), 미국 동부(버지니아 북부), 유럽(런던), 유럽(스페인), 아시아 태평양(도쿄), 미국 서부(오레곤), 아시아 태평양(싱가포르), 아시아 태평양(하이데라바드), 아시아 태평양(시드니) 리전에서 ARM을 지원합니다.

확장은 AWS 클라이언트를 사용합니다. AWS 클라이언트 구성에 대한 자세한 내용은 AWS SDK 및 도구 참조 가이드의 Settings reference를 참조하세요. Lambda 함수가 VPC에서 실행될 경우, 확장이 Secrets Manager를 직접적으로 호출할 수 있도록 VPC 엔드포인트를 생성해야 합니다. 자세한 내용은 AWS Secrets Manager VPC 엔드포인트 사용 단원을 참조하십시오.

필요한 권한:

  • Lambda 실행 역할에는 보안 암호에 대한 secretsmanager:GetSecretValue 권한이 있어야 합니다.

  • AWS 관리형 키 aws/secretsmanager 대신 고객 관리형 키로 보안 암호를 암호화하는 경우 실행 역할은 KMS 키에 대한 kms:Decrypt 권한도 필요합니다.

AWS 파라미터 및 보안 암호 Lambda 확장을 사용하려면
  1. 함수에 AWS Parameters and Secrets Lambda Extension이라는 AWS 계층을 추가합니다. 지침을 보려면 Lambda 개발자 안내서의 함수에 계층 추가 단원을 참조하세요. AWS CLI를 사용하여 계층을 추가할 경우 확장의 ARN이 필요합니다. ARN 목록은 AWS Systems Manager 사용 설명서의 AWS 매개변수 및 보안 암호 Lambda 확장 ARN을 참조하세요.

  2. Lambda 실행 역할에게 보안 암호에 액세스할 수 있는 권한을 부여합니다.

  3. Lambda 환경 변수를 사용하여 캐시를 구성합니다.

  4. 익스텐션 캐시에서 보안 암호를 검색하려면 먼저 요청 헤더에 X-AWS-Parameters-Secrets-Token을 추가해야 합니다. 모든 실행 중인 함수에 대해 Lambda에서 제공하는 AWS_SESSION_TOKEN으로 토큰을 설정합니다. 이 헤더를 사용하면 호출자가 Lambda 환경 내에 있음을 나타냅니다.

    다음 Python 예제에서는 헤더를 추가하는 방법을 보여줍니다.

    import os headers = {"X-Aws-Parameters-Secrets-Token": os.environ.get('AWS_SESSION_TOKEN')}
  5. Lambda 함수 내에서 보안 암호를 검색하려면 다음 HTTP GET 요청 중 하나를 사용합니다.

    • secretId에 대한 보안 암호를 검색하려면 보안 암호의 ARN 또는 이름을 사용합니다.

      GET: /secretsmanager/get?secretId=secretId
    • 이전 보안 암호 값이나 스테이징 레이블별 특정 버전을 검색하려면, secretId의 경우 보안 암호의 ARN 또는 이름을 사용하고, versionStage인 경우 스테이징 레이블을 사용하십시오.

      GET: /secretsmanager/get?secretId=secretId&versionStage=AWSPREVIOUS
    • ID별로 특정 암호 버전을 검색하려면, secretId의 경우 보안 암호의 ARN 또는 이름을 사용하고, versionId인 경우 버전 ID를 사용하십시오.

      GET: /secretsmanager/get?secretId=secretId&versionId=versionId
    예 보안 암호 검색(Python)

    다음 Python 예제에서는 json.loads를 사용하여 보안 암호를 검색하고 결과를 구문 분석하는 방법을 보여줍니다.

    secrets_extension_endpoint = "http://localhost:" + \ secrets_extension_http_port + \ "/secretsmanager/get?secretId=" + \ <secret_name> r = requests.get(secrets_extension_endpoint, headers=headers) secret = json.loads(r.text)["SecretString"] # load the Secrets Manager response into a Python dictionary, access the secret

AWS 파라미터 및 보안 암호 Lambda 확장 환경 변수

다음과 같은 환경 변수를 사용하여 익스텐션을 구성할 수 있습니다.

환경 변수를 사용하는 방법에 대한 자세한 내용은 Lambda 개발자 안내서Lambda 환경 변수 사용을 참조하세요.

PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED

파라미터와 보안 암호를 캐시하려면 true로 설정합니다. 캐싱이 없는 경우 false로 설정합니다. 기본값은 true입니다.

PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE

캐시할 최대 보안 암호 및 파라미터 수입니다. 0~1000 사이의 값이어야 합니다. 값이 0이면 적용된 캐싱이 없는 것입니다. 이 변수는 SSM_PARAMETER_STORE_TTLSECRETS_MANAGER_TTL이 모두 0일 경우 무시됩니다. 기본값은 1000입니다.

PARAMETERS_SECRETS_EXTENSION_HTTP_PORT

로컬 HTTP 서버의 포트입니다. 기본값은 2773입니다.

PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL

익스텐션 로깅 수준은debug, info, warn, error 또는 none을 제공합니다. 캐시 구성을 보려면 debug로 설정합니다. 기본값은 info입니다.

PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS

익스텐션에서 Parameter Store 또는 Secrets Manager에 요청하는 데 사용되는 HTTP 클라이언트의 최대 연결 수입니다. 이는 클라이언트별 구성입니다. 기본값은 3입니다.

SECRETS_MANAGER_TIMEOUT_MILLIS

Secrets Manager에 대한 요청 제한 시간(밀리초)입니다. 값이 0이면 적용된 시간 제한이 없는 것입니다. 기본값은 0.

SECRETS_MANAGER_TTL

캐시에 있는 보안 암호의 TTL(초)입니다. 값이 0이면 적용된 캐싱이 없는 것입니다. 최댓값은 300초입니다. PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE가 0인 경우 이 변수는 무시됩니다. 기본값은 300초입니다.

SSM_PARAMETER_STORE_TIMEOUT_MILLIS

Parameter Store에 대한 요청 제한 시간(밀리초)입니다. 값이 0이면 적용된 시간 제한이 없는 것입니다. 기본값은 0.

SSM_PARAMETER_STORE_TTL

캐시에 있는 파라미터의 TTL(초)입니다. 값이 0이면 적용된 캐싱이 없는 것입니다. 최댓값은 300초입니다. PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE가 0인 경우 이 변수는 무시됩니다. 기본값은 300초입니다.