Consul ACL 시스템 문제 해결

Consul ACL 시스템 문제 해결

이 페이지는 Consul CLI와 ACL 시스템 재설정 절차를 사용해 Consul ACL(Access Control List) 시스템을 문제 해결하는 방법을 설명해요.

출처: 문서

본문

이 페이지는 Consul CLI와 ACL 시스템 재설정 절차를 사용해 Consul ACL(Access Control List) 시스템을 문제 해결하는 방법을 설명합니다.

요구 사항 (Requirements)

이 지침은 Consul 1.4 이상을 실행하는 기존 데이터센터를 가정합니다.

이 페이지의 모든 명령은 ACL 시스템에 대한 write 권한이 있는 유효한 토큰이 필요합니다. 없으면 무제한 권한이 있으므로 초기 관리 토큰을 임시로 사용할 수 있습니다.

consul members

토큰으로 에이전트를 구성할 때 consul members 명령을 사용해 데이터센터에 조인하는 데 필요한 권한이 있는지 확인할 수 있습니다.

멤버 목록에서 에이전트(서버 또는 클라이언트)가 누락된 경우 해당 에이전트에 ACL이 올바르게 구성되지 않았거나 토큰에 올바른 권한이 없습니다. 카탈로그에 자신을 등록할 권한이 있는 에이전트만 멤버 목록에 포함됩니다.

$ consul members
Node       Address         Status    Type    Build  Protocol  DC   Segment
server-1  172.17.0.2:8301  alive     server  1.4.4  2         dc1  <all>
server-2  172.17.0.3:8301  alive     server  1.4.4  2         dc1  <all>
server-3  172.17.0.4:8301  alive     server  1.4.4  2         dc1  <all>

다음 섹션에 나열된 consul acl 명령을 사용해 토큰 권한을 문제 해결하세요.

consul catalog

consul catalog nodes -detailed 명령은 태그된 주소를 포함한 노드 정보를 표시합니다. 에이전트 중 하나에서 "TaggedAddresses" 필드가 null이면 해당 에이전트의 ACL이 올바르게 구성되지 않은 것입니다. 디버깅을 시작하려면 모든 서버의 Consul 로그를 검토하세요. ACL이 올바르게 활성화되어 있다면 에이전트의 토큰을 조사해야 합니다.

$ consul catalog nodes -detailed
Node      ID                  Address   DC  TaggedAddresses
server-1  a82c7db3-fdc3  192.168.1.191  kc  lan=192.168.1.191, wan=192.168.1.190
server-2  a82c7db3-fdc3  192.168.1.192  kc  lan=192.168.1.192, wan=192.168.1.190
server-3  a82c7db3-fdc3  192.168.1.193   kc  lan=192.168.1.193, wan=192.168.1.190

아래 나열된 consul acl 명령을 사용해 토큰 권한을 문제 해결하세요.

consul acl

문제가 잘못된 구성 때문이 아닌지 확인한 후 다음 명령을 사용해 토큰이나 정책 문제를 해결할 수 있습니다.

consul acl policy list

consul acl policy list 명령은 사용 가능한 모든 정책을 출력합니다. 이 명령은 정책을 처음 설정할 때 Consul 정책과 각 규칙을 확인하는 데 유용합니다. 다음 예시에는 두 정책이 있습니다. 내장 global-management 정책과 server-one-policy라는 사용자 생성 정책입니다.

$ consul acl policy list
global-management:
   ID:           00000000-0000-0000-0000-000000000001
   Description:  Builtin Policy that grants unlimited access
   Datacenters:
server-one-policy:
   ID:           0bcee22c-6602-9dd6-b147-964958069426
   Description:  policy for server one
   Datacenters:

consul acl policy read -id <policy_id>를 사용해 개별 정책을 조사할 수 있습니다. 다음 예시에서 server-one-policy 정책은 "consul-server-one" 노드에 대한 노드 쓰기 권한이 있습니다.

$ consul acl policy read -id 0bcee22c-6602-9dd6-b147-964958069426
ID:           0bcee22c-6602-9dd6-b147-964958069426
Name:         server-one-policy
Description:  policy for server one
Datacenters:
Rules:
node "consul-server-one" {
  policy = "write"
}

consul acl token list

consul acl token list 명령은 모든 토큰을 나열합니다. 이 목록에 사용 중인 토큰이 포함되어 있는지 확인하세요. 더 이상 사용하지 않는 이전 토큰을 제거하는 것은 데이터센터의 보안에 중요합니다. 토큰은 만료되지 않으므로 ACL 관리자가 사용하지 않는 ACL 토큰을 삭제할 책임이 있습니다.

다음 예시에는 세 개의 토큰이 있습니다.

  1. 첫 번째 토큰은 부트스트랩 과정에서 Consul이 생성합니다.
  2. 두 번째 토큰은 사용자 생성이며 server-one-policy 정책으로 만들어졌습니다.
  3. 세 번째 토큰도 Consul이 생성하지만 권한이 없습니다.
$ consul acl token list
AccessorID:       cf827c04-fb7d-ea75-da64-84e1dd2d5dfe
SecretID:         af410085-8bf6-80d6-08ad-2bfaa6526256
Description:      Bootstrap Token (Global Management)
Local:            false
Create Time:      2019-05-20 11:08:27.253096 -0500 CDT
Legacy:           false
Policies:
   00000000-0000-0000-0000-000000000001 - global-management

AccessorID:       5d3c3a03-e627-a749-444c-2984101190c0
SecretID:         d203592e-3960-cf7e-801e-5b805825d359
Description:      token for server one
Local:            false
Create Time:      2019-10-17 11:46:27.106158 -0500 CDT
Legacy:           false
Policies:
   0bcee22c-6602-9dd6-b147-964958069426 - server-one-policy

AccessorID:       00000000-0000-0000-0000-000000000002
SecretID:         anonymous
Description:      Anonymous Token
Local:            false
Create Time:      2019-05-20 11:08:27.253959 -0500 CDT
Legacy:           false

consul acl token read

consul acl token read 명령은 지정된 토큰에 대한 정보를 제공합니다. 토큰의 권한이 기대한 대로인지 확인하세요. 이 명령은 노드나 서비스가 카탈로그에 자신을 추가할 올바른 권한이 있는지 확인할 때 유용합니다.

다음 예시는 consul acl token list 명령으로 반환되는 것과 동일한 정보를 포함하지만, 모든 토큰을 보지 않으려 할 때 유용합니다.

$ consul acl token read -id 5d3c3a03-e627-a749-444c-2984101190c0
AccessorID:       5d3c3a03-e627-a749-444c-2984101190c0
SecretID:         547a969c-5dff-f9a8-6b84-fb1d23f9a5cb
Description:      token for server one
Local:            false
Create Time:      2019-10-17 11:46:27.106158 -0500 CDT
Policies:
   0bcee22c-6602-9dd6-b147-964958069426 - server-one-policy

consul catalog 또는 consul members 명령이 예상치 못한 결과를 반환하면 먼저 consul acl token read 명령을 사용하세요.

ACL 시스템 재설정

해결할 수 없는 문제가 발생하거나 부트스트랩 토큰을 분실한 경우 인덱스를 업데이트하여 ACL 시스템을 재설정할 수 있습니다. 먼저 아무 노드에서 /v1/status/leader 엔드포인트를 사용해 리더를 찾으세요. ACL은 리더에서 재설정해야 합니다. 다음 예시에서 리더는 IP 172.17.0.3에 있습니다.

$ curl 172.17.0.1:8500/v1/status/leader
"172.17.0.3:8300"%

리더 노드에서 부트스트랩 명령을 다시 실행해 인덱스 번호를 얻습니다. 출력은 재설정 인덱스가 13임을 보여줍니다.

$ consul acl bootstrap
Failed ACL bootstrapping: Unexpected response code: 403 (Permission denied: ACL bootstrap no longer allowed (reset index: 13))

그런 다음 재설정 인덱스를 부트스트랩 재설정 파일에 씁니다.

$ echo 13 >> <data-directory>/acl-bootstrap-reset

재설정 인덱스를 작성한 후 부트스트랩 명령을 다시 실행해 부트스트랩 토큰을 다시 생성하세요.

더 알아보기 (Learn more)