기존 VM에 TLS 암호화 활성화
기존 VM에 TLS 암호화 활성화 (Enable TLS Encryption for Existing VM)
Consul 에이전트 통신을 보호하기 위해 TLS 암호화를 활성화하는 방법을 설명하는 문서예요. 기존 Consul 데이터센터에 TLS를 추가하는 절차를 다뤄요.
출처: 문서
본문
이 페이지는 Consul 에이전트 통신을 보호하기 위해 TLS 암호화를 활성화하는 방법을 설명합니다. Consul은 서버와 클라이언트의 진위성을 검증하기 위해 TLS 사용을 지원합니다. TLS를 활성화하려면 Consul은 모든 서버가 단일 인증 기관(CA)이 서명한 인증서를 가져야 합니다. 클라이언트도 같은 CA로 인증된 인증서를 가져야 합니다.
이 페이지는 기존 Consul 데이터센터에 TLS 암호화를 활성화하는 지침을 제공합니다. 새 Consul 데이터센터에 TLS 암호화를 추가하는 경우 내장 CA로 TLS 암호화 활성화를 참조하세요.
워크플로 (Workflow)
다음 단계는 기존 Consul 데이터센터에 TLS 암호화를 활성화하는 일반적인 워크플로를 설명합니다:
- 서버 인증서를 생성합니다. 운영자 방법을 사용한다면 클라이언트 인증서도 생성합니다.
- CA 및 개인 키 파일을 포함한 인증서를 모든 에이전트에 배포합니다.
- 서버를 구성해 암호화된 트래픽을 허용합니다. 각 서버를 한 번에 하나씩 재시작합니다.
- 클라이언트가 TLS로만 통신하도록 구성합니다. 각 클라이언트를 재시작합니다.
- 서버를 TLS 통신만 허용하도록 재구성합니다. 각 서버를 한 번에 하나씩 리로드합니다.
참고 경고
다음 순서대로 단계를 수행하지 않으면 RPC TLS 통신 인증 실패로 인해 계획되지 않은 클러스터 중단이 발생할 수 있습니다. 다음 단계로 넘어가기 전에 각 단계를 완전히 완료하세요.
인증서 생성 (Generate the certificates)
Consul용 TLS를 구성하려면 인증서를 생성해야 합니다. Consul은 무단 데이터센터 접근을 방지하기 위해 모든 인증서가 같은 CA로 서명되도록 요구합니다. 이 CA는 공개 CA가 아닌 비공개 CA여야 합니다. 이 CA가 서명한 인증서는 Consul과 통신할 수 있기 때문입니다.
Vault PKI secret backend 같이 자체 CA를 관리하는 많은 도구가 있습니다. 이 지침은 Consul의 내장 TLS 헬퍼를 사용해 CA를 만듭니다. 데이터센터용 CA는 하나만 만들면 됩니다. CA를 만든 노드나 워크스테이션에서 모든 인증서를 생성해야 합니다. 이 노드나 워크스테이션은 안정적이어야 하며, 가능하면 Consul 에이전트나 클라우드 서버가 아니어야 합니다.
CA와 인증서를 만듭니다:
$ consul tls ca create
==> Saved consul-agent-ca.pem
==> Saved consul-agent-ca-key.pem
이것은 두 개의 파일을 생성합니다:
- CA 인증서
consul-agent-ca.pem은 Consul 인증서를 검증하는 데 필요한 공개 키를 포함하므로 consul 에이전트를 실행하는 모든 노드에 배포되어야 합니다. - CA 키
consul-agent-ca-key.pem은 Consul 노드용 인증서에 서명하는 데 사용되며 비공개로 유지되어야 합니다. 이 키를 소유하면 누구나 신뢰할 수 있는 서버로 Consul을 실행하거나 데이터센터에 대한 새 유효 인증서를 생성하고 ACL 토큰을 포함한 모든 Consul 데이터에 접근할 수 있습니다.
인증서 배포 (Distribute the certificates)
에이전트를 구성하기 전에 인증서와 키 파일을 배포해야 합니다.
서버 인증서 (Server certificates)
각 서버에 다음 인증서와 키 파일을 배포합니다.
consul-agent-ca.pemdc1-server-consul-0.pemdc1-server-consul-0-key.pem
CA 인증서는 Consul의 내장 CA를 사용하지 않으면 다른 이름을 가질 수 있습니다. 서버 인증서와 키 파일은 각 서버마다 고유해야 합니다.
운영자 방법용 클라이언트 인증서 (Client certificate for operator method)
운영자 방법을 사용한다면 모든 클라이언트에 클라이언트 인증서와 키 파일도 배포해야 합니다. 자세한 내용은 운영자 방법을 참조하세요. 모든 클라이언트는 다음 인증서와 키 파일을 가져야 합니다.
consul-agent-ca.pemdc1-client-consul-0.pemdc1-client-consul-0-key.pem
서버 구성 (Configure the servers)
이제 인증서를 만들었으므로 서버부터 시작해 에이전트에서 TLS를 활성화할 수 있습니다.
다음 예시 서버 에이전트 구성은 TLS를 활성화합니다. Consul은 구성 디렉터리의 모든 파일을 로드하므로 다음 구성을 새 파일로 추가할 수 있습니다. 기존 구성 파일에 추가할 수도 있습니다. consul validate로 구문이 유효한지 확인하세요.
자동 암호화 방법의 경우 auto_encrypt를 true로 설정합니다.
서버 에이전트 자동 암호화 TLS 구성:
verify_incoming = false
verify_outgoing = false
verify_server_hostname = false
ca_file = "consul-agent-ca.pem"
cert_file = "dc1-server-consul-0.pem"
key_file = "dc1-server-consul-0-key.pem"
auto_encrypt {
allow_tls = true
}
{
"verify_incoming": false,
"verify_outgoing": false,
"verify_server_hostname": false,
"ca_file": "consul-agent-ca.pem",
"cert_file": "dc1-server-consul-0.pem",
"key_file": "dc1-server-consul-0-key.pem",
"auto_encrypt": {
"allow_tls": true
}
}
서버에서 verify 옵션을 false로 설정하면 진위성 검증이 강제되지 않으므로 다운타임 없이 모든 에이전트를 업데이트할 수 있습니다. 그러나 verify 설정을 false로 두면 안전하지 않은 구성을 만들게 됩니다.
운영자 방법을 위한 수동 TLS 서버 구성:
verify_incoming = false
verify_outgoing = false
verify_server_hostname = false
ca_file = "consul-agent-ca.pem"
cert_file = "dc1-server-consul-0.pem"
key_file = "dc1-server-consul-0-key.pem"
{
"verify_incoming": false,
"verify_outgoing": false,
"verify_server_hostname": false,
"ca_file": "consul-agent-ca.pem",
"cert_file": "dc1-server-consul-0.pem",
"key_file": "dc1-server-consul-0-key.pem"
}
클라이언트 인증서를 배포할 때 기존 통신이 중단 없이 계속되도록 다음 옵션을 false로 설정해야 합니다.
verify_incomingverify_outgoingverify_server_hostname
이렇게 하면 모든 서버에서 롤링 재시작이 필요합니다. 클라이언트를 구성한 후 서버에서 verify_incoming, verify_outgoing, verify_server_hostname을 활성화할 수 있습니다. verify 옵션 외에 에이전트가 사용할 인증서와 키 파일을 설정하세요.
서버 구성을 업데이트한 후 서버의 롤링 재시작을 시작합니다.
다음 서버를 재시작하기 전에 한 번에 하나씩 재시작하고 제대로 작동하는지 확인하세요. 다운타임을 피하려면 리더를 마지막으로 재시작하세요.
$ systemctl restart consul
클라이언트 구성 (Configure the clients)
이제 서버에서 TLS 통신을 활성화하고 인증서를 배포했으므로 클라이언트를 구성할 수 있습니다.
자동 암호화 방법의 경우 auto_encrypt를 활성화합니다.
클라이언트 에이전트 자동 암호화 TLS 구성:
verify_incoming = false
verify_outgoing = true
verify_server_hostname = true
ca_file = "consul-agent-ca.pem"
auto_encrypt = {
tls = true
}
{
"verify_incoming": false,
"verify_outgoing": true,
"verify_server_hostname": true,
"ca_file": "consul-agent-ca.pem",
"auto_encrypt": {
"tls": true
}
}
운영자 방법의 경우 운영자가 배포한 인증서와 키 파일을 사용하도록 클라이언트를 구성합니다.
클라이언트 에이전트 수동 TLS 구성:
verify_incoming = false
verify_outgoing = true
verify_server_hostname = true
ca_file = "consul-agent-ca.pem"
cert_file = "dc1-client-consul-0.pem"
key_file = "dc1-client-consul-0-key.pem"
{
"verify_incoming": false,
"verify_outgoing": true,
"verify_server_hostname": true,
"ca_file": "consul-agent-ca.pem",
"cert_file": "dc1-client-consul-0.pem",
"key_file": "dc1-client-consul-0-key.pem"
}
자동 암호화 방법으로는 클라이언트 인증서를 배포할 필요가 없습니다. Consul 서비스 메시가 인증서 배포를 관리합니다.
Consul 클라이언트 재시작 (Restart the Consul clients)
마지막으로 클라이언트를 재시작합니다. 클라이언트는 한 번만 재시작하면 됩니다.
$ systemctl restart consul
참고 경고
consul reload 명령으로 Consul 서버 에이전트를 재시작하면 클라이언트가 클러스터 서버 노드와의 통신을 잃게 되어 중단이 발생할 수 있습니다. 이를 방지하려면 다음 단계에서 지시한 대로 TLS 검증 설정을 조정하세요.
서버 재구성 및 리로드 (Reconfigure and reload the servers)
자동 암호화 방법의 경우 verify_incoming, verify_outgoing, verify_server_hostname을 true로 업데이트합니다.
서버 에이전트 자동 암호화 구성:
verify_incoming = true
verify_outgoing = true
verify_server_hostname = true
ca_file = "consul-agent-ca.pem"
cert_file = "dc1-server-consul-0.pem"
key_file = "dc1-server-consul-0-key.pem"
auto_encrypt {
allow_tls = true
}
{
"verify_incoming": true,
"verify_outgoing": true,
"verify_server_hostname": true,
"ca_file": "consul-agent-ca.pem",
"cert_file": "dc1-server-consul-0.pem",
"key_file": "dc1-server-consul-0-key.pem",
"auto_encrypt": {
"allow_tls": true
}
}
운영자 방법의 경우 verify_incoming, verify_outgoing, verify_server_hostname을 true로 업데이트합니다.
서버 에이전트 수동 TLS 구성:
verify_incoming = true
verify_outgoing = true
verify_server_hostname = true
ca_file = "consul-agent-ca.pem"
cert_file = "dc1-server-consul-0.pem"
key_file = "dc1-server-consul-0-key.pem"
{
"verify_incoming": true,
"verify_outgoing": true,
"verify_server_hostname": true,
"ca_file": "consul-agent-ca.pem",
"cert_file": "dc1-server-consul-0.pem",
"key_file": "dc1-server-consul-0-key.pem"
}
마지막 Consul 에이전트를 리로드한 후 에이전트는 TLS로만 통신합니다.
$ consul reload
Consul 에이전트를 TLS로 통신하도록 구성했습니다.