이 주제에서는 보안 비밀 순환의 개념을 소개합니다. 시작하기 전에 플랫폼 개요를 검토하여 전반적인 Google Cloud 환경을 이해하는 것이 좋습니다. Secret Manager 제품 개요도 읽어보는 것이 좋습니다.
소개
주기적 순환은 다음을 수행하는 데 도움이 됩니다.
- 보안 비밀 유출의 경우 영향을 제한합니다.
- 보안 비밀에 더 이상 액세스할 필요가 없는 사용자는 이전 보안 비밀 값을 사용할 수 없도록 합니다.
- 순환 흐름을 지속적으로 수행하여 긴급 순환의 경우 서비스 중단 가능성을 줄입니다.
Secret Manager에는 순환된 보안 비밀을 지원하는 워크로드 빌드의 기반을 제공하는 보안 비밀, 보안 비밀 버전, 순환 일정이라는 개념이 있습니다.
이 주제에서는 Secret Manager에 저장된 보안 비밀 순환에 대한 권장사항을 제공합니다. 다음 섹션에서는 다음과 같은 이점과 단점을 살펴봅니다.
보안 비밀 버전에 결합
Secret Manager의 보안 비밀에는 여러 버전이 있을 수 있습니다. 보안 비밀 버전에는 변경할 수 없는 페이로드(실제 보안 비밀 바이트 문자열)가 포함되어 있으며 순서와 번호가 지정됩니다. 보안 비밀을 순환하려면 기존 보안 비밀에 새 보안 비밀 버전을 추가합니다.
보안 비밀에 가장 최근에 추가된 보안 비밀 버전은 latest
별칭을 사용하여 참조할 수 있습니다. latest
별칭은 개발의 경우에는 편리하지만 잘못된 값이 즉시 적용되어 서비스 전체 중단이 발생할 수 있으므로 일부 프로덕션 워크로드에서는 문제가 될 수 있습니다. 보안 비밀 버전에 결합하는 다른 방법은 다음 시나리오에서 설명합니다.
점진적 출시
점진적 출시는 다음 시나리오의 지침입니다. 보안 비밀 출시를 느리게 하여 손상 위험이 줄어들지만 복구 시간 또한 느려집니다. 일부 보안 비밀은 제어하거나 제어할 수 없는 외부 시스템(예: 유효한 보안 비밀 값을 추적하는 API 또는 데이터베이스)에서 무효화될 수 있으며 이러한 경우 복구하려면 출시해야 합니다.
수동 또는 자동 순환 중에 잘못된 보안 비밀이 출시될 수 있습니다. 강력한 순환 워크플로는 손상(예: HTTP 오류율)을 자동으로 감지하고 이전 구성 배포를 통해 이전 보안 비밀 버전으로 롤백할 수 있어야 합니다.
새 보안 비밀 버전의 출시는 보안 비밀이 애플리케이션에 결합되는 방식에 따라 다릅니다.
접근 방법 1: 기존 출시 프로세스 중에 확인
보안 비밀 버전을 확인하고 애플리케이션의 출시 버전과 결합합니다. 대부분의 배포에는 최신 보안 비밀 버전을 전체 보안 비밀 버전 리소스 이름으로 확인하고 애플리케이션과 함께 플래그 또는 구성 파일로 출시해야 합니다. 차단된 배포를 방지하기 위해 순환 시점에 보안 비밀 버전 이름을 확인하고, 리소스 이름을 안정적인 위치에 저장하고(예: Git에 커밋), 푸시를 수행하는 동안 버전 이름을 배포 구성으로 가져오는 것이 좋습니다.
애플리케이션 시작 시 특정 보안 비밀 버전 이름으로 Secret Manager를 호출하여 보안 비밀 값에 액세스합니다.
이 방식에는 다음과 같은 이점이 있습니다.
- 애플리케이션에서 다시 시작할 때 동일한 보안 비밀 버전을 사용하므로 예측 가능성이 증가하고 운영 복잡성이 줄어듭니다.
- 출시 및 롤백을 위한 기존 변경 관리 프로세스를 보안 비밀 순환 및 보안 비밀 버전 배포에 재사용할 수 있습니다.
- 이 값은 점진적으로 출시될 수 있으므로 잘못된 값 배포로 인한 영향을 줄일 수 있습니다.
접근 방법 2: 애플리케이션 시작 시 확인
애플리케이션 시작 시 최신 보안 비밀 페이로드를 가져오고 애플리케이션 기간 동안 계속 보안 비밀을 사용합니다.
이 방법을 사용할 때는 보안 비밀 버전을 확인하기 위해 CI/CD 파이프라인을 수정할 필요가 없지만, 잘못된 보안 비밀이 출시되면 인스턴스가 다시 시작되거나 서비스가 확장될 때 애플리케이션이 시작되지 않거나 서비스 중단이 발생할 수 있습니다.
접근 방법 3: 지속적인 확인
애플리케이션에서 최신 보안 비밀 버전을 지속적으로 폴링하고 새 보안 비밀 값을 즉시 사용합니다.
이 접근 방법에서는 새로운 보안 비밀 값이 점진적으로 채택되지 않으므로 서비스 전체의 즉각적인 중단 위험이 있습니다.
보안 비밀 순환
보안 비밀을 동적으로 업데이트할 수 있는 경우(예: 보안 비밀을 검증하는 외부 시스템에서 Admin API를 제공하는 경우) 주기적으로 실행되는 순환 작업을 설정하는 것이 좋습니다. 일반적인 단계는 Cloud Compute를 샘플 컴퓨팅 환경으로 사용하는 다음 섹션에 설명되어 있습니다.
보안 비밀의 순환 일정 구성
보안 비밀의 순환 일정을 설정합니다. Pub/Sub 주제는 보안 비밀을 순환할 때 알림을 수신하도록 보안 비밀에 구성되어야 합니다. 보안 비밀의 주제 구성에 대해서는 이벤트 알림 가이드를 참조하세요.
Cloud Run을 실행하여 새 보안 비밀 버전 만들기
Cloud Run 서비스를 만들고 구성하여 순환 알림을 수신하고 순환 단계를 실행합니다.
외부 시스템(예: 데이터베이스, API 제공업체)에서 새 보안 비밀을 가져오거나 만듭니다.
기존 워크로드가 영향을 받지 않도록 이 방법은 기존 보안 비밀을 무효화하지 않아야 합니다.
새 보안 비밀로 Secret Manager를 업데이트합니다.
Secret Manager에서 새
SecretVersion
을 만듭니다. 이렇게 하면latest
별칭이 새로 생성된 보안 비밀을 가리키도록 업데이트됩니다.
재시도 및 동시 실행
순환 프로세스는 언제든지 종료될 수 있으므로 Cloud Run 서비스는 중단된 지점부터 프로세스를 다시 시작할 수 있어야 합니다(재진입이 가능해야 함).
실패하거나 중단된 순환이 다시 실행될 수 있도록 Pub/Sub에서 재시도 구성을 하는 것이 좋습니다. 또한 동시 순환 실행이 서로 간섭할 가능성을 최소화하기 위해 Cloud Run 서비스에서 최대 동시 실행 및 최대 인스턴스를 구성합니다.
재진입 순환 함수를 빌드하려면 순환 프로세스를 재개할 수 있도록 상태를 저장하는 것이 유용할 수 있습니다. 이를 수행하는 데 도움이 되는 두 가지 Secret Manager 기능이 있습니다.
- 보안 비밀의 라벨을 사용하여 순환 중에 상태를 저장합니다.
순환 워크플로 중에 마지막으로 성공적으로 추가된 버전(즉,
ROTATING_TO_NEW_VERSION_NUMBER=3
)을 추적하기 위해 보안 비밀에 라벨을 추가합니다. 순환이 완료되면 순환 추적 라벨을 삭제합니다. - ETag를 사용하여 순환 워크플로 중에 다른 프로세스가 보안 비밀을 동시에 수정하지 않는지 확인합니다. 보안 비밀 및 보안 비밀 버전 ETag 자세히 알아보기
Identity and Access Management 권한
순환 프로세스에는 새 보안 비밀 버전을 추가하는 데 secretmanager.versions.add
권한이 필요하며 이전 보안 비밀 버전을 읽으려면 secretmanager.versions.access
가 필요할 수 있습니다.
기본 Cloud Run 서비스 계정에는 보안 비밀 버전을 추가할 수 있지만 액세스할 수 없는 권한이 포함된 편집자 역할이 있습니다. 최소 권한의 원칙을 따르려면 기본 서비스 계정을 사용하지 않는 것이 좋습니다. 대신 필요에 따라 부여된 Secret Manager 역할을 사용하여 Cloud Run 서비스에 대해 별도의 서비스 계정을 설정합니다(하나 이상일 수 있음).
roles/secretmanager.secretVersionAdder
roles/secretmanager.secretVersionManager
roles/secretmanager.secretAdmin
roles/secretmanager.secretAccessor
워크로드에 새 SecretVersion
출시
이제 유효한 새 SecretVersion
이 외부 시스템에 등록되고 Secret Manager에 저장되었으므로 이를 애플리케이션에 출시합니다. 출시는 보안 비밀 결합 방식에 따라 다르며(보안 비밀 버전 결합 섹션 참조) 일반적으로 수동 개입이 필요하지 않습니다.
이전 보안 비밀 버전 삭제
모든 애플리케이션이 이전 보안 비밀 버전에서 순환되면 안전하게 삭제할 수 있습니다. 삭제 프로세스는 보안 비밀 유형에 따라 다르지만 일반적으로 다음과 같습니다.
- 새 보안 비밀 버전이 모든 애플리케이션에 완전히 출시되었는지 확인합니다.
- Secret Manager에서 이전 보안 비밀 버전을 사용 중지하고 애플리케이션이 중단되지 않는지 확인합니다(사용 중지하여 소비자가 중단되는 경우 사람이 개입할 수 있도록 적절한 시간을 대기).
- 외부 시스템에서 이전 보안 비밀 버전을 삭제하거나 등록 취소합니다.
- Secret Manager에서 이전 보안 비밀 버전을 폐기합니다.
다음 단계
- 보안 비밀의 순환 일정 설정 방법 알아보기