서비스 토큰 만들기
서비스 토큰 만들기 (Create a service token)
Consul 카탈로그에서 서비스를 등록하고 검색하는 데 사용할 수 있는 토큰을 만드는 방법을 설명해요. Consul 서비스 메시를 사용한다면 사이드카 프록시가 이 토큰을 사용해 다른 서비스를 검색하고 트래픽을 라우팅할 수 있어요.
출처: 문서
본문
이 항목은 Consul 카탈로그에서 서비스를 등록하고 검색하는 데 사용할 수 있는 토큰을 만드는 방법을 설명합니다. Consul 서비스 메시를 사용한다면 사이드카 프록시가 토큰을 사용해 다른 서비스로의 트래픽을 검색하고 라우팅할 수 있습니다.
소개 (Introduction)
서비스는 검색 가능하거나 메시의 다른 서비스와 상호 작용하려면 적절한 권한 집합을 부여하는 정책에 연결된 토큰을 제시해야 합니다.
템플릿 정책과 사용자 정의 정책 (Templated policies versus custom policies)
사용자 정의 정책 또는 템플릿 정책에 연결된 토큰을 만들 수 있습니다. 템플릿 정책은 유사한 정책을 만드는 대신 일반적인 사용 사례에 대한 권한을 빠르게 부여할 수 있게 해주는 Consul의 구조입니다.
사용자 정의 정책을 만들기보다 서비스 디스커버리 및 서비스 메시 사용 사례에 대한 권한을 부여하려면 builtin/service 템플릿 정책을 사용하는 것이 좋습니다. builtin/service 템플릿 정책이 서비스와 그 사이드카 프록시에 service:write, service:read, node:read를 자동으로 부여하기 때문입니다.
조직에는 builtin/service 템플릿 정책과 일치하지 않는 방식으로 서비스를 배포해야 하는 요구 사항이나 프로세스가 있을 수 있습니다. 이러한 경우 사용자 정의 정책을 만들고 토큰에 연결할 수 있습니다.
요구 사항 (Requirements)
핵심 ACL 기능은 모든 버전의 Consul에서 사용할 수 있습니다.
서비스 토큰은 다음 권한을 부여하는 정책에 연결되어야 합니다.
service:write: 서비스가 카탈로그를 업데이트할 수 있게 합니다. 서비스 메시가 활성화되면 서비스의 사이드카 프록시도 카탈로그를 업데이트할 수 있습니다. 이 권한은 사이드카 프록시가 인텐션을 읽고 적용할 수 있도록intention:read권한을 암시적으로 부여합니다. 자세한 내용은 인텐션 관리 권한(Intention Management Permissions)을 참조하세요.service:read: 서비스가 네트워크의 다른 서비스에 대해 알 수 있게 합니다. 서비스 메시가 활성화되면 서비스의 사이드카 프록시도 네트워크의 다른 서비스에 대해 알 수 있습니다.node:read: 서비스 메시가 활성화된 경우 사이드카 프록시가 카탈로그의 다른 서비스를 검색하고 그곳으로 트래픽을 라우팅할 수 있게 합니다.
인증 (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의 템플릿 정책 (Templated policies in Consul CE)
토큰에 연결할 수 있는 템플릿 정책을 만드는 방법에 대한 정보는 템플릿 정책(Templated policies)을 참조하세요.
Consul 명령줄 또는 API 엔드포인트를 사용해 토큰을 수동으로 만들 수 있습니다. 또한 인증 방법(auth method)을 사용해 신뢰할 수 있는 외부 시스템에서 토큰을 동적으로 만들도록 Consul을 활성화할 수도 있습니다.
consul acl token create 명령을 실행하고 연결할 템플릿 정책을 지정해 토큰을 만듭니다. consul acl token create 명령에 대한 자세한 내용은 Consul ACL Token Create를 참조하세요.
다음 예시는 svc1이라는 서비스에 대해 builtin/service 템플릿 정책에 연결된 ACL 토큰을 만듭니다.
$ consul acl token create \
-description "Service token for svc1" \
-templated-policy "builtin/service" \
-var "name:api"
/acl/token 엔드포인트에 PUT 요청을 보내고 요청 본문에 템플릿 정책을 지정해 템플릿 정책에 연결된 토큰을 만듭니다. API 엔드포인트를 사용할 수 있는 권한이 있는 정책에 연결된 ACL 토큰이 필요합니다. API 엔드포인트 사용에 대한 추가 정보는 ACL Token HTTP API를 참조하세요.
다음 예시는 svc1이라는 서비스에 대해 builtin/service 템플릿 정책에 연결된 토큰을 만듭니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/token \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"TemplatedPolicies": [
{
"TemplateName": "builtin/service",
"TemplateVariables": {
"Name": "svc1"
}
}
]
}'
Consul Enterprise의 템플릿 정책 (Templated policies in Consul Enterprise) Enterprise
토큰과 역할에서 템플릿 정책의 사용에 대한 정보는 템플릿 정책을 참조하세요.
Consul 명령줄 또는 API 엔드포인트를 사용해 토큰을 수동으로 만들 수 있습니다. 또한 인증 방법을 사용해 신뢰할 수 있는 외부 시스템에서 토큰을 동적으로 만들도록 Consul을 활성화할 수도 있습니다.
consul acl token create 명령을 실행하고 연결할 정책 또는 템플릿 정책을 지정해 토큰을 만듭니다. consul acl token create 명령에 대한 자세한 내용은 Consul ACL Token Create를 참조하세요.
Consul Enterprise에서 토큰을 만들 때 admin 파티션, 네임스페이스 또는 둘 다를 지정할 수 있습니다. 토큰은 지정된 범위의 권한만 포함할 수 있습니다. 다음 예시는 서비스가 ptn1 파티션의 ns1 네임스페이스에 등록하는 데 사용할 수 있는 ACL 토큰을 만듭니다.
$ consul acl token create -partition "ptn1" -namespace "ns1" \
-description "Service token for svc1" \
-templated-policy "builtin/service"
-var "name:svc1"
/acl/token 엔드포인트에 PUT 요청을 보내고 요청 본문에 정책 또는 템플릿 정책을 지정해 템플릿 정책에 연결된 토큰을 만듭니다. API 엔드포인트를 사용할 수 있는 권한이 있는 정책에 연결된 ACL 토큰이 필요합니다. API 엔드포인트 사용에 대한 추가 정보는 ACL Token HTTP API를 참조하세요.
Consul Enterprise에서 토큰을 만들 때 admin 파티션과 네임스페이스를 지정할 수 있습니다. 토큰은 지정된 범위에서만 유효합니다. 다음 예시는 서비스가 ptn1 파티션의 ns1 네임스페이스에 등록하는 데 사용할 수 있는 ACL 토큰을 만듭니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/token \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"TemplatedPolicies": [
{
"TemplateName": "builtin/service",
"TemplateVariables": {
"Name": "svc1"
}
}
],
"Namespace": "ns1",
"Partition": "ptn1"
}'
Consul CE의 사용자 정의 정책 (Custom policy in Consul CE)
토큰을 템플릿 정책에 연결할 수 없을 때 정책을 정의하고 Consul에 등록한 다음, 서비스가 Consul 카탈로그에 등록할 수 있게 하는 정책을 토큰에 연결할 수 있습니다.
정책 정의 (Define a policy)
정책 정의를 명령줄 또는 API 인수로 보내거나 외부 HCL 또는 JSON 파일에 정의할 수 있습니다. 정책에서 사용할 수 있는 모든 규칙에 대한 자세한 내용은 ACL 규칙을 참조하세요.
다음 예시 정책은 파일에 정의되어 있습니다. 이 정책은 svc1 서비스에 쓰기 권한을 부여해 카탈로그에 등록할 수 있게 합니다. 서비스 메시의 경우 정책은 svc1-sidecar-proxy 서비스에 쓰기 권한을 부여해 사이드카 프록시가 카탈로그에 등록할 수 있게 합니다. 또한 다른 서비스를 검색하고 라우팅할 수 있도록 서비스 및 노드 읽기 권한을 부여합니다.
service "svc1" {
policy = "write"
}
service "svc1-sidecar-proxy" {
policy = "write"
}
service_prefix "" {
policy = "read"
}
node_prefix "" {
policy = "read"
}
{
"node_prefix": {
"": [{
"policy": "read"
}]
},
"service": {
"svc1": [{
"policy": "write"
}],
"svc1-sidecar-proxy": [{
"policy": "write"
}]
},
"service_prefix": {
"": [{
"policy": "read"
}]
}
}
Consul에 정책 등록 (Register the policy with Consul)
정책을 정의한 후 명령줄 또는 API 엔드포인트를 사용해 Consul에 등록할 수 있습니다.
consul acl policy create 명령을 실행하고 정책 규칙을 지정해 정책을 만듭니다. 다음 예시는 svc1-register.hcl에 정의된 정책을 등록합니다.
$ consul acl policy create \
-name "svc1-register" -rules @svc1-register.hcl \
-description "Allow svc1 to register into the catalog"
consul acl token create 명령에 대한 자세한 내용은 Consul ACL Policy Create를 참조하세요.
/acl/policy 엔드포인트에 PUT 요청을 보내고 요청 본문에 정책 규칙을 지정해 정책을 만듭니다. 다음 예시는 svc1-register.hcl에 정의된 정책을 등록합니다. 요청 본문의 Rules 필드에 정책 규칙을 포함해야 합니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/policy \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"Name": "svc1-register",
"Description": "Allow svc1 to register into the catalog",
"Rules": "service \"svc1\" {\n policy = \"write\"\n}\nservice \"svc1-sidecar-proxy\" {\n policy = \"write\"\n}\nservice_prefix \"\" {\n policy = \"read\"\n}\nnode_prefix \"\" {\n policy = \"read\"\n}\n"
}'
API 엔드포인트 사용에 대한 추가 정보는 ACL Policy HTTP API를 참조하세요.
토큰에 정책 연결 (Link the policy to a token)
정책을 Consul에 등록한 후 Consul 명령줄 또는 API 엔드포인트를 사용해 토큰을 만들고 연결할 수 있습니다. 또한 인증 방법을 사용해 신뢰할 수 있는 외부 시스템에서 토큰을 동적으로 만들도록 Consul을 활성화할 수도 있습니다.
consul acl token create 명령을 실행하고 정책 이름 또는 ID를 지정해 정책에 연결된 토큰을 만듭니다. consul acl token create 명령에 대한 자세한 내용은 Consul ACL Token Create를 참조하세요.
다음 명령은 svc1-register 정책에 연결된 ACL 토큰을 만듭니다.
$ consul acl token create \
-description "Service token for svc1" \
-policy-name "svc1-register"
/acl/token 엔드포인트에 PUT 요청을 보내고 요청에 정책 이름 또는 ID를 지정해 정책에 연결된 ACL 토큰을 만듭니다. API 엔드포인트 사용에 대한 추가 정보는 ACL Token HTTP API를 참조하세요.
다음 예시는 svc1 서비스가 ptn1 파티션의 ns1 네임스페이스에 등록하는 데 사용할 수 있는 ACL 토큰을 만듭니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/token \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"Policies": [
{
"Name": "svc1-register"
}
]
}'
Consul Enterprise의 사용자 정의 정책 (Custom policy in Consul Enterprise) Enterprise
토큰을 템플릿 정책에 연결할 수 없을 때 정책을 정의하고 Consul에 등록한 다음, 서비스가 Consul 카탈로그에 등록할 수 있게 하는 정책을 토큰에 연결할 수 있습니다.
정책 정의 (Define a policy)
정책 정의를 명령줄 또는 API 인수로 보내거나 외부 HCL 또는 JSON 파일에 정의할 수 있습니다. 정책에서 사용할 수 있는 모든 규칙에 대한 자세한 내용은 ACL 규칙을 참조하세요.
Consul Enterprise에서 정책을 만들 때 admin 파티션과 네임스페이스를 지정할 수 있습니다. 정책은 지정된 범위에서만 유효합니다.
다음 예시 정책은 파일에 정의되어 있습니다. 이 정책은 svc1 서비스가 ptn1 파티션의 ns1 네임스페이스에 등록할 수 있게 합니다. 서비스 메시의 경우 정책은 svc1-sidecar-proxy 서비스에 쓰기 권한을 부여해 사이드카 프록시가 카탈로그에 등록할 수 있게 합니다. 또한 다른 서비스를 검색하고 라우팅할 수 있도록 서비스 및 노드 읽기 권한을 부여합니다.
partition "ptn1" {
namespace "ns1" {
service "svc1" {
policy = "write"
}
service "svc1-sidecar-proxy" {
policy = "write"
}
service_prefix "" {
policy = "read"
}
node_prefix "" {
policy = "read"
}
}
}
{
"partition": {
"ptn1": [{
"namespace": {
"ns1": [{
"node_prefix": {
"": [{
"policy": "read"
}]
},
"service": {
"svc1": [{
"policy": "write"
}],
"svc1-sidecar-proxy": [{
"policy": "write"
}]
},
"service_prefix": {
"": [{
"policy": "read"
}]
}
}]
}
}]
}
}
Consul에 정책 등록 (Register the policy with Consul)
정책을 정의한 후 명령줄 또는 API 엔드포인트를 사용해 Consul에 등록할 수 있습니다.
consul acl policy create 명령을 실행하고 정책 규칙을 지정해 정책을 만듭니다. 다음 예시는 svc1-register.hcl에 정의된 정책을 등록합니다.
$ consul acl policy create -partition "ptn1" -namespace "ns1" \
-name "svc1-register" -rules @svc1-register.hcl \
-description "Custom policy for service svc1"
consul acl token create 명령에 대한 자세한 내용은 Consul ACL Policy Create를 참조하세요.
/acl/policy 엔드포인트에 PUT 요청을 보내고 요청 본문에 정책 규칙을 지정해 정책을 만듭니다. 다음 예시는 svc1-register.hcl에 정의된 정책을 등록합니다. 요청 본문의 Rules 필드에 정책 규칙을 포함해야 합니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/policy \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"Name": "svc1-register",
"Description": "Allow svc1 to register into the catalog",
"Namespace": "ns1",
"Partition": "ptn1",
"Rules": "partition \"ptn1\" {\n namespace \"ns1\" {\n service \"svc1\" {\n policy = \"write\"\n }\n service \"svc1-sidecar-proxy\" {\n policy = \"write\"\n }\n service_prefix \"\" {\n policy = \"read\"\n }\n node_prefix \"\" {\n policy = \"read\"\n }\n }\n}\n"
}'
API 엔드포인트 사용에 대한 추가 정보는 ACL Policy HTTP API를 참조하세요.
토큰에 정책 연결 (Link the policy to a token)
정책을 Consul에 등록한 후 Consul 명령줄 또는 API 엔드포인트를 사용해 토큰을 만들고 연결할 수 있습니다. 또한 인증 방법을 사용해 신뢰할 수 있는 외부 시스템에서 토큰을 동적으로 만들도록 Consul을 활성화할 수도 있습니다.
consul acl token create 명령을 실행하고 정책 이름 또는 ID를 지정해 정책에 연결된 토큰을 만듭니다. consul acl token create 명령에 대한 자세한 내용은 Consul ACL Token Create를 참조하세요.
Consul Enterprise에서 토큰을 만들 때 admin 파티션과 네임스페이스를 지정할 수 있습니다. 토큰은 지정된 범위에서만 유효합니다. 다음 예시는 서비스가 ptn1 파티션의 ns1 네임스페이스에 등록하는 데 사용할 수 있는 ACL 토큰을 만듭니다.
다음 명령은 svc1-register 정책에 연결된 ACL 토큰을 만듭니다.
$ consul acl token create -partition "ptn1" -namespace "ns1" \
-description "Service token for svc1" \
-policy-name "svc1-register"
/acl/token 엔드포인트에 PUT 요청을 보내고 요청에 정책 이름 또는 ID를 지정해 정책에 연결된 ACL 토큰을 만듭니다. API 엔드포인트 사용에 대한 추가 정보는 ACL Token HTTP API를 참조하세요.
Consul Enterprise에서 토큰을 만들 때 admin 파티션과 네임스페이스를 지정할 수 있습니다. 토큰은 지정된 범위에서만 유효합니다. 다음 예시는 서비스가 ptn1 파티션의 ns1 네임스페이스에 등록하는 데 사용할 수 있는 ACL 토큰을 만듭니다.
$ curl --request PUT http://127.0.0.1:8500/v1/acl/token \
--header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
--data '{
"Policies": [
{
"Name": "svc1-register"
}
],
"Namespace": "ns1",
"Partition": "ptn1"
}'