가십 암호화 관리

가십 암호화 관리 (Manage Gossip Encryption)

이 주제는 Consul 데이터센터에서 가십 암호화를 활성화하고 에이전트 간 보안 통신을 유지하기 위해 가십 암호화 키를 교체하는 단계를 설명해요.

출처: 문서

본문

이 주제는 Consul 데이터센터에서 가십 암호화를 활성화하고 가십 암호화 키를 교체해 에이전트 간 안전한 통신을 유지하는 단계를 설명해요.

워크플로 (Workflows)

새로 배포하는 모든 Consul 데이터센터에서 가십 암호화를 활성화할 것을 권장해요. 기존 데이터센터의 에이전트를 업데이트해 가십 암호화를 사용할 수도 있어요.

가십 암호화를 활성화하는 워크플로는 데이터센터에 클라이언트 에이전트가 실행 중인지 여부에 따라 달라져요.

새 데이터센터에서 가십 암호화를 활성화하려면:

  1. consul keygen을 사용해 새 가십 암호화 키를 생성해요.
  2. encrypt 매개변수를 새로 생성한 키로 설정하는 구성 파일을 생성해요.
  3. 데이터센터의 일부인 모든 에이전트 노드에 구성 파일을 배포해요. 그런 다음 모든 노드에서 Consul 에이전트를 시작해요.

기존 데이터센터에서 가십 암호화를 활성화하려면:

  1. consul keygen을 사용해 새 가십 암호화 키를 생성해요.
  2. encrypt 매개변수를 새로 생성한 키로 설정하고 encrypt_verify_incoming과 encrypt_verify_outgoing을 false로 설정하는 구성 파일을 생성해요.
  3. 데이터센터의 일부인 모든 에이전트 노드에 구성 파일을 배포해요. 그런 다음 모든 Consul 에이전트를 롤링 재시작해요.
  4. encrypt_verify_outgoing 설정을 true로 업데이트하고 모든 Consul 에이전트를 롤링 재시작해요.
  5. encrypt_verify_incoming 설정을 true로 업데이트하고 모든 Consul 에이전트를 롤링 재시작해요.

WAN 페더레이션에 결합된 여러 데이터센터가 있다면 모든 데이터센터에서 동일한 암호화 키 를 사용해야 해요.

새 데이터센터에서 가십 암호화 활성화 (Enable gossip encryption on a new datacenter)

모든 새 Consul 데이터센터에서 가십 암호화를 활성화할 것을 권장해요.

가십 암호화 키 생성 (Generate a gossip encryption key)

먼저 Consul 서버에서 암호화 키를 생성해요. Consul CLI에는 키를 생성하는 consul keygen 명령이 포함돼요.

$ consul keygen
YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA=

base64로 인코딩된 32개의 무작위 바이트를 만들 수 있는 방법이라면 어떤 방법으로든 새 가십 키를 생성할 수 있어요. 예를 들어 Linux에서 다음 명령 중 하나로 openssl 또는 dd를 사용해 키를 만들 수 있어요:

에이전트 구성에 키 추가 (Add the key to the agent configuration)

encrypt 매개변수를 새로 생성한 키로 설정하는 구성을 생성해요. 기존 에이전트 구성을 편집하거나 구성 디렉터리에 파일을 추가할 수 있어요. 자세한 내용은 Consul 에이전트 구성을 참고해요.

HCL:

encrypt = "YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA="

JSON:

{
  "encrypt": "YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA="
}

모든 에이전트 구성에 키 추가 (Add the key to all agent configurations)

가십 키를 데이터센터의 일부여야 하는 모든 에이전트 노드에 배포해요. 그런 다음 모든 노드에서 Consul 에이전트를 시작해요.

가십 암호화가 올바르게 구성되면 시작 시 Consul 로그에 Gossip Encryption: true가 표시돼요.

consul.log:

==> Starting Consul agent...
   Version: '1.19.0'
Build Date: '2024-06-12 13:59:10 +0000 UTC'
   Node ID: 'e74b1ade-e932-1707-cdf1-6579b8b2536c'
 Node name: 'consul-server-0'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
   Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: 8443, gRPC: -1, gRPC-TLS: 8503, DNS: 53)
  Cluster Addr: 172.19.0.7 (LAN: 8301, WAN: 8302)
 Gossip Encryption: true
  Auto-Encrypt-TLS: true
   ACL Enabled: true
 Reporting Enabled: false
ACL Default Policy: deny
 HTTPS TLS: Verify Incoming: false, Verify Outgoing: true, Min Version: TLSv1_2
  gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2
  Internal RPC TLS: Verify Incoming: true, Verify Outgoing: true (Verify Hostname: true), Min Version: TLSv1_2
## ...

기존 데이터센터에서 가십 암호화 활성화 (Enable gossip encryption on an existing datacenter)

기존 Consul 데이터센터에서도 가십 암호화를 활성화할 수 있어요.

가십 암호화 키 생성 (Generate a gossip encryption key)

먼저 Consul 서버에서 암호화 키를 생성해요. Consul CLI에는 키를 생성하는 consul keygen 명령이 포함돼요.

$ consul keygen
YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA=

에이전트 구성에 키 추가 (Add the key to the agent configuration)

encrypt 매개변수를 새로 생성한 키로 설정하고 encrypt_verify_incoming과 encrypt_verify_outgoing 매개변수를 false로 설정하는 구성을 생성해요. 기존 에이전트 구성을 편집하거나 구성 디렉터리에 파일을 추가할 수 있어요. 자세한 내용은 Consul 에이전트 구성을 참고해요.

/etc/consul.d/encryption.hcl:

encrypt = "YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA="
encrypt_verify_incoming = false
encrypt_verify_outgoing = false

/etc/consul.d/encryption.json:

{
"encrypt": "YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA=",
"encrypt_verify_incoming" : false,
"encrypt_verify_outgoing" : false
}

모든 에이전트에 구성 추가 (Add the configuration to all agents)

구성을 데이터센터의 일부여야 하는 모든 에이전트 노드에 배포한 다음 각 에이전트를 재시작하는 롤링 업데이트를 시작해요.

모든 에이전트를 재시작해야 해요. 가십 구성을 변경할 때 consul reload와 kill -HUP <process_id> 명령만으로는 충분하지 않아요.

아웃바운드 암호화 업데이트 (Update outgoing encryption)

encrypt 매개변수가 설정된 에이전트는 가십 통신을 복호화할 수 있지만 암호화된 트래픽을 보낼 수는 없어요.

encrypt_verify_outgoing 설정을 true로 업데이트한 다음 모든 Consul 에이전트를 또 다른 롤링 업데이트로 재시작해요. 인바운드 암호화 업데이트를 시작하기 전에 모든 노드에서 이 과정을 완료해요.

/etc/consul.d/encryption.hcl:

encrypt = "YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA="
encrypt_verify_incoming = false
encrypt_verify_outgoing = true

/etc/consul.d/encryption.json:

{
"encrypt": "YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA=",
"encrypt_verify_incoming": false,
"encrypt_verify_outgoing": true
}

인바운드 암호화 업데이트 (Update incoming encryption)

에이전트는 암호화된 가십을 보낼 수 있지만 여전히 암호화되지 않은 인바운드 트래픽을 허용해요. encrypt_verify_incoming 설정을 true로 업데이트한 다음 모든 에이전트에 대해 최종 롤링 업데이트를 수행해요.

/etc/consul.d/encryption.hcl:

encrypt = "YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA="
encrypt_verify_incoming = true
encrypt_verify_outgoing = true

/etc/consul.d/encryption.json:

{
"encrypt": "YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA=",
"encrypt_verify_incoming": true,
"encrypt_verify_outgoing": true
}

가십 암호화 키 교체 (Rotate the gossip encryption key)

Consul 데이터센터가 사용하는 가십 암호화 키를 주기적으로 교체하는 것이 중요해요.

가십 암호화 키 교체 과정은 중앙화되어 있어 단일 데이터센터 노드에서 수행할 수 있어요.

가십 암호화 키를 교체하는 과정은 다음 단계로 구성돼요:

  1. consul keygen 명령으로 새 암호화 키를 생성해요.
  2. consul keyring -install 명령으로 새 암호화 키를 설치해요.
  3. consul keyring -list 명령으로 새 키가 Consul 데이터센터에 설치되었는지 확인해요.
  4. consul keyring -use 명령으로 Consul이 새 키를 사용하도록 지시해요.
  5. consul keyring -remove 명령으로 이전 키를 제거해요.

새 암호화 키 생성 (Generate a new encryption key)

consul keygen으로 새 키를 생성해요:

$ consul keygen
FfRV9j6NXU9LlCI4zLZjjpZdj4Nrqsdm7R8YgzSHzHw=

키링에 새 키 추가 (Add new key to the keyring)

새로 생성한 키를 키링에 추가해요.

$ consul keyring -install FfRV9j6NXU9LlCI4zLZjjpZdj4Nrqsdm7R8YgzSHzHw=
==> Installing new gossip encryption key...

새 키가 설치되었는지 확인 (Verify that the new key is installed)

키를 Consul 에이전트 중 하나에 추가하면 Consul이 이를 전체 데이터센터에 전파해요. 다른 에이전트에서 명령을 반복할 필요가 없어요.

키가 모든 에이전트에 전파되었는지 확인하려면 설치된 암호화 키를 나열하고 키를 인식하는 에이전트 수가 데이터센터의 총 에이전트 수와 같은지 확인해요.

$ consul keyring -list
==> Gathering installed encryption keys...

WAN:
  FfRV9j6NXU9LlCI4zLZjjpZdj4Nrqsdm7R8YgzSHzHw= [1/1]
  YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA= [1/1]

dc1 (LAN):
  YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA= [7/7]
  FfRV9j6NXU9LlCI4zLZjjpZdj4Nrqsdm7R8YgzSHzHw= [7/7]

두 키가 데이터센터에 설치되어 서버 에이전트를 포함한 모든 에이전트가 인식하는지 확인해요. 서버 에이전트는 WAN 섹션에 나열돼요. 모든 에이전트가 새 키를 가질 때까지 다음 단계로 진행하지 마세요.

새 키를 기본 키로 승격 (Promote the new key to primary)

모든 에이전트가 키를 인식한 후에는 새 키를 새 기본 암호화 키로 승격할 수 있어요.

$ consul keyring -use FfRV9j6NXU9LlCI4zLZjjpZdj4Nrqsdm7R8YgzSHzHw=
==> Changing primary gossip encryption key...

키링에서 이전 키 제거 (Remove the old key from the keyring)

키링에서 사용되지 않는 키는 Consul 클러스터에 잠재적 보안 위험이에요. 새 키가 설치된 후 이전 기본 키를 키링에서 제거할 것을 권장해요.

$ consul keyring -remove YwgWlBvicJN17UOYcutXLpJSZsw5aWpLEEWqgK635zA=
==> Removing gossip encryption key...

키링에 키가 하나만 포함되어 있는지 확인해요.

$ consul keyring -list
==> Gathering installed encryption keys...

WAN:
  FfRV9j6NXU9LlCI4zLZjjpZdj4Nrqsdm7R8YgzSHzHw= [1/1]

dc1 (LAN):
  FfRV9j6NXU9LlCI4zLZjjpZdj4Nrqsdm7R8YgzSHzHw= [7/7]

다음 단계 (Next steps)

이 주제에서 사용된 명령에 대한 문서는 Consul 에이전트 구성 파일의 암호화 매개변수에서 확인할 수 있어요. Consul이 사용하는 가십 프로토콜에 대한 자세한 내용은 가십 프로토콜에서 확인할 수 있어요.

가십 암호화를 활성화한 후에는 상호 TLS 암호화를 활성화해 Consul 데이터센터를 계속 보호할 수 있어요. 자세한 내용은 상호 TLS(mTLS) 암호화를 참고해요.

HashiCorp Vault와 consul-template를 사용해 가십 키 교체를 자동화하는 방법은 Vault에 보관된 가십 암호화 키 자동 교체 튜토리얼을 참고해요.

더 알아보기 (Learn more)