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 토큰을 삭제할 책임이 있습니다.
다음 예시에는 세 개의 토큰이 있습니다.
- 첫 번째 토큰은 부트스트랩 과정에서 Consul이 생성합니다.
- 두 번째 토큰은 사용자 생성이며
server-one-policy정책으로 만들어졌습니다. - 세 번째 토큰도 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
재설정 인덱스를 작성한 후 부트스트랩 명령을 다시 실행해 부트스트랩 토큰을 다시 생성하세요.