자격 증명 관리(Credential management)
자격 증명 관리(Credential management)
대상 접근이 필요한 모든 사람과 정적 자격 증명을 공유하는 것은 보안상 큰 부담이에요. Boundary는 두 가지 패러다임으로 이 문제를 해결해요. 자격 증명을 사용자에게 돌려주는 "자격 증명 브로커링(credential brokering)"과, 자격 증명을 절대 노출하지 않고 사용자 대신 인증해 주는 "자격 증명 주입(credential injection)"이 바로 그것이죠.
본문
사용자가 원격 머신에 연결할 때는 보통 인증을 위한 자격 증명 세트가 필요해요. 머신에 연결한 뒤에는 네트워크 안의 서비스나 다른 머신에 접근하려고 또 다른 자격 증명 세트가 필요할 수도 있죠.
자격 증명 브로커링(Credential brokering)
자격 증명 브로커링은 자격 증명 스토어에서 자격 증명을 가져와서 사용자에게 되돌려주는 과정이에요. 사용자는 특정 대상에 연결할 권한이 이미 있어야, 그 대상의 자격 증명이 브로커링되어 돌아올 수 있습니다. 자격 증명은 세션이 수립될 때 브로커링돼요.
자격 증명 브로커링 과정은 이렇게 동작합니다:
- 사용자가 CLI 또는 데스크톱 앱으로 Boundary에 인증해요.
- 사용자가 대상에 연결을 요청해요. 컨트롤러가 자격 증명 스토어에서 자격 증명을 가져와 사용자에게 전달해요.
- 사용자가 세션에 연결을 수립해요. 컨트롤러가 작업을 워커에 할당하고, 워커가 대상에 세션을 수립해요.
- 사용자가 자격 증명을 입력해요. 사용자가 대상에 인증됩니다.
브로커링된 자격 증명은 SSH, TCP, RDP 대상에 연결할 수 있어요. 브로커링된 자격 증명은 예를 들어 토큰, 사용자명/비밀번호, 사용자명/비밀번호/도메인, JSON 블롭, 또는 Vault에 저장된 비구조적 시크릿 형태일 수 있어요.
보안 고려 사항
사용자가 SSH로 대상에 접근하려는 시나리오를 생각해 보죠. 이 시나리오에서 사용자는 대상에 접근할 권한이 있어야 해요. 권한이 있다면 브로커링(반환)된 자격 증명으로 머신에 인증할 수 있어요. 대상에 접근할 권한이 없다면 그 대상의 브로커링된 자격 증명을 가져올 수 없어요.
사용자가 브로커링된 자격 증명으로 인증 과정을 추상화하고 싶다면 boundary connect ssh 스타일 명령을 쓰고 자격 증명을 sshpass, PuTTY 같은 도구에 넘길 수 있어요. 이 시나리오에서 브로커링된 자격 증명이 사용자에게 보이지 않을 수 있어도, 사용자는 여전히 인증을 수행하기 위해 브로커링된 자격 증명과 상호작용해요.
또한 Vault의 동적 시크릿 엔진으로 관리자는 시크릿이 본질적으로 일회용 비밀번호가 되도록 환경을 구성할 수 있어요. 세션이 종료되면 자격 증명이 폐기되기 때문이죠.
자격 증명 주입(Credential injection)
자격 증명 주입은 자격 증명 스토어에서 자격 증명을 가져온 뒤 워커에 전달해 원격 머신에 인증하는 과정이에요. 주입을 사용하면 사용자는 대상에 인증하는 데 필요한 자격 증명을 절대 볼 수 없어요. 워커가 세션 수립과 대상 인증을 모두 사용자 대신 수행하므로 사용자에게 비밀번호 없는 경험이 제공되죠.
이 과정은 자격 증명을 사용자에게 반환하는 대신 워커 노드에서 세션에 주입하는 브로커링과 다릅니다.
자격 증명 주입 과정은 이렇게 동작해요:
- 사용자가 Boundary에 인증해요.
- 사용자가 대상에 연결을 요청해요. 컨트롤러가 자격 증명 스토어에서 자격 증명을 가져와요.
- 사용자가 세션에 연결을 수립해요. 컨트롤러가 작업을 워커에 할당하고 워커가 대상에 세션을 수립해요. 그러면 컨트롤러가 자격 증명을 워커에 전달해요.
- 워커가 대상에 인증하고, 사용자는 대상에 인증된 상태가 돼요.
대상 유형(Target types)
자격 증명 주입은 RDP(Remote Desktop Protocol)와 SSH 대상 유형에 필요해요. SSH 대상에 접근할 때 다음 자격 증명 유형을 주입할 수 있어요:
- SSH 인증서
- 사용자명과 비밀번호
- 사용자명과 공개 키
키보드 인터랙티브(Keyboard-interactive) 인증은 자격 증명 주입에 지원되지 않아요. 사용자명/비밀번호 자격 증명을 사용할 때는 SSH 서버가 비밀번호 인증을 허용하도록 구성되어 있는지 확인하세요.
Active Directory나 NTLMv2로 인증하는 Windows 환경에서 RDP 대상에 접근할 때는 사용자명/비밀번호/도메인 자격 증명을 주입할 수 있어요. 주입된 자격 증명으로 세션이 수립된 뒤에는 추가 자격 증명을 RDP나 SSH 대상에 브로커링할 수 있습니다.
보안 고려 사항
사용자가 SSH로 대상에 접근하려는 시나리오를 생각해 보죠. 이 시나리오에서 사용자는 대상에 접근할 권한이 있어야 해요. 권한이 있다면 워커에 연결할 수 있어요. 워커에 연결하면 워커가 대상에 원격 세션을 수립하려 시도하고, 사용자 대신 인증을 시도해요. 대상에 접근할 권한이 없다면 그 사용자 대신 자격 증명이 주입되지 않고, 자격 증명이 그 사용자에게 브로커링되지도 않아요.
자격 증명 관리 튜토리얼
자격 증명 브로커링 구성을 연습하려면 첫 번째 대상에 정적 자격 증명 브로커링(Broker static credentials to your first target) 튜토리얼을, 자격 증명 주입 구성을 연습하려면 HCP Boundary와 Vault로 SSH 키 관리(Manage SSH keys) 튜토리얼을 참고하세요.
더 알아보기 (Learn more)
Boundary가 자격 증명 관리를 중앙화해 보안을 강화하는 방법은 "Credentials in Boundary"를 참고하세요. 정적 자격 증명으로 브로커링이나 주입을 구성하려면 다음 주제를 참고하세요.
- 정적 자격 증명 스토어 만들기(Create a static credential store)
- Vault 자격 증명 스토어 만들기(Create a Vault credential store)
Vault 동적 시크릿 엔진에 대해 더 배우려면 Secrets engines를 참고하세요.