Lambda 회전 함수 - AWS Secrets Manager

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

Lambda 회전 함수

Lambda 함수에 의한 회전에서는 Lambda 함수가 시크릿을 회전시키는 작업을 수행합니다. 교체하는 동안 Secrets Manager는 스테이징 레이블을 사용하여 보안 암호의 버전을 지정합니다.

Secrets Manager에서 암호 유형에 맞는 순환 함수 템플릿을 제공하지 않는 경우 순환 함수를 만들 수 있습니다. 로테이션 함수를 작성할 때는 각 단계의 지침을 따르세요.

회전 함수를 직접 작성하기 위한 팁
  • 일반 회전 템플릿을 출발점으로 삼아 자신만의 회전 함수를 작성하세요.

  • 함수를 직접 작성할 때와 마찬가지로 디버깅 또는 로깅 명령문을 포함하는 데 주의해야 합니다. 이러한 명령문으로 인해 함수의 정보가 CloudWatch Amazon에 기록될 수 있으므로 개발 중에 수집된 민감한 정보가 로그에 포함되지 않도록 해야 합니다.

    로그 문의 예는 AWS Secrets Manager 회전 함수 템플릿 소스 코드를 참조하세요.

  • 보안을 위해 Secrets Manager는 Lambda 교체 함수에서 암호를 직접 교체하는 것만 허용합니다. 교체 함수는 두 번째 Lambda 함수를 호출하여 암호를 교체할 수 없습니다.

  • 디버깅 제안 사항은 서버리스 애플리케이션 테스트 및 디버깅을 참조하세요.

  • 예를 들어 외부 바이너리와 라이브러리를 사용하여 리소스에 연결하는 경우 이를 패치하고 보관하려면 관리해야 합니다. up-to-date

  • 교체 함수를 필요한 종속성과 함께 my-function.zip ZIP 파일에 저장합니다.

로테이션 함수의 4단계

create_secret: 시크릿의 새 버전 만들기

메서드는 create_secret 먼저 ClientRequestToken 전달된 get_secret_value암호로 호출하여 비밀이 존재하는지 확인합니다. 비밀이 없는 경우 토큰을 다음과 같이 하여 새 시크릿을 create_secret생성합니다. VersionId 그런 다음 를 사용하여 새 비밀 값을 생성합니다 get_random_password. 다음으로 스테이징 AWSPENDING 레이블과 함께 put_secret_value저장하도록 호출합니다. 새 보안 암호 값을 AWSPENDING에 저장하면 멱등성을 보장하는 데 도움이 됩니다. 어떤 이유로든 교체에 실패할 경우 후속 호출에서 해당 보안 암호 값을 참조할 수 있습니다. 멱등성 Lambda 함수를 만들려면 어떻게 해야 합니까? 섹션을 참조하세요.

회전 함수를 직접 작성하기 위한 팁
  • 새 암호 값에는 데이터베이스 또는 서비스에 유효한 문자만 포함되도록 하십시오. ExcludeCharacters 파라미터를 사용하여 문자를 제외합니다.

  • 함수를 테스트할 때는 를 사용하여 버전 단계를 확인하십시오: 호출 describe-secret및 살펴보기VersionIdsToStages. AWS CLI

  • Amazon RDS MySQL의 경우 사용자 교대로 교체하여 Secrets Manager는 이름이 16자를 넘지 않는 클론 사용자를 생성합니다. 더 긴 사용자 이름을 허용하도록 교체 함수를 수정할 수 있습니다. MySQL 버전 5.7 이상에서는 최대 32자의 사용자 이름을 지원하지만 Secrets Manager는 사용자 이름 끝에 "_clone"(6자)을 추가하므로 사용자 이름을 최대 26자로 유지해야 합니다.

set_secret: 데이터베이스 또는 서비스의 자격 증명 변경

이 메서드는 데이터베이스 또는 서비스의 자격 증명을 암호 AWSPENDING 버전의 새 암호 값과 일치하도록 set_secret 변경합니다.

자체 회전 함수를 작성하기 위한 팁
  • 명령문을 해석하는 서비스 (예: 데이터베이스) 에 명령문을 전달하는 경우 쿼리 매개 변수화를 사용하십시오. 자세한 내용은 OWASP 웹 사이트의 쿼리 매개 변수화 치트 시트를 참조하십시오.

  • 교체 함수는 Secrets Manager 보안 암호와 대상 리소스 모두에서 고객 보안 인증을 액세스하고 수정할 수 있는 권한을 가진 대리자입니다. 잠재적으로 혼동된 대리자 공격을 방지하려면 공격자가 함수를 사용하여 다른 리소스에 액세스할 수 없도록 해야 합니다. 보안 인증을 업데이트하기 전에:

    • AWSCURRENT 버전 보안 암호의 보안 인증이 유효한지 확인합니다. AWSCURRENT 보안 인증이 유효하지 않은 경우 교체 시도를 중단합니다.

    • AWSCURRENTAWSPENDING 보안 암호 값이 동일한 리소스에 대한 값인지 확인합니다. 사용자 이름과 암호의 경우 AWSCURRENTAWSPENDING 사용자 이름이 동일한지 확인합니다.

    • 대상 서비스 리소스가 동일한지 확인합니다. 데이터베이스의 경우 AWSCURRENTAWSPENDING 호스트 이름이 동일한지 확인합니다.

  • 드문 경우이긴 하지만 데이터베이스의 기존 순환 함수를 사용자 지정해야 할 수도 있습니다. 예를 들어 대체 사용자 교체가 있는 경우 Secrets Manager는 첫 번째 사용자의 런타임 구성 매개변수를 복사하여 복제된 사용자를 생성합니다. 더 많은 속성을 포함하거나 복제된 사용자에게 부여되는 속성을 변경하려면 set_secret 함수의 코드를 업데이트해야 합니다.

test_secret: 새 시크릿 버전 테스트

다음으로 Lambda 교체 함수는 데이터베이스나 서비스에 액세스하는 데 보안 암호의 AWSPENDING 버전을 사용하여 해당 버전을 테스트합니다. 교체 함수 템플릿 기반 교체 함수는 읽기 액세스를 사용하여 새 보안 암호를 테스트합니다.

finish_secret: 로테이션 완료

마지막으로 Lambda 교체 함수는 AWSCURRENT 레이블을 이전 보안 암호 버전에서 이 버전으로 이동하며 동일한 API 호출에서 AWSPENDING 레이블도 제거합니다. Secrets Manager에서 AWSPREVIOUS 스테이징 레이블을 이전 버전으로 추가하여 보안 암호의 마지막으로 확인된 정상 버전을 유지할 수 있습니다.

이 메서드는 스테이징 레이블을 이전 비밀 AWSCURRENT 버전에서 새 비밀 버전으로 이동하는 데 finish_secret 사용합니다 update_secret_version_stage. Secrets Manager에서 AWSPREVIOUS 스테이징 레이블을 이전 버전에 자동으로 추가하여 보안 암호의 마지막으로 확인된 정상 버전을 유지할 수 있습니다.

자체 회전 함수 작성을 위한 팁
  • 이 시점 AWSPENDING 이전에는 제거하지 말고 별도의 API 호출을 사용하여 제거하지 마십시오. 그러면 순환이 성공적으로 완료되지 않았음을 Secrets Manager에 알릴 수 있기 때문입니다. Secrets Manager에서 AWSPREVIOUS 스테이징 레이블을 이전 버전으로 추가하여 보안 암호의 마지막으로 확인된 정상 버전을 유지할 수 있습니다.

교체가 성공하면 AWSPENDING 스테이징 레이블은 AWSCURRENT 버전과 동일한 버전에 첨부되거나 어떤 버전에도 연결되지 않을 수 있습니다. AWSPENDING 스테이징 레이블이 있지만 AWSCURRENT와 동일한 버전에 연결되지 않은 경우 이후의 교체 호출은 이전 교체 요청이 아직 진행 중인 것으로 간주하여 오류를 반환합니다. 교체에 실패하면 AWSPENDING 스테이징 레이블은 빈 암호 버전에 연결될 수 있습니다. 자세한 내용은 교체 문제 해결을(를) 참조하세요.