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)에 적용돼요.

보안 참고 (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 스탠자를 대신 사용해요.

예시 (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을 사용할 것을 권장해요.

더 알아보기 (Learn more)