Consul 에이전트 구성 파일의 TLS 구성 매개변수
Consul 에이전트 구성 파일의 TLS 구성 매개변수 (TLS Configuration Parameters for Consul Agent Configuration Files)
이 페이지는 Consul 에이전트 구성 파일의 TLS 구성 매개변수에 대한 참조 정보를 제공해요.
출처: 문서
본문
이 페이지는 Consul 에이전트 구성 파일의 TLS 구성 매개변수에 대한 참조 정보를 제공해요.
TLS 구성 매개변수 (TLS configuration parameters)
이 섹션은 에이전트 TLS에 적용되는 모든 구성 설정을 문서화해요. 에이전트 TLS는 HTTP API, 내부 RPC, gRPC/xDS 인터페이스에서 사용돼요. 이 설정 중 일부는 auto_config 또는 auto_encrypt에 의해 자동으로 적용될 수도 있어요.
보안 참고 (Security Note): 내부 RPC 인터페이스에 구성된 인증 기관(CA)(tls.internal_rpc로 명시적으로 또는 tls.defaults로 암시적으로)은 공개 CA가 아닌 비공개 CA여야 해요. 다른 시스템과 함께 사용해서는 안 되는 전용 CA를 권장해요. CA가 서명한 모든 인증서는 클러스터와 통신할 수 있게 되고, CA가 서명한 특수하게 제작된 인증서를 사용해 Consul에 대한 전체 접근을 얻을 수 있어요.
tls— Consul 1.12에 추가됨. 이전 버전은 더 이상 사용되지 않는 옵션(Deprecated Options)을 참고해요.defaults—tls.grpc,tls.https, 또는tls.internal_rpc에 의해 명시적으로 재정의되지 않는 한 모든 인터페이스에 적용될 기본 설정을 제공해요.ca_file— PEM 인코딩 인증 기관에 대한 파일 경로를 제공해요. 인증 기관은 적절한verify_incoming또는verify_outgoing플래그로 클라이언트 및 서버 연결의 진위를 확인하는 데 사용돼요.ca_path— PEM 인코딩 인증 기관 파일 디렉터리에 대한 경로를 제공해요. 이러한 인증 기관은 적절한verify_incoming또는verify_outgoing플래그로 클라이언트 및 서버 연결의 진위를 확인하는 데 사용돼요.cert_file— PEM 인코딩 인증서에 대한 파일 경로를 제공해요. 인증서는 에이전트의 진위를 확인하기 위해 클라이언트나 서버에 제공돼요.key_file과 함께 제공되어야 해요.key_file— PEM 인코딩 개인 키에 대한 파일 경로를 제공해요. 키는 인증서와 함께 사용되어 에이전트의 진위를 확인해요.cert_file과 함께 제공되어야 해요.tls_min_version— 지원되는 최소 TLS 버전을 지정해요. 다음 값이 허용돼요:verify_server_hostname— true로 설정하면 Consul은 서버가 제시하는 TLS 인증서가 호스트네임server.<datacenter>.<domain>과 일치하는지 확인해요. 기본적으로 false이며 Consul은 인증서의 호스트네임을 확인하지 않고 신뢰할 수 있는 CA로 서명되었는지만 확인해요.
경고(WARNING): TLS 1.1 이하는 일반적으로 덜 안전한 것으로 간주되며 가능하면 사용해서는 안 돼요.
다음 값도 유효하지만 더 이상 사용되지 않는 top-level tls_min_version 구성을 사용할 때만 유효하며 향후 릴리스에서 제거될 예정이에요:
더 이상 사용되지 않는 값이 지정되면 경고 메시지가 나타나요.
* [`tls_cipher_suites`](/consul/docs/reference/agent/configuration-file/tls#tls_defaults_tls_cipher_suites) — 쉼표로 구분된 목록으로 지원되는 암호화 스위트 목록을 지정해요. TLS 1.2 이하에만 적용돼요. Consul이 지원하는 모든 암호화 스위트 목록은 [TLS 구성 소스 코드](https://github.com/hashicorp/consul/search?q=%22var+goTLSCipherSuites%22)에서 확인할 수 있어요.
참고 (Note): 암호 스위트의 순서는 Consul 1.11부터 보장되지 않아요. 자세한 내용은 이 게시물을 참고해요.
* [`verify_incoming`](/consul/docs/reference/agent/configuration-file/tls#tls_defaults_verify_incoming) — true로 설정하면 Consul은 모든 인바운드 연결이 TLS를 사용하고 클라이언트가 [`ca_file`](/consul/docs/reference/agent/configuration-file/tls#tls_defaults_ca_file) 또는 [`ca_path`](/consul/docs/reference/agent/configuration-file/tls#tls_defaults_ca_path)의 인증 기관이 서명한 인증서를 제공하도록 요구해요. 기본적으로 false이며 Consul은 TLS 사용을 강제하지 않고 클라이언트의 진위를 확인하지 않아요.
* [`verify_outgoing`](/consul/docs/reference/agent/configuration-file/tls#tls_defaults_verify_outgoing) — true로 설정하면 Consul은 이 에이전트의 모든 아웃바운드 연결이 TLS를 사용하고 서버가 [`ca_file`](/consul/docs/reference/agent/configuration-file/tls#tls_defaults_ca_file) 또는 [`ca_path`](/consul/docs/reference/agent/configuration-file/tls#tls_defaults_ca_path)의 인증 기관이 서명한 인증서를 제공하도록 요구해요. 기본적으로 false이며 Consul은 아웃바운드 연결에 TLS를 사용하지 않아요. 이는 클라이언트와 서버 모두 아웃바운드 연결을 만들므로 둘 다에 적용돼요. Consul은 이 인터페이스에서 아웃바운드 연결을 만들지 않으므로 이 설정은 gRPC 인터페이스에는 적용되지 않아요. HTTPS 인터페이스에 대해 true로 설정하면 이 매개변수는 로컬 에이전트에 HTTPS 요청을 만들어 동작하는 [watches](/consul/docs/automate/watch)에 적용돼요.
grpc— gRPC/xDS 인터페이스에 대한 설정을 제공해요. gRPC 인터페이스를 활성화하려면ports.grpc_tls로 포트를 정의해야 해요.ca_file—tls.defaults.ca_file을 재정의해요.ca_path—tls.defaults.ca_path을 재정의해요.cert_file—tls.defaults.cert_file을 재정의해요.key_file—tls.defaults.key_file을 재정의해요.tls_min_version—tls.defaults.tls_min_version을 재정의해요.tls_cipher_suites—tls.defaults.tls_cipher_suites를 재정의해요.verify_incoming—tls.defaults.verify_incoming을 재정의해요.use_auto_cert— (기본값은false) gRPC 서버의 TLS를 활성화하거나 비활성화해요.auto_encryptTLS 설정이 gRPC 리스너에 적용되도록true로 설정해요. HTTPS 활성화 같은 다른 TLS 목적으로auto_encrypt를 사용하는 경우 gRPC 서버에서 TLS를 비활성화하는 것을 권장해요.
https— HTTPS 인터페이스에 대한 설정을 제공해요. HTTPS 인터페이스를 활성화하려면ports.https로 포트를 정의해야 해요.ca_file—tls.defaults.ca_file을 재정의해요.ca_path—tls.defaults.ca_path을 재정의해요.cert_file—tls.defaults.cert_file을 재정의해요.key_file—tls.defaults.key_file을 재정의해요.tls_min_version—tls.defaults.tls_min_version을 재정의해요.tls_cipher_suites—tls.defaults.tls_cipher_suites를 재정의해요.verify_incoming—tls.defaults.verify_incoming을 재정의해요.verify_outgoing—tls.defaults.verify_outgoing을 재정의해요.
internal_rpc—ports.server로 구성된 내부 "서버" RPC 인터페이스에 대한 설정을 제공해요.ca_file—tls.defaults.ca_file을 재정의해요.ca_path—tls.defaults.ca_path을 재정의해요.cert_file—tls.defaults.cert_file을 재정의해요.key_file—tls.defaults.key_file을 재정의해요.tls_min_version—tls.defaults.tls_min_version을 재정의해요.tls_cipher_suites—tls.defaults.tls_cipher_suites를 재정의해요.verify_incoming—tls.defaults.verify_incoming을 재정의해요.
보안 참고 (Security Note): 내부 RPC 포트에 접근할 수 있는 사람이 Consul 클러스터에 대한 전체 접근을 얻지 못하도록
verify_incoming반드시true로 설정해야 해요.
* [`verify_outgoing`](/consul/docs/reference/agent/configuration-file/tls#tls_internal_rpc_verify_outgoing) — [`tls.defaults.verify_outgoing`](/consul/docs/reference/agent/configuration-file/tls#tls_defaults_verify_outgoing)을 재정의해요.
보안 참고 (Security Note):
verify_outgoing = true를 지정한 서버는 항상 다른 서버와 TLS로 통신하지만, 모든 클라이언트가 TLS로 전환되도록 하기 위해 비 TLS 연결은 여전히 _수락_합니다. 현재 클라이언트가 암호화되지 않은 상태로 서버와 통신할 수 없도록 강제하는 유일한 방법은 클라이언트 인증서도 요구하는verify_incoming을 활성화하는 것이에요.
* [`verify_server_hostname`](/consul/docs/reference/agent/configuration-file/tls#verify_server_hostname-1) — [tls.defaults.verify_server_hostname](/consul/docs/reference/agent/configuration-file/tls#tls_internal_rpc_verify_server_hostname)을 재정의해요. true로 설정하면 Consul은 서버가 제시하는 TLS 인증서가 호스트네임 `server.<datacenter>.<domain>`과 일치하는지 확인해요. 기본적으로 false이며 Consul은 인증서의 호스트네임을 확인하지 않고 신뢰할 수 있는 CA로 서명되었는지만 확인해요.
보안 참고 (Security Note): 손상된 클라이언트가 모든 ACL 토큰 및 서비스 메시 CA 루트 키를 포함한 모든 클러스터 데이터에 대한 전체 읽기 및 쓰기 접근을 얻지 못하도록
verify_server_hostname반드시true로 설정해야 해요.
server_name— 제공되면 TLS 인증서에 대한node_name을 재정의해요. 인증서 이름이 우리가 선언하는 호스트네임과 일치하는지 확인하는 데 사용할 수 있어요.
더 이상 사용되지 않는 옵션 (Deprecated Options)
다음 옵션은 Consul 1.12에서 더 이상 사용되지 않습니다. tls 스탠자를 대신 사용해요.
ca_file— 참고:tls.defaults.ca_file.ca_path— 참고:tls.defaults.ca_path.cert_file— 참고:tls.defaults.cert_file.key_file— 참고:tls.defaults.key_file.tls_min_version— Consul 0.7.4에 추가됨. 참고:tls.defaults.tls_min_version.tls_cipher_suites— Consul 0.8.2에 추가됨. 참고:tls.defaults.tls_cipher_suites.tls_prefer_server_cipher_suites— Consul 0.8.2에 추가됨. 이 설정은 무시됩니다(자세한 내용은 이 게시물 참고).verify_incoming— 참고:tls.defaults.verify_incoming.verify_incoming_rpc— 참고:tls.internal_rpc.verify_incoming.verify_incoming_https— 참고:tls.https.verify_incoming.verify_outgoing— 참고:tls.defaults.verify_outgoing.verify_server_hostname— 참고:tls.internal_rpc.verify_server_hostname.
예시 (Examples)
다음 예시는 일반적인 에이전트 TLS 구성 패턴을 보여줘요.
보안 mTLS 구성 (Secure mTLS configuration)
보안 mTLS 통신을 활성화해 암호화와 인증을 모두 활성화하려면 세 가지 verify 옵션을 모두 true로 설정해야 해요. 인터페이스별 스탠자(예: tls.internal_rpc, tls.https) 또는 tls.defaults에서 verify_incoming 또는 verify_outgoing을 설정하지 않으면 ca_file, cert_file, key_file을 지정해도 TLS가 전혀 활성화되지 않아요.
특히 강조 표시된 코드 줄의 ports 설정 사용을 검토해요.
HCL:
datacenter = "east-aws"
data_dir = "/opt/consul"
log_level = "INFO"
node_name = "foobar"
server = true
addresses = {
https = "0.0.0.0"
}
ports {
https = 8501
}
tls {
defaults {
key_file = "/etc/pki/tls/private/my.key"
cert_file = "/etc/pki/tls/certs/my.crt"
ca_file = "/etc/pki/tls/certs/ca-bundle.crt"
verify_incoming = true
verify_outgoing = true
verify_server_hostname = true
}
}
JSON:
{
"datacenter": "east-aws",
"data_dir": "/opt/consul",
"log_level": "INFO",
"node_name": "foobar",
"server": true,
"addresses": {
"https": "0.0.0.0"
},
"ports": {
"https": 8501
},
"tls": {
"defaults": {
"key_file": "/etc/pki/tls/private/my.key",
"cert_file": "/etc/pki/tls/certs/my.crt",
"ca_file": "/etc/pki/tls/certs/ca-bundle.crt",
"verify_incoming": true,
"verify_outgoing": true,
"verify_server_hostname": true
}
}
}
Consul은 https 포트에 > 0의 포트 번호가 할당되지 않으면 HTTP 또는 gRPC API에 대해 TLS를 활성화하지 않아요. 이 기본값이 일부 도구와 자동으로 작동하므로 https에 8501을 사용할 것을 권장해요.