기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Lambda 교체 함수
Lambda 함수로 교체에서 Lambda 함수는 보안 암호를 교체하는 작업을 수행합니다. 교체하는 동안 Secrets Manager는 스테이징 레이블을 사용하여 보안 암호의 버전을 지정합니다.
Secrets Manager가 보안 암호 유형에 대한 교체 함수 템플릿을 제공하지 않을 경우, 교체 함수를 직접 생성할 수 있습니다. 교체 함수를 작성할 때는 각 단계의 지침을 따릅니다.
교체 함수를 직접 작성하기 위한 팁
-
일반 교체 템플릿을 출발점으로 사용하여 고유한 교체 함수를 작성합니다.
-
함수를 직접 작성할 때와 마찬가지로 디버깅 또는 로깅 명령문을 포함하는 데 주의해야 합니다. 이러한 명령문으로 인해 함수의 정보가 Amazon CloudWatch에 쓰일 수 있으므로 개발 중에 수집된 민감한 데이터가 로그에 포함되지 않도록 해야 합니다.
로그 문의 예는 AWS Secrets Manager 교체 함수 템플릿 소스 코드를 참조하세요.
-
보안을 위해 Secrets Manager는 Lambda 교체 함수에서 암호를 직접 교체하는 것만 허용합니다. 교체 함수는 두 번째 Lambda 함수를 호출하여 암호를 교체할 수 없습니다.
-
디버깅 제안 사항은 서버리스 애플리케이션 테스트 및 디버깅을 참조하세요.
-
예를 들어 외부 바이너리와 라이브러리를 사용하여 리소스에 연결하는 경우 바이너리와 라이브러리를 패치하고 최신 상태로 유지해야 합니다.
-
교체 함수를 필요한 종속성과 함께
my-function.zip
ZIP 파일에 저장합니다.
교체 함수의 4단계
주제
create_secret
: 새로운 버전의 보안 암호 생성
create_secret
메서드에서는 먼저 전달된 ClientRequestToken
으로 get_secret_value
create_secret
VersionId
로 사용하여 새 보안 암호를 생성합니다. 그러면 get_random_password
put_secret_value
와 함께 저장합니다. 새 보안 암호 값을 AWSPENDING
에 저장하면 멱등성을 보장하는 데 도움이 됩니다. 어떤 이유로든 교체에 실패할 경우 후속 호출에서 해당 보안 암호 값을 참조할 수 있습니다. 멱등성 Lambda 함수를 만들려면 어떻게 해야 합니까?AWSPENDING
교체 함수를 직접 작성하기 위한 팁
새 보안 암호 값에 데이터베이스 또는 서비스에 유효한 문자만 포함되어 있는지 확인해야 합니다.
ExcludeCharacters
파라미터를 사용하여 문자를 제외합니다.함수를 테스트할 때 AWS CLI를 사용하여 버전 단계를 확인하세요. 즉,
describe-secret
를 호출하고VersionIdsToStages
를 살펴보세요.-
Amazon RDS MySQL의 경우 대체 사용자 교체 시 Secrets Manager는 이름이 16자를 넘지 않는 클론 사용자를 생성합니다. 더 긴 사용자 이름을 허용하도록 교체 함수를 수정할 수 있습니다. MySQL 버전 5.7 이상에서는 최대 32자의 사용자 이름을 지원하지만 Secrets Manager는 사용자 이름 끝에 "_clone"(6자)을 추가하므로 사용자 이름을 최대 26자로 유지해야 합니다.
set_secret
: 데이터베이스 또는 서비스의 보안 인증 변경
set_secret
메서드는 데이터베이스 또는 서비스의 자격 증명을 AWSPENDING
버전 보안 암호의 새 보안 암호 값과 일치하도록 변경합니다.
교체 함수를 직접 작성하기 위한 팁
-
데이터베이스처럼 문을 해석하는 서비스에 문을 전달할 경우 쿼리 파라미터화를 사용합니다. 자세한 내용은 OWASP 웹 사이트의 Query Parameterization Cheat Sheet
를 참조하세요. -
교체 함수는 Secrets Manager 보안 암호와 대상 리소스 모두에서 고객 보안 인증을 액세스하고 수정할 수 있는 권한을 가진 대리자입니다. 잠재적으로 혼동된 대리자 공격을 방지하려면 공격자가 함수를 사용하여 다른 리소스에 액세스할 수 없도록 해야 합니다. 보안 인증을 업데이트하기 전에:
AWSCURRENT
버전 보안 암호의 보안 인증이 유효한지 확인합니다.AWSCURRENT
보안 인증이 유효하지 않은 경우 교체 시도를 중단합니다.AWSCURRENT
및AWSPENDING
보안 암호 값이 동일한 리소스에 대한 값인지 확인합니다. 사용자 이름과 암호의 경우AWSCURRENT
및AWSPENDING
사용자 이름이 동일한지 확인합니다.대상 서비스 리소스가 동일한지 확인합니다. 데이터베이스의 경우
AWSCURRENT
및AWSPENDING
호스트 이름이 동일한지 확인합니다.
-
드문 경우지만 데이터베이스에 대한 기존 교체 함수를 사용자 지정할 수 있습니다. 예를 들어 대체 사용자 교체가 있는 경우 Secrets Manager는 첫 번째 사용자의 런타임 구성 매개변수를
복사하여 복제된 사용자를 생성합니다. 더 많은 속성을 포함하거나 복제된 사용자에게 부여되는 속성을 변경하려면 set_secret
함수의 코드를 업데이트해야 합니다.
test_secret
: 새 보안 암호 버전 테스트
다음으로 Lambda 교체 함수는 데이터베이스나 서비스에 액세스하는 데 보안 암호의 AWSPENDING
버전을 사용하여 해당 버전을 테스트합니다. 교체 함수 템플릿 기반 교체 함수는 읽기 액세스를 사용하여 새 보안 암호를 테스트합니다.
finish_secret
: 교체 완료
마지막으로 Lambda 교체 함수는 AWSCURRENT
레이블을 이전 보안 암호 버전에서 이 버전으로 이동하며 동일한 API 호출에서 AWSPENDING
레이블도 제거합니다. Secrets Manager에서 AWSPREVIOUS
스테이징 레이블을 이전 버전으로 추가하여 보안 암호의 마지막으로 확인된 정상 버전을 유지할 수 있습니다.
finish_secret
메서드는 update_secret_version_stage
AWSCURRENT
스테이징 레이블을 이전 보안 암호 버전에서 새 보안 암호 버전으로 이동합니다. Secrets Manager에서 AWSPREVIOUS
스테이징 레이블을 이전 버전에 자동으로 추가하여 보안 암호의 마지막으로 확인된 정상 버전을 유지할 수 있습니다.
교체 함수를 직접 작성하기 위한 팁
이 시점 이전에는
AWSPENDING
을 제거해서는 안 되며, 별도의 API 호출을 사용하여 제거하면 교체가 성공적으로 완료되지 않았음을 Secrets Manager에 알릴 수 있으므로 별도의 API 직접 호출을 사용하여 제거해서도 안 됩니다. Secrets Manager에서AWSPREVIOUS
스테이징 레이블을 이전 버전으로 추가하여 보안 암호의 마지막으로 확인된 정상 버전을 유지할 수 있습니다.
교체가 성공하면 AWSPENDING
스테이징 레이블은 AWSCURRENT
버전과 동일한 버전에 첨부되거나 어떤 버전에도 연결되지 않을 수 있습니다. AWSPENDING
스테이징 레이블이 있지만 AWSCURRENT
와 동일한 버전에 연결되지 않은 경우 이후의 교체 호출은 이전 교체 요청이 아직 진행 중인 것으로 간주하여 오류를 반환합니다. 교체에 실패하면 AWSPENDING
스테이징 레이블은 빈 암호 버전에 연결될 수 있습니다. 자세한 내용은 교체 문제 해결 단원을 참조하십시오.