스냅샷 에이전트 토큰 만들기

스냅샷 에이전트 토큰 만들기 (Create a snapshot agent token)

이 주제에서는 Consul 스냅샷 에이전트용 토큰을 만드는 방법을 설명해요.

출처: 문서

본문

Enterprise

이 기능은 Consul Enterprise가 필요합니다.

소개 (Introduction)

consul snapshot agent 명령은 Consul 서버 상태의 스냅샷을 찍어 로컬에 저장하거나 원격 저장소 서비스로 푸시하는 프로세스를 시작합니다. 자세한 내용은 Consul Snapshot Agent를 참조하세요.

요구 사항 (Requirements)

핵심 ACL 기능은 모든 Consul 버전에서 사용할 수 있습니다.

agent 명령에 대한 요구 사항 (Requirements for the agent command)

agent 하위 명령은 Consul Enterprise가 필요합니다. 다른 모든 snapshot 하위 명령은 Consul Community Edition에서 사용할 수 있습니다.

스냅샷 에이전트 ACL 요구 사항 (Snapshot agent ACL requirements)

Consul 스냅샷 에이전트는 다음 권한 집합을 부여하는 정책에 연결된 토큰을 제시해야 합니다.

  • acl:write: 에이전트가 ACL 데이터를 읽고 스냅샷을 찍을 수 있게 합니다.
  • key:write: 환경에서 여러 스냅샷 에이전트가 실행 중일 때 리더 선거 잠금 역할을 하는 키를 Consul KV 저장소에 만들 수 있게 합니다.
  • session:write: 실행 중인 지정된 Consul 노드에 대한 세션을 만들 수 있게 합니다.
  • service:write: 카탈로그에 등록할 수 있게 합니다.

인증 (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" ...

대체 인증 방법을 알아보려면 다음 문서를 참조하세요:

토큰 만들기 (Create a token)

스냅샷 에이전트용 토큰을 만들려면 정책을 정의하고, 정책을 Consul에 등록하고, 정책을 토큰에 연결해야 합니다.

정책 정의 (Define a policy)

명령줄 또는 API 인수로 정책 정의를 보내거나 외부 HCL 또는 JSON 파일로 정의할 수 있습니다. 정책에서 사용할 수 있는 모든 규칙에 대한 자세한 내용은 ACL Rules를 참조하세요.

다음 예제 정책은 파일로 정의되어 있습니다. 이 정책은 server-1234라는 노드에서 실행되는 스냅샷 에이전트가 consul-snapshot 서비스로 카탈로그에 등록하기 위한 적절한 권한을 부여합니다. 리더 선거 잠금에 consul-snapshot/lock 키를 사용합니다.

HCL:

acl = "write"
key "consul-snapshot/lock" {
  policy = "write"
}
session "server-1234" {
  policy = "write"
}
service "consul-snapshot" {
  policy = "write"
}

JSON:

{
  "acl": "write",
  "key": {
    "consul-snapshot/lock": [{
      "policy": "write"
    }]
  },
  "service": {
    "consul-snapshot": [{
      "policy": "write"
    }]
  },
  "session": {
    "server-1234": [{
      "policy": "write"
    }]
  }
}

Consul에 정책 등록 (Register the policy with Consul)

정책을 정의한 후 명령줄 또는 API 엔드포인트를 사용하여 Consul에 정책을 등록할 수 있습니다.

Consul Enterprise에서 정책을 만들 때 admin 파티션과 namespace를 지정할 수 있습니다. 정책은 지정된 범위에서만 유효합니다. 스냅샷 에이전트용 정책은 default 파티션의 default namespace에 만들어야 합니다.

CLI:

consul acl policy create 명령을 실행하고 정책 규칙을 지정하여 정책을 만듭니다. consul acl policy create 명령에 대한 자세한 내용은 Consul ACL Policy Create를 참조하세요.

다음 예제는 snapshot-agent.hcl에 정의된 정책을 등록합니다:

$ consul acl policy create -partition "default" -namespace "default" \
  -name snapshot-agent -rules @snapshot-agent.hcl \
  -description "Snapshot agent policy"

API:

/acl/policy 엔드포인트에 PUT 요청을 보내고 요청 본문에 정책 규칙을 지정하여 정책을 만듭니다. API 엔드포인트 사용에 대한 자세한 내용은 ACL Policy HTTP API를 참조하세요.

다음 예제는 snapshot-agent.hcl에 정의된 정책을 등록합니다. 요청 본문의 Rules 필드에 정책 규칙을 포함해야 합니다.

$ curl --request PUT http://127.0.0.1:8500/v1/acl/policy \
  --header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
  --data '{
  "Name": "snapshot-agent",
  "Description": "Snapshot agent policy",
  "Partition": "default",
  "Namespace": "default",
  "Rules": "acl = \"write\"\nkey \"consul-snapshot/lock\" {\n  policy = \"write\"\n}\nsession \"server-1234\" {\n  policy = \"write\"\n}\nservice \"consul-snapshot\" {\n  policy = \"write\"\n}\n"
}'

정책을 Consul에 등록한 후 Consul 명령줄 또는 API 엔드포인트를 사용하여 토큰을 만들고 연결할 수 있습니다. 또한 auth method를 사용하여 신뢰할 수 있는 외부 시스템에서 Consul이 토큰을 동적으로 만들도록 활성화할 수도 있습니다.

Consul Enterprise에서 토큰을 만들 때 admin 파티션과 namespace를 지정할 수 있습니다. 토큰은 지정된 범위에서만 유효합니다. 스냅샷 에이전트 토큰은 default 파티션의 default namespace에 만들어야 합니다.

CLI:

consul acl token create 명령을 실행하고 정책 이름 또는 ID를 지정하여 정책에 연결된 토큰을 만듭니다. consul acl token create 명령에 대한 자세한 내용은 Consul ACL Token Create를 참조하세요.

다음 명령은 정책 snapshot-agent에 연결된 ACL 토큰을 만듭니다.

$ consul acl token create -partition "default" -namespace "default" \
    -description "Snapshot agent token" \
    -policy-name "snapshot-agent"

API:

/acl/token 엔드포인트에 PUT 요청을 보내고 요청에 정책 이름 또는 ID를 지정하여 정책에 연결된 ACL 토큰을 만듭니다. API 엔드포인트 사용에 대한 자세한 내용은 ACL Token HTTP API를 참조하세요.

$ curl --request PUT http://127.0.0.1:8500/v1/acl/token \
  --header "X-Consul-Token: $CONSUL_HTTP_TOKEN" \
  --data '{
  "Policies": [
    {
      "Name": "snapshot-agent"
    }
  ],
  "Partition": "default",
  "Namespace": "default"
}'

더 알아보기 (Learn more)