Boundary 초기화하기
Boundary 초기화하기 (Initialize Boundary)
Boundary를 초기화하면 첫 번째 데이터베이스 리소스 — 기본 스코프, 인증 방법, admin 계정, 역할 — 가 만들어져요. 이 리소스들이 있어야 처음으로 로그인하고 클러스터를 관리할 수 있습니다. 이 과정은 데이터베이스 설정 중에 자동으로 진행되거나, recovery KMS를 사용해 수동으로 진행할 수 있어요.
시작하기 전에 컨트롤러 구성에서 설명한 대로 Boundary 데이터베이스를 이미 초기화했어야 합니다.
Terraform으로도 Boundary를 초기화하고 관리할 수 있어요. 자세한 내용은 Terraform 패턴 페이지를 참고하세요.
본문
사전 요구 사항
Boundary를 초기화하기 전에 데이터베이스를 초기화했어야 해요.
recovery KMS로 로그인
새 Boundary 인스턴스에 처음 접근하려면 컨트롤러 구성 파일에 정의된 recovery KMS(키 관리 시스템)를 사용해야 해요. 다음 예시는 하드코딩된 AEAD 키를 사용하는 구성 파일을 보여줍니다:
Note — 프로덕션 환경에서는 AWS KMS 같은 클라우드 프로바이더의 KMS를 사용해서 Boundary가 민감한 정보를 암호화하는 데 쓰는 키를 관리할 것을 HashiCorp가 권장합니다.
<truncated>
kms "aead" {
purpose = "root"
aead_type = "aes-gcm"
key = "sP1fnF5Xz85RrXyELHFeZg9Ad2qt4Z4bgNHVGtD6ung="
key_id = "global_root"
}
kms "aead" {
purpose = "worker-auth"
aead_type = "aes-gcm"
key = "8fZBjCUfN0TzjEGLQldGY4+iE9AkOvCfjh7+p0GtRBQ="
key_id = "global_worker-auth"
}
kms "aead" {
purpose = "recovery"
aead_type = "aes-gcm"
key = "8fZBjCUfN0TzjEGLQldGY4+iE9AkOvCfjh7+p0GtRBQ="
key_id = "global_recovery"
}
<truncated>
recovery 목적의 KMS는 Boundary를 '복구(recover)'하는 데 사용되어, 슈퍼 유저로 Boundary에 인증하고 관리할 수 있게 해줘요. 또한 생성된 리소스 없이 CLI나 Terraform에서 인증해서 Boundary를 관리할 수도 있습니다.
recovery KMS 워크플로로 Boundary에 인증하려면:
CLI에서 recovery 워크플로를 사용하려면, 실행하는 모든 명령에 -recovery-config <path_to_kms_recovery_config> 플래그를 넘기거나 BOUNDARY_RECOVERY_CONFIG 환경 변수를 설정해야 해요. recovery 워크플로를 사용할 때는 실행하는 모든 명령에 대해 인증이 일어납니다. boundary authenticate 명령은 recovery KMS를 사용할 때 적용되지 않아요.
$ cat << EOF > /tmp/recovery.hcl
kms "aead" {
purpose = "recovery"
aead_type = "aes-gcm"
key = "8fZBjCUfN0TzjEGLQldGY4+iE9AkOvCfjh7+p0GtRBQ="
key_id = "global_recovery"
}
EOF
# Example command
$ boundary users create <truncated> -recovery-config /tmp/recovery.hcl
...
프로바이더가 recovery KMS 워크플로를 사용하도록 구성하려면, recovery_kms_hcl의 값으로 KMS 블록을 제공하세요:
provider "boundary" {
addr = "https://boundary.mycorp.com:9200"
recovery_kms_hcl = <<EOT
kms "aead" {
purpose = "recovery"
aead_type = "aes-gcm"
key = "8fZBjCUfN0TzjEGLQldGY4+iE9AkOvCfjh7+p0GtRBQ="
key_id = "global_recovery"
}
EOT
}
첫 번째 로그인 계정 만들기
이 절에서는 recovery KMS 워크플로 없이 Boundary에 로그인할 수 있도록 첫 번째 인증 방법, 사용자, 계정, 역할을 구성하는 방법을 다룹니다. 예시에서는 우리가 만드는 global과 프로젝트 레벨 스코프를 위한 admin 사용자를 만들 거예요. 이렇게 하면 그 스코프 내에서 타깃을 구성하고 관리할 수 있습니다.
다음 단계를 완료하세요:
- org와 프로젝트 스코프 만들기
- 인증 방법 만들기
- 로그인 계정 만들기
- 사용자 만들기
- 스코프를 관리할 역할 만들기
org와 프로젝트 스코프 만들기
먼저 org와 프로젝트 스코프를 만들고, 각 스코프에 대해 admin과 admin 역할 생성을 건너뜁니다. 나중 단계에서 이 스코프를 관리할 역할을 선택된 사용자에게 지정할 거예요.
CLI:
$ boundary scopes create -name 'org' -scope-id 'global' \
-recovery-config /tmp/recovery.hcl \
-skip-admin-role-creation \
-skip-default-role-creation
<truncated>
$ boundary scopes create -name 'project' -scope-id <org_scope_id_from_last_step> \
-recovery-config /tmp/recovery.hcl \
-skip-admin-role-creation \
-skip-default-role-creation
<truncated>
Terraform:
resource "boundary_scope" "org" {
scope_id = "global"
name = "organization"
description = "Organization scope"
auto_create_admin_role = false
auto_create_default_role = false
}
resource "boundary_scope" "project" {
name = "project"
description = "My first project"
scope_id = boundary_scope.org.id
auto_create_admin_role = false
auto_create_default_role = false
}
인증 방법 만들기
조직 스코프에 인증 방법을 만듭니다.
CLI:
$ boundary auth-methods create password \
-recovery-config /tmp/recovery.hcl \
-scope-id <org_scope_id> \
-name 'my_method' \
-description 'My password auth method'
Terraform:
resource "boundary_auth_method" "password" {
name = "my_password_auth_method"
description = "Password auth method"
type = "password"
scope_id = boundary_scope.org.id
}
로그인 계정 만들기
인증 방법에 대한 로그인 계정을 만듭니다.
CLI:
$ boundary accounts create password \
-recovery-config /tmp/recovery.hcl \
-login-name "myuser" \
-auth-method-id <auth_method_id_from_last_step>
Terraform:
resource "boundary_account" "myuser" {
name = "myuser"
description = "User account for my user"
type = "password"
login_name = "myuser"
password = "foofoofoo"
auth_method_id = boundary_auth_method.password.id
}
사용자 만들기
사용자를 만들고, 이전 단계에서 만든 로그인 계정과 연결합니다. 이 사용자는 다음 단계에서 만들 역할의 주체(principal)가 될 거예요.
CLI:
$ boundary users create -scope-id <org_scope_id> \
-recovery-config /tmp/recovery.hcl \
-name "myuser" \
-description "My user!"
$ boundary users add-accounts \
-recovery-config /tmp/recovery.hcl \
-id <myuser_user_id> \
-account <myuser_account_id>
Terraform:
resource "boundary_user" "myuser" {
name = "myuser"
description = "My user!"
account_ids = [boundary_account.myuser.id]
scope_id = boundary_scope.org.id
}
스코프를 관리할 역할 만들기
다음 절은 만든 org와 프로젝트 스코프 내의 리소스를 관리하기 위해 만들어야 하는 네 가지 기본 역할을 설명합니다. 이 역할들은 boundary database init을 실행할 때 -skip-initial-login-role-creation 플래그로 생성을 건너뛰지 않았다면 Boundary가 자동으로 만들어 주는 역할과 비슷해요. 역할을 명시적으로 선언하면 Terraform이나 CLI로 독립적으로 완전히 관리할 수 있고, 그 접근을 정밀하게 정의할 수 있습니다.
다음 예시는 4가지 역할을 만듭니다:
| 역할 | 스코프 | 목적 |
|---|---|---|
| global_anon_listing | Global | 익명(비인증) 사용자가 global 스코프의 스코프와 인증 방법을 나열할 수 있게 함. |
| org_anon_listing | Organization | 익명(비인증) 사용자가 조직 스코프의 스코프와 인증 방법을 나열할 수 있게 함. |
| org_admin | Organization | myuser 사용자에게 org 스코프의 관리 권한 부여. |
| project_admin | Project | myuser 사용자에게 프로젝트 스코프의 관리 권한 부여. |
global 스코프용 익명 목록 역할
위 단계의 recovery 키 내보내기가 여전히 설정되어 있다고 가정합니다.
CLI:
# Create global anonymous listing role
$ boundary roles create -name 'global_anon_listing' \
-recovery-config /tmp/recovery.hcl \
-scope-id 'global'
$ boundary roles add-grants -id <global_anon_listing_id> \
-recovery-config /tmp/recovery.hcl \
-grant 'ids=*;type=auth-method;actions=list,authenticate' \
-grant 'ids=*;type=scope;actions=list,no-op' \
-grant 'ids=*;type=auth-token;actions=read:self,delete:self' \
-grant 'ids={{.Account.Id}};actions=read,change-password'
$ boundary roles set-grant-scopes -id <global_anon_listing_id> \
-recovery-config /tmp/recovery.hcl \
-grant-scope-id 'this' \
-grant-scope-id 'descendants'
$ boundary roles add-principals -id <global_anon_listing_id> \
-recovery-config /tmp/recovery.hcl \
-principal 'u_anon'
Terraform:
resource "boundary_role" "global_anon_listing" {
scope_id = "global"
grant_strings = [
"ids=*;type=auth-method;actions=list,authenticate",
"ids=*;type=scope;actions=list,no-op",
"ids=*;type=auth-token;actions=read:self,delete:self",
"ids={{.Account.Id}};actions=read,change-password"
]
principal_ids = ["u_anon"]
grant_scope_ids = ["this", "descendants"]
}
Warning — 기본 익명 로그인 역할을 삭제하거나 그 auth token grant를 제거하지 마세요. Boundary Client Agent 데몬과 Boundary 검색 기능이 이 역할을 필요로 하기 때문에, 사용자가 auth token을 클라이언트 캐시에 추가하고 캐시된 리소스를 검색할 수 있어요.
Boundary 초기화 경로는 이 역할을 Login Grants, Login and Default Grants, 또는 HCP Boundary에서는 global_anon_listing으로 노출할 수 있습니다. 이 역할은 global 스코프의 u_anon 주체와 연결되며 자손(descendant) 스코프에도 적용되어야 해요. 기본 grant는:
ids=*;type=auth-token;actions=list,read:self,delete:self
역할을 수정하거나 제거하기 전에 배포에 맞는 역할 이름과 배포별 동작을 확인하세요.
org 스코프용 익명 목록 역할
위 단계의 recovery 키 내보내기가 여전히 설정되어 있다고 가정합니다.
CLI:
$ boundary roles create -name 'org_anon_listing' \
-recovery-config /tmp/recovery.hcl \
-scope-id <org_scope_id>
$ boundary roles add-grants -id <org_anon_listing_id> \
-recovery-config /tmp/recovery.hcl \
-grant 'ids=*;type=auth-method;actions=list,authenticate' \
-grant 'type=scope;actions=list' \
-grant 'ids={{.Account.Id}};actions=read,change-password'
$ boundary roles add-principals -id <org_anon_listing_id> \
-recovery-config /tmp/recovery.hcl \
-principal 'u_anon'
Terraform:
resource "boundary_role" "org_anon_listing" {
scope_id = boundary_scope.org.id
grant_strings = [
"ids=*;type=auth-method;actions=list,authenticate",
"type=scope;actions=list",
"ids={{.Account.Id}};actions=read,change-password"
]
principal_ids = ["u_anon"]
}
myuser용 org admin 역할
위 단계의 recovery 키 내보내기가 여전히 설정되어 있다고 가정합니다.
CLI:
$ boundary roles create -name 'org_admin' \
-recovery-config /tmp/recovery.hcl \
-scope-id 'global'
$ boundary roles set-grant-scopes \
-id <org_admin_id> \
-grant-scope-id <org_scope_id>
$ boundary roles add-grants -id <org_admin_id> \
-recovery-config /tmp/recovery.hcl \
-grant 'ids=*;type=*;actions=*'
$ boundary roles add-principals -id <org_admin_id> \
-recovery-config /tmp/recovery.hcl \
-principal <myuser_user_id>
Terraform:
resource "boundary_role" "org_admin" {
scope_id = "global"
grant_scope_ids = [boundary_scope.org.id]
grant_strings = [
"ids=*;type=*;actions=*"
]
principal_ids = [boundary_user.myuser.id]
}
myuser용 프로젝트 admin
위 단계의 recovery 키 내보내기가 여전히 설정되어 있다고 가정합니다.
CLI:
$ boundary roles create -name 'project_admin' \
-recovery-config /tmp/recovery.hcl \
-scope-id <org_scope_id> \
-grant-scope-id <project_scope_id>
$ boundary roles add-grants -id <project_admin_id> \
-recovery-config /tmp/recovery.hcl \
-grant 'ids=*;type=*;actions=*'
$ boundary roles add-principals -id <project_admin_id> \
-recovery-config /tmp/recovery.hcl \
-principal <myuser_user_id>
Terraform:
resource "boundary_role" "project_admin" {
scope_id = boundary_scope.org.id
grant_scope_ids = [boundary_scope.project.id]
grant_strings = [
"ids=*;type=*;actions=*"
]
principal_ids = [boundary_user.myuser.id]
}
새 사용자로 로그인
boundary authenticate password \
-auth-method-id <auth_method_id>
문제 해결
Boundary를 초기화할 때 흔한 문제는 다음과 같습니다:
- 잘못된 -recovery-config 경로 —
-recovery-config(또는BOUNDARY_RECOVERY_CONFIG환경 변수)에 전달한 경로가 컨트롤러 구성과 일치하는recovery목적 블록이 있는 유효한 KMS 구성 파일을 가리키는지 확인하세요. - Grant 문자열 오타 — 각
-grant값이ids=<id>;type=<type>;actions=<action>구문을 정확히 따르는지 확인하세요. 잘못된 grant 문자열은 역할이 의도하지 않은(또는 전혀 없는) 권한을 부여하게 만듭니다.
더 알아보기 (Learn more)
Boundary를 초기화한 다음에는 Boundary 클라이언트를 설치해야 해요.