ACL 토큰 복제
ACL 토큰 복제 (ACL Token Replication)
WAN 페더레이션 데이터센터 간 ACL 복제를 위해 ACL 토큰을 구성하는 방법을 설명하는 문서예요. 클러스터 피어링으로 연결된 경우에는 ACL 복제가 필요하지 않아요.
출처: 문서
본문
이 주제는 WAN 페더레이션 데이터센터 간 ACL 복제를 위해 ACL 토큰을 구성하는 방법을 설명합니다. Consul 클러스터가 피어(peer) 연결을 통해 연결된 경우 ACL 복제는 필요하지 않습니다. 클러스터 피어링에 대해 자세히 알아보려면 WAN 페더레이션과 클러스터 피어링 비교를 참조하세요.
소개 (Introduction)
Consul 에이전트는 적절한 권한 세트를 부여하는 정책에 연결된 토큰을 제시해야 합니다. 비주 데이터센터의 각 서버에 replication 토큰을 지정하세요. 데이터센터 간 ACL 복제를 구성하는 실습 안내는 Enable ACLs in WAN federated datacenters를 참조하세요.
요구 사항 (Requirements)
핵심 ACL 기능은 모든 버전의 Consul에서 사용할 수 있습니다.
보조 데이터센터에서 ACL 복제가 활성화된 Consul 서버 에이전트의 경우, 토큰은 다음 권한을 부여하는 정책에 연결되어야 합니다:
acl:write: ACL 리소스의 복제를 활성화합니다.operator:write: proxy-defaults 구성 항목의 복제를 활성화하고 보조 데이터센터에서 CA 인증서 서명을 활성화합니다.service:read및intention:read: service-defaults 및 인텐션 구성 항목의 복제를 활성화합니다.
인증 (Authentication)
CLI 또는 API를 사용해 ACL 토큰과 정책을 만들고 수정하려면 acl:write 권한이 있는 정책에 연결된 ACL 토큰을 제공해야 합니다.
명령줄의 -token 옵션으로 토큰을 수동으로 제공할 수 있지만, 워크플로를 단순화하기 위해 CONSUL_HTTP_TOKEN 환경 변수를 설정하는 것을 권장합니다:
$ export CONSUL_HTTP_TOKEN=<acl-token-secret-id>
Consul CLI는 CONSUL_HTTP_TOKEN 환경 변수를 자동으로 읽으므로 모든 Consul CLI 명령에 토큰을 전달할 필요가 없습니다.
Consul HTTP API 호출을 인증하려면 각 호출의 X-Consul-Token 헤더에 토큰을 제공해야 합니다:
$ curl --header "X-Consul-Token: $CONSUL_HTTP_TOKEN" ...
대체 인증 방법을 알아보려면 다음 문서를 참조하세요:
Consul CE에서 복제 토큰 (Replication token in Consul CE)
ACL 복제용 토큰을 만들려면 정책을 정의하고, 정책을 Consul에 등록하고, 정책을 토큰에 연결해야 합니다.
정책 정의 (Define a policy)
정책 정의를 명령줄 또는 API 인수로 보내거나 외부 HCL 또는 JSON 파일에 정의할 수 있습니다. 정책에서 사용할 수 있는 모든 규칙에 대한 자세한 내용은 ACL Rules을 참조하세요.
다음 예시 정책은 파일에 정의되어 있습니다. 이 정책은 ACL 복제에 적절한 권한을 부여합니다.
acl = "write"
operator = "write"
service_prefix "" {
policy = "read"
intentions = "read"
}
{
"acl": "write",
"operator": "write",
"service_prefix": {
"": [{
"intentions": "read",
"policy": "read"
}]
}
}
정책을 Consul에 등록 (Register the policy with Consul)
정책을 정의한 후 명령줄 또는 API 엔드포인트를 사용해 정책을 Consul에 등록할 수 있습니다.
consul acl policy create 명령을 실행하고 정책 규칙을 지정해 정책을 만듭니다. consul acl policy create 명령에 대한 자세한 내용은 Consul ACL Policy Create를 참조하세요.
다음 예시는 acl-replication.hcl에 정의된 정책을 등록합니다.
$ consul acl policy create \
-name "acl-replication" -rules @acl-replication.hcl \
-description "ACL replication token"
/acl/policy 엔드포인트에 PUT 요청을 보내고 요청 본문에 정책 규칙을 지정해 정책을 만듭니다. API 엔드포인트 사용에 대한 자세한 내용은 ACL Policy HTTP API를 참조하세요.
다음 예시는 acl-replication.hcl에 정의된 정책을 등록합니다. 요청 본문의 Rules 필드에 정책 규칙을 포함해야 합니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/policy \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"Name": "acl-replication",
"Description": "ACL replication",
"Rules": "acl = \"write\"\noperator = \"write\"\nservice_prefix \"\" {\n policy = \"read\"\n intentions = \"read\"\n}\n"
}'
정책을 토큰에 연결 (Link the policy to a token)
정책을 Consul에 등록한 후 Consul 명령줄 또는 API 엔드포인트로 토큰을 만들고 연결할 수 있습니다. 또한 인증 메서드를 사용해 신뢰할 수 있는 외부 시스템에서 토큰을 동적으로 만들도록 Consul을 활성화할 수 있습니다.
consul acl token create 명령을 실행하고 정책 이름 또는 ID를 지정해 정책에 연결된 토큰을 만듭니다. consul acl token create 명령에 대한 자세한 내용은 Consul ACL Token Create를 참조하세요.
다음 명령은 정책 acl-replication에 연결된 ACL 토큰을 만듭니다.
$ consul acl token create \
-description "ACL replication" \
-policy-name "acl-replication"
/acl/token 엔드포인트에 PUT 요청을 보내고 요청에 정책 이름 또는 ID를 지정해 정책에 연결된 ACL 토큰을 만듭니다. API 엔드포인트 사용에 대한 자세한 내용은 ACL Token HTTP API를 참조하세요.
다음 예시는 정책 acl-replication에 연결된 ACL 토큰을 만듭니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/token \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"Policies": [
{
"Name": "acl-replication"
}
]
}'
Consul Enterprise에서 복제 토큰 (Replication token in Consul Enterprise)
ACL 복제용 토큰을 만들려면 정책을 정의하고, 정책을 Consul에 등록하고, 정책을 토큰에 연결해야 합니다.
정책 정의 (Define a policy)
명령줄/API 인수로 정책 정의를 보내거나 외부 HCL 또는 JSON 파일에 정의할 수 있습니다. 정책에서 사용할 수 있는 모든 규칙에 대한 자세한 내용은 ACL Rules을 참조하세요.
다음 예시 정책은 파일에 정의되어 있습니다. 다음 예시 정책은 ACL 복제에 적절한 권한을 부여합니다.
operator = "write"
service_prefix "" {
policy = "read"
intentions = "read"
}
namespace_prefix "" {
acl = "write"
service_prefix "" {
policy = "read"
intentions = "read"
}
}
{
"namespace_prefix": {
"": [{
"acl": "write",
"service_prefix": {
"": [{
"intentions": "read",
"policy": "read"
}]
}
}]
},
"operator": "write",
"service_prefix": {
"": [{
"intentions": "read",
"policy": "read"
}]
}
}
정책을 Consul에 등록 (Register the policy with Consul)
정책을 정의한 후 명령줄 또는 API 엔드포인트를 사용해 정책을 Consul에 등록할 수 있습니다.
Consul Enterprise에서 정책을 등록할 때 admin 파티션, 네임스페이스 또는 둘 다를 지정할 수 있습니다. 정책은 지정된 범위에서만 유효합니다. 복제용 정책은 default 네임스페이스와 default 파티션에 만들어야 합니다.
consul acl policy create 명령을 실행하고 정책 규칙을 지정해 정책을 만듭니다.
다음 예시는 acl-replication.hcl에 정의된 정책을 등록합니다.
$ consul acl policy create -partition "default" -namespace "default" \
-name "acl-replication" -rules @acl-replication.hcl \
-description "ACL replication token"
/acl/policy 엔드포인트에 PUT 요청을 보내고 요청 본문에 정책 규칙을 지정해 정책을 만듭니다.
다음 예시는 acl-replication.hcl에 정의된 정책을 등록합니다. 요청 본문의 Rules 필드에 정책 규칙을 포함해야 합니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/policy \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"Name": "acl-replication",
"Description": "ACL replication",
"Partition": "default",
"Namespace": "default",
"Rules": "operator = \"write\"\nservice_prefix \"\" {\n policy = \"read\"\n intentions = \"read\"\n}\nnamespace_prefix \"\" {\n acl = \"write\"\n service_prefix \"\" {\n policy = \"read\"\n intentions = \"read\"\n }\n}\n"
}'
정책을 토큰에 연결 (Link the policy to a token)
정책을 Consul에 등록한 후 Consul 명령줄 또는 API 엔드포인트로 토큰을 만들고 연결할 수 있습니다. 또한 인증 메서드를 사용해 신뢰할 수 있는 외부 시스템에서 토큰을 동적으로 만들도록 Consul을 활성화할 수 있습니다.
consul acl token create 명령을 실행하고 정책 이름 또는 ID를 지정해 정책에 연결된 토큰을 만듭니다.
$ consul acl token create -partition "default" -namespace "default" \
-description "ACL replication" \
-policy-name "acl-replication"
/acl/token 엔드포인트에 PUT 요청을 보내고 요청에 정책 이름 또는 ID를 지정해 정책에 연결된 ACL 토큰을 만듭니다.
다음 예시는 정책 acl-replication에 연결된 ACL 토큰을 만듭니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/token \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"Policies": [
{
"Name": "acl-replication"
}
],
"Partition": "default",
"Namespace": "default"
}'
토큰 적용 (Apply the token)
에이전트 구성 파일에 토큰을 지정하거나 consul set-agent-token 명령을 사용해 Consul 에이전트를 토큰으로 구성합니다.
파일에서 토큰 적용 (Apply the token in a file)
에이전트가 시작 시 토큰을 제시하고 카탈로그에 등록할 수 있도록 에이전트 구성 파일의 replication 필드에 토큰을 지정합니다.
acl = {
enabled = true
tokens = {
replication = "<token>"
...
}
...
}
명령으로 토큰 적용 (Apply the token with a command)
consul set-agent-token 명령으로 replication 토큰을 설정합니다. 다음 명령은 실행 중인 Consul 에이전트 토큰을 지정된 토큰으로 구성합니다.
$ consul acl set-agent-token replication <acl-token-secret-id>