통신과 보안
이 절에서는 인증 및 보안에 대한 기본 개요와 함께 Salt 통신 모델에 대해 설명합니다.
아키텍처 모델
Salt는 서버-에이전트 통신 모델을 사용합니다(독립 실행형 단일 서버 관리 유틸리티로 작동하며 SSH를 통해 에이전트 없는 실행 기능도 제공함). 서버 구성 요소를 솔트 마스터라고 하며, 에이전트를 솔트 미니언이라고 합니다.
솔트 마스터는 솔트 미니언즈에게 명령을 전송한 다음 해당 명령의 결과를 집계하고 표시하는 역할을 합니다. 하나의 솔트 마스터가 수천 개의 시스템을 관리할 수 있습니다.
통신 모델
Salt는 게시-구독(publish-subscribe) 패턴을 사용하여 관리되는 시스템과 통신합니다. 연결은 Salt minion에 의해 시작되며, 이는 이러한 시스템에서 들어오는 포트를 열 필요가 없으므로 공격 벡터가 줄어듭니다. 솔트 마스터는 포트 4505와 포트 4506을 사용하며, 포트 4505는 들어오는 연결을 허용하도록 개방해야 합니다.
Publisher | (port 4505) 모든 솔트 미니언은 메시지를 수신하는 게시자 포트에 영구적인 연결을 설정합니다. 이 포트를 통한 모든 연결에 명령이 비동기적으로 전송되므로 다수의 시스템에서 명령을 동시에 실행할 수 있습니다. |
Request Server | (port 4506) 솔트 미니언은 솔트 마스터에 결과를 전송하고 파일 및 미니언별 데이터 값(솔트 필러(pillar)라고 함)을 안전하게 요청 서버에 연결합니다. 이 포트에 대한 연결은 Salt Master와 Salt Minion 사이에 1:1입니다(비동기식 아님). |
솔트 미니언 인증
미니언은 처음 시작할 때 솔트(Salt)라는 이름의 시스템이 있는지 네트워크를 검색합니다(단, IP 또는 다른 호스트 이름으로 쉽게 변경할 수 있음). 발견되면 미니언은 핸드쉐이크를 시작한 다음 공개 키를 솔트 마스터에게 보냅니다.
이 초기 연결 후에 솔트 미니언의 공개 키는 서버에 저장되며 salt-key 명령을 사용하여 솔트마스터에서 승인되어야 한다. 솔트가 솔트미니언의 공개 키가 승인될 때까지 메시지를 디코딩하는 데 필요한 보안 키를 제공하지 않기 때문에(즉, 솔트미니언은 키가 승인될 때까지 어떤 명령도 실행하지 않음) 새로운 사용자에게 혼란을 줄 수 있습니다.
미니언 키가 수락되면 솔트 마스터는 솔트 마스터가 보낸 메시지를 암호화하고 해독하는 데 사용되는 회전 AES 키와 함께 공개 키를 반환합니다. 반환된 AES 키는 솔트 미니언에서 처음 보낸 공개 키를 사용하여 암호화되므로 솔트 미니언에서만 암호를 해독할 수 있습니다.
보안 통신
솔트 마스터와 솔트 미니언 간의 모든 추가 통신은 AES 키를 사용하여 암호화됩니다. AES 암호화 키는 TLS의 최신 버전에 따라 명시적 초기화 벡터와 CBC 블록 체인 알고리즘을 사용한다.
보안 키 회전
회전 AES 키는 솔트 마스터가 솔트 미니언으로 보내는 작업을 암호화하고 솔트 마스터 파일 서버에 대한 연결을 암호화하는 데 사용됩니다. 솔트 키 명령을 사용하여 솔트 키 마스터가 다시 시작되고 솔트 키 명령을 사용하여 솔트 미니언 키가 삭제될 때마다 새 키가 생성되어 사용됩니다.
키를 회전한 후에는 모든 솔티니언이 다시 인증해야 업데이트된 키를 받을 수 있습니다. 이렇게 하면 AES 키가 미니언 연결을 중단하지 않고 회전할 수 있습니다.
암호화된 통신 채널
솔트 마스터와 솔트 미니언 간의 게시 통신은 회전 AES 키를 사용하여 암호화됩니다. 솔트 마스터와 솔트 미니언 간의 직접 통신은 각 세션에 대해 고유한 AES 키를 사용하여 암호화됩니다.
예를 들어 게시된 작업은 회전 AES 키를 사용하여 암호화되지만 솔트 필러를 사용하여 전송된 보안 미니언별 데이터는 각 솔트 미니언 및 세션에 대해 고유한 AES 키로 암호화됩니다.
사용자 액세스 제어
명령을 미니언으로 전송하기 전에 Salt는 게시자 ACL에 대해 내부 검사를 수행하여 명령을 실행하는 사용자에게 올바른 권한이 있는지 확인합니다. 사용자가 지정된 대상에 대해 지정된 명령을 실행할 권한이 있으면 명령이 전송됩니다. 그렇지 않으면 오류가 반환됩니다. 또한 Salt는 명령줄 인터페이스에 응답해야 하는 미니언 목록을 반환하므로 반환 대기 시간을 알 수 있습니다.
다음으로, 원격 실행을 시작으로 인프라 관리에 사용할 기본 플러그형 하위 시스템에 대해 살펴보겠습니다.
출처 : https://docs.saltproject.io/en/getstarted/system/communication.html