키 관리
키 관리 (Key management)
Nomad 서버는 Variables를 암호화하고, 태스크 워크로드 아이덴티티에 서명하고, OIDC 클라이언트 assertion JWT에 서명하는 데 사용되는 암호화 키링을 유지해요. 서버는 이 데이터 암호화 키(DEK)를 암호화하고 래핑된 키를 Raft에 저장해요.
DEK를 암호화하는 데 사용되는 키 암호화 키(KEK)는 keyring provider가 제어해요. 외부 KMS 또는 Vault transit 암호화 provider를 사용할 때 KEK는 Nomad 밖에 안전하게 저장돼요. 기본 AEAD provider의 경우 KEK는 Raft에 평문으로 저장돼요.
참고
기본 AEAD provider 사용자는 Key Encryption Key(KEK)를 Raft에 평문으로 저장하는 것이 침해 발생 시 데이터를 노출할 수 있음을 알아야 해요.
정상 운영 중에는 키링이 전적으로 Nomad에 의해 관리되지만, 이 섹션은 키 복제와 복구에 대한 추가 컨텍스트를 관리자에게 제공해요.
출처: 문서
본문
키 회전 (Key rotation)
키링에는 주어진 시점에 "활성" 키가 하나만 있고, 모든 암호화와 서명 작업은 리더에서 발생해요. Nomad는 활성 암호화 키를 30일마다 자동으로 회전해요. 키가 회전하면 기존 키는 "비활성(inactive)"으로 표시되지만 삭제되지는 않아서, 이전에 암호화된 변수를 해독하고 기존 할당의 워크로드 아이덴티티를 검증하는 데 사용할 수 있어요.
키 자재가 손상되었다고 생각되면 nomad operator root keyring rotate -full을 실행할 수 있어요. 새 "활성" 키가 생성되고 "비활성" 키는 "rekeying"으로 표시돼요. Nomad는 모든 변수를 새 키로 비동기적으로 해독하고 다시 암호화해요. 각 키의 변수가 새 키로 암호화되면 이전 키는 "deprecated"로 표시돼요.
키 해독 (Key decryption)
리더가 선출되면 리더는 키링이 아직 존재하지 않으면 그것을 만들어요. 키가 추가되면 새 래핑된 키 자재가 Raft를 통해 복제돼요. 각 서버가 새 키를 복제하면 서버는 키 자재를 해독하는 태스크를 시작해요. 이 태스크가 완료될 때까지 서버는 이 키가 필요한 요청을 제공할 수 없어요.
Raft 시나리오 스냅샷에서 키 삭제 (Key redaction in Raft scenario snapshots)
기본 AEAD keyring 구성은 KEK를 Raft에 저장해요. Raft 스냅샷에는 평문 KEK가 포함돼요. nomad operator snapshot save 명령에는 스냅샷을 만들 때 키 자재를 제거하는 -redact 옵션이 있어요. nomad operator snapshot redact 명령은 기존 스냅샷에서 키 자재를 제거해요.
키 자재 삭제는 외부 KMS를 사용할 때는 필요하지 않아요.
레거시 키 저장소 (Legacy keystore)
1.9.0 이전의 Nomad 버전은 Raft에 키 메타데이터만 저장했지만, 암호화 키 자재는 Nomad data directory의 keystore 하위 디렉터리의 별도 파일에 저장됐어요. 이 파일들은 .nks.json 확장자를 가져요. 각 파일의 키 자재는 서버 간에 공유되지 않는 고유한 키 암호화 키(KEK)로 래핑돼요.
각 서버는 상태 저장소의 변경을 감시하고 리더에서 키 자재를 비동기적으로 가져오는 키 복제 프로세스를 실행해요. 키가 리더 선거 직전에 쓰여진 경우 다른 서버에서 가져오는 것으로 폴백해요. Nomad 1.9.0 이상은 이전 서버에서 키를 복제할 수 있어요.
그러나 이전 서버에서 키를 복제한다는 것은 스냅샷에서 이전 클러스터를 복원하려면 적어도 한 대의 서버에 .nks.json 키 파일이 있는 keystore 디렉터리도 제공해야 함을 의미해요. .nks.json 키 파일은 서버마다 고유하지만, 클러스터를 복구하는 데는 한 대 서버의 키 파일만 필요해요. 운영자는 클러스터가 완전히 Nomad 1.9.0으로 업그레이드되고 root_key_gc_interval이 적어도 한 번 지나갈 때까지 이러한 파일을 조직의 클러스터 백업·복구 전략의 일부로 계속 포함해야 해요.
워크로드를 실행하지 않고 새 클러스터에 이전 Raft 스냅샷을 복구하고 있다면 키링 복원을 건너뛰고 서버가 합류한 후 nomad operator root keyring rotate를 실행할 수 있어요.