네임스페이스로 ACL 토큰 관리 위임
네임스페이스로 ACL 토큰 관리 위임 (Delegate ACL Token Management with Namespaces)
이 페이지는 각각 특정 네임스페이스에 대한 운영자 권한을 가진 여러 네임스페이스 운영자 토큰을 생성하는 과정을 설명해요. 네임스페이스 운영자는 자신의 네임스페이스 내에서 서비스, KV, 기타 리소스에 대한 접근을 관리하게 돼요.
출처: 문서
본문
Enterprise
이 기능은 Consul Enterprise가 필요해요. 자세한 내용은 엔터프라이즈 기능 매트릭스를 참고해요.
이 페이지는 각각 특정 네임스페이스에 대한 운영자 권한을 가진 여러 네임스페이스 운영자 토큰을 생성하는 과정을 설명해요.
소개 (Introduction)
네임스페이스의 주요 이점 중 하나는 토큰 관리 책임을 더 많은 운영자에게 위임할 수 있다는 것이에요. 이 전략은 워크플로가 직접 영향을 받는 사람들에게 데이터센터의 일부에 대한 무제한 접근을 제공하는 데 도움이 돼요.
네임스페이스 운영자는 자신의 네임스페이스 내에서 서비스, Consul KV, 기타 리소스에 대한 접근을 관리할 책임을 지게 돼요. 네임스페이스 운영자는 개발자나 최종 사용자에게 서비스 접근 권한을 더 위임할 수도 있어요.
네임스페이스가 도입되기 전에는 한 명 또는 몇 명의 운영자만 전체 데이터센터의 토큰을 관리했어요.
네임스페이스 운영자는 의도적으로 접근 권한을 부여받지 않는 한 자신의 네임스페이스 내 데이터만 볼 수 있어요. 전역 권한이 없으면 다른 네임스페이스의 데이터를 볼 수 없어요.
그러나 Consul 노드는 네임스페이스에 걸쳐 존재하므로 네임스페이스 운영자는 데이터센터의 모든 에이전트를 찾을 수 있어요.
네임스페이스 ACL 토큰을 생성하려면 acl = "write" 정책이 있는 토큰이 필요해요. global-management 정책과 연결된 토큰을 사용할 것을 제안해요.
기존 네임스페이스 검토 (Review existing namespaces)
먼저 Consul 데이터센터에서 사용 가능한 네임스페이스를 검토해요. 예시 지침에 따라 VM에 Consul 네임스페이스 구성을 수행했다면 데이터센터에는 app-team과 db-team의 두 가지 네임스페이스가 포함돼요.
$ consul namespace list
app-team:
Description:
Namespace for the team managing the production application
Partition: default
db-team:
Description:
Namespace for db-team managing the production database
Partition: default
기본 네임스페이스 정책 권한 (Default namespace policy privileges)
Consul은 네임스페이스 운영자를 위한 관리 토큰 생성을 단순화하는 내장 ACL 정책을 제공해요. namespace-management 정책은 네임스페이스에 대한 무제한 권한을 부여해요. 가장 중요한 것은, 이 정책이 ACL 토큰 생성 권한을 부여하여 보유자가 자신의 네임스페이스 내 운영에 필요한 추가 권한을 스스로 부여할 수 있게 해요.
namespace-management 정책에는 다음 규칙이 포함돼요.
policy = "write"
acl = "write"
key_prefix "" {
policy = "write"
}
node_prefix "" {
# node policy is restricted to read within a namespace
policy = "read"
}
session_prefix "" {
policy = "write"
}
service_prefix "" {
policy = "write"
intentions = "write"
}
네임스페이스 관리 토큰 생성 (Create namespace management tokens)
consul acl token create 명령으로 app-team 네임스페이스의 관리 토큰을 생성해요.
$ consul acl token create \
-namespace app-team \
-description "app-team namespace administrator" \
-policy-name "namespace-management"
명령이 성공하면 Consul이 토큰 정보를 반환해요.
AccessorID: 0b83cf6b-42d7-3deb-06aa-da8018350c32
SecretID: 93ed2e80-1212-092e-4be4-2a4355c615bd
Partition: default
Namespace: app-team
Description: app-team namespace administrator
Local: false
Create Time: 2025-07-30 14:14:46.312957334 +0000 UTC
Policies:
4aa30a6a-d38a-1bf4-3d63-bd56270f15f5 - namespace-management
db-team 네임스페이스의 관리 토큰을 생성해요.
$ consul acl token create \
-namespace db-team \
-description "db-team namespace administrator" \
-policy-name "namespace-management"
명령이 성공하면 Consul이 토큰 정보를 반환해요.
AccessorID: f96b0dcd-e1f5-d440-46ca-faf07e45d6a6
SecretID: 5c117a9a-23d9-5e3f-78dd-85370e9e73c5
Partition: default
Namespace: db-team
Description: db-team namespace administrator
Local: false
Create Time: 2025-07-30 14:15:57.556382756 +0000 UTC
Policies:
388803f1-8cda-027a-0691-b02d14843b8b - namespace-management
네임스페이스 관리 토큰 보기 (View namespace management tokens)
consul acl token list 명령으로 생성한 토큰을 검토해요. 특정 네임스페이스 내의 토큰을 보려면 -namespace 플래그를 포함해요.
$ consul acl token list -namespace db-team
AccessorID: f96b0dcd-e1f5-d440-46ca-faf07e45d6a6
SecretID: 5c117a9a-23d9-5e3f-78dd-85370e9e73c5
Partition: default
Namespace: db-team
Description: db-team namespace administrator
Local: false
Create Time: 2025-07-30 14:15:57.556382756 +0000 UTC
Policies:
388803f1-8cda-027a-0691-b02d14843b8b - namespace-management
네임스페이스용 추가 토큰 생성 (Create additional tokens for a namespace)
네임스페이스의 사용자 권한을 제한해 역할에 필요한 최소 권한만 제공하는 추가 토큰을 만들 수 있어요. 다음 예시는 데이터베이스 팀 네임스페이스의 개발자를 위한 ACL 토큰을 생성하는 방법을 보여줘요. 이 토큰은 네임스페이스에서 자신의 서비스 등록과 서비스 의도 생성으로 작업을 제한해요.
네임스페이스 운영자 토큰 사용 (Use the namespace operator token)
올바른 네임스페이스를 업데이트하도록 네임스페이스 운영자의 토큰을 CONSUL_HTTP_TOKEN 환경 변수로 설정해요.
$ export CONSUL_HTTP_TOKEN=<db-team operator token here>
다음 명령 중 하나라도 권한 오류로 실패하면 토큰이 올바르게 생성되지 않은 것이에요. 설정한 ACL 토큰 값이 의도한 네임스페이스와 일치하는지 확인해요.
정책 생성 (Create the policy)
데이터베이스 팀 개발자를 위한 정책을 생성해요.
db-developer-policy.hcl:
service_prefix "" {
policy = "write"
intention = "write"
}
이 정책은 서비스와 해당 서비스에 대한 의도를 쓰는 것을 허용해요.
Consul CLI를 사용해 정책 파일의 규칙으로 정책을 생성해요.
$ consul acl policy create \
-name developer-policy \
-description "Write services and intentions" \
-namespace db-team \
-rules @db-developer-policy.hcl
명령이 성공하면 Consul이 정책 세부 정보를 출력해요.
ID: de1d2f24-c523-0308-5a10-0db4a2c0c2e2
Name: developer-policy
Partition: default
Namespace: db-team
Description: Write services and intentions
Datacenters:
Rules:
service_prefix "" {
policy = "write"
intention = "write"
}
토큰 생성 (Create the token)
개발자 정책을 사용해 db-team 네임스페이스의 개발자를 위한 토큰을 생성해요.
$ consul acl token create \
-description "DB developer token" \
-namespace db-team \
-policy-name developer-policy
Consul은 토큰이 위치한 네임스페이스를 포함한 토큰 정보를 출력해요.
AccessorID: e7bba3d7-2dcb-591f-e83a-3330ed70655b
SecretID: f8a7840b-b90f-1f5a-e090-f50bfbc3d85d
Partition: default
Namespace: db-team
Description: DB developer token
Local: false
Create Time: 2025-07-30 14:25:13.95734493 +0000 UTC
Policies:
de1d2f24-c523-0308-5a10-0db4a2c0c2e2 - developer-policy
이제 db-team 개발자에게 토큰을 배포해 그들이 자율적으로 서비스를 등록하고 접근을 관리할 수 있게 할 수 있어요.