Ingress Gateway 등록을 위한 토큰 생성
Ingress Gateway 등록을 위한 토큰 생성
이 주제는 ingress gateway가 등록할 수 있게 하는 토큰을 만드는 방법을 설명해요. 게이트웨이는 카탈로그에 등록하고 메시의 다른 서비스로 라우팅하기 위해 적절한 권한 집합을 부여하는 정책에 연결된 토큰을 제시해야 해요.
출처: 문서
본문
이 주제는 ingress gateway가 등록할 수 있게 하는 토큰을 만드는 방법을 설명합니다.
소개 (Introduction)
게이트웨이는 카탈로그에 등록하고 메시의 다른 서비스로 라우팅하기 위해 적절한 권한 집합을 부여하는 정책에 연결된 토큰을 제시해야 합니다.
요구 사항 (Requirements)
핵심 ACL 기능은 모든 Consul 버전에서 사용할 수 있습니다.
ingress gateway 토큰은 다음 권한을 부여하는 정책에 연결되어야 합니다.
service:write: ingress gateway가 카탈로그에 등록할 수 있게 합니다.service:read: 모든 서비스에 대한, 그리고 서비스를 발견하고 라우팅하기 위한 모든 노드에 대한node:read.agent:read:consul connect envoyCLI 명령이 Consul 에이전트에서 gRPC 설정을 자동으로 발견할 수 있게 합니다. 이 명령으로 게이트웨이를 시작하지 않거나 Consul 에이전트가 기본 gRPC 설정을 사용한다면agent: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
ingress gateway에 대한 토큰을 만들려면 정책을 정의하고, 정책을 Consul에 등록하고, 정책을 토큰에 연결해야 합니다.
정책 정의
정책 정의를 명령줄 또는 API 인자로 보내거나 외부 HCL 또는 JSON 파일로 정의할 수 있습니다. 정책에서 사용할 수 있는 모든 규칙에 대한 자세한 내용은 ACL Rules을 참조하세요.
다음 예시 정책은 파일에 정의되어 있습니다. 정책은 ingress gateway에 ingress-gateway라는 서비스로 등록하고 ingress gateway로 운영할 수 있는 적절한 권한을 부여합니다.
service "ingress-gateway" {
policy = "write"
}
node_prefix "" {
policy = "read"
}
service_prefix "" {
policy = "read"
}
agent_prefix "" {
policy = "read"
}
정책을 Consul에 등록
정책을 정의한 후 명령줄 또는 API 엔드포인트로 정책을 Consul에 등록할 수 있습니다.
다음 명령은 ACL 정책과 토큰을 만듭니다.
consul acl policy create 명령을 실행하고 정책 규칙을 지정해 정책을 만듭니다. 다음 예시는 igw-register.hcl에 정의된 정책을 등록합니다.
$ consul acl policy create \
-name "igw-register" -rules @igw-register.hcl \
-description "Ingress gateway policy"
consul acl policy create 명령에 대한 자세한 내용은 Consul ACL Policy Create을 참조하세요.
정책을 토큰에 연결
정책을 Consul에 등록한 후 명령줄 또는 API 엔드포인트로 토큰을 만들고 연결할 수 있습니다. 또한 auth method를 사용해 Consul이 신뢰하는 외부 시스템에서 토큰을 동적으로 생성하도록 할 수도 있습니다.
consul acl token create 명령을 실행하고 정책 이름 또는 ID를 지정해 정책에 연결된 토큰을 만듭니다. consul acl token create 명령에 대한 자세한 내용은 Consul ACL Token Create을 참조하세요.
다음 명령은 igw-register 정책에 연결된 ACL 토큰을 만듭니다.
$ consul acl token create \
-description "Ingress gateway token" \
-policy-name "igw-register"
Consul Enterprise
ingress gateway에 대한 토큰을 만들려면 정책을 정의하고, 정책을 Consul에 등록하고, 정책을 토큰에 연결해야 합니다.
정책 정의
정책 정의를 명령줄 또는 API 인자로 보내거나 외부 HCL 또는 JSON 파일로 정의할 수 있습니다. 정책에서 사용할 수 있는 모든 규칙에 대한 자세한 내용은 ACL Rules을 참조하세요.
Consul Enterprise에서 정책을 만들 때 관리 파티션과 네임스페이스를 지정할 수 있습니다. 정책은 지정된 범위에서만 유효합니다.
다음 예시 정책은 파일에 정의되어 있습니다. 정책은 ingress gateway가 ptn1 파티션과 ns1 네임스페이스에서 ingress-gateway라는 서비스로 등록할 수 있게 합니다. 정책에는 여러 네임스페이스의 리소스에 대한 권한이 포함됩니다. 여러 네임스페이스에 권한을 부여하는 ACL 정책은 default 네임스페이스에서 만들어야 합니다.
partition "ptn1" {
namespace "ns1" {
service "ingress-gateway" {
policy = "write"
}
node_prefix "" {
policy = "read"
}
service_prefix "" {
policy = "read"
}
}
namespace "default" {
agent_prefix "" {
policy = "read"
}
}
}
정책을 Consul에 등록
정책을 정의한 후 명령줄 또는 API 엔드포인트로 정책을 Consul에 등록할 수 있습니다.
다음 명령은 ACL 정책과 토큰을 만듭니다.
consul acl policy create 명령을 실행하고 정책 규칙을 지정해 정책을 만듭니다. 다음 예시는 igw-register.hcl에 정의된 정책을 등록합니다.
Consul Enterprise에서 정책을 만들 때 관리 파티션과 네임스페이스를 지정할 수 있습니다. 정책은 지정된 관리 파티션과 네임스페이스에서만 유효합니다. 다음 예시는 ptn1 파티션의 default 네임스페이스에서 정책을 만듭니다. 예시 정책에는 여러 네임스페이스의 리소스에 대한 권한이 포함됩니다. 여러 네임스페이스에 권한을 부여하는 ACL 정책은 default 네임스페이스에서 만들어야 합니다.
$ consul acl policy create -partition "ptn1" -namespace "default" \
-name "igw-register" -rules @igw-register.hcl \
-description "Ingress gateway policy"
consul acl policy create 명령에 대한 자세한 내용은 Consul ACL Policy Create을 참조하세요.
정책을 토큰에 연결
정책을 Consul에 등록한 후 명령줄 또는 API 엔드포인트로 토큰을 만들고 연결할 수 있습니다. 또한 auth method를 사용해 Consul이 신뢰하는 외부 시스템에서 토큰을 동적으로 생성하도록 할 수도 있습니다.
consul acl token create 명령을 실행하고 정책 이름 또는 ID를 지정해 정책에 연결된 토큰을 만듭니다. consul acl token create 명령에 대한 자세한 내용은 Consul ACL Token Create을 참조하세요.
Consul Enterprise에서 토큰을 만들 때 관리 파티션과 네임스페이스를 지정할 수 있습니다. 토큰은 지정된 관리 파티션과 네임스페이스에서만 유효합니다. 다음 예시는 ptn1 파티션과 default 네임스페이스에서 토큰을 만듭니다. 예시 정책에는 여러 네임스페이스의 리소스에 대한 권한이 포함됩니다. 여러 네임스페이스에 권한을 부여하는 정책에 연결된 ACL 토큰은 default 네임스페이스에서 만들어야 합니다.
$ consul acl token create -partition "ptn1" -namespace "default" \
-description "Ingress gateway token" \
-policy-name "igw-register"