AWS 동적 호스트 카탈로그
AWS 동적 호스트 카탈로그
Boundary는 동적 호스트 카탈로그를 사용해 AWS EC2 인스턴스를 자동으로 발견하고 호스트로 추가해요.
동적 호스트 카탈로그는 필터를 사용해 만드는 호스트 셋에 어떤 호스트를 추가할지 선택해요. 예를 들어 AWS에서 호스트를 동기화하는 호스트 카탈로그를 만들고, tag:env=prod로 태그된 모든 AWS EC2 인스턴스를 선택하는 production이라는 호스트 셋을 만들 수 있어요.
동적 호스트 카탈로그를 설정하려면:
- 지원되는 인증 방법으로 호스트 카탈로그를 AWS 계정에 인증하세요.
- 동기화할 호스트를 선택하는 필터로 호스트 셋을 만드세요.
본문
Boundary는 동적 호스트 카탈로그를 사용해 AWS EC2 인스턴스를 자동으로 발견하고 호스트로 추가해요.
동적 호스트 카탈로그는 필터를 사용해 만드는 호스트 셋에 어떤 호스트를 추가할지 선택해요. 예를 들어 AWS에서 호스트를 동기화하는 호스트 카탈로그를 만들고, tag:env=prod로 태그된 모든 AWS EC2 인스턴스를 선택하는 production이라는 호스트 셋을 만들 수 있어요.
동적 호스트 카탈로그를 설정하려면:
- 지원되는 인증 방법으로 호스트 카탈로그를 AWS 계정에 인증하세요.
- 동기화할 호스트를 선택하는 필터로 호스트 셋을 만드세요.
AWS에 연결하기 위한 호스트 카탈로그 생성
Boundary는 다양한 제공자와 통합하기 위해 플러그인을 사용해요. AWS와 통합하기 위해 동적 호스트 카탈로그를 사용하려면 plugin 유형의 호스트 카탈로그를 만들고 plugin-name 값을 aws로 설정해요. 또한 Boundary가 AWS에 인증하는 데 필요한 특정 필드들을 제공해야 해요.
Boundary는 AWS에 인증하는 두 가지 방법을 지원해요.
- IAM 사용자와 그 액세스 키를 사용하는 정적 자격 증명(Static credentials)
- AssumeRole이 생성한 자격 증명을 사용하는 동적 자격 증명(Dynamic credentials)
HashiCorp는 가능하면 동적 자격 증명을 사용할 것을 권장해요. 자격 증명 유형을 선택해 계속하세요.
필수 IAM(Identity and Access Management) 권한
Boundary는 구성된 IAM 사용자에 부착되어야 할 최소한의 IAM 권한이 필요해요.
DescribeInstances를 *로 구성하세요. DescribeInstances는 리소스 ARN(Amazon Resource Name)으로 범위를 지정할 수 없어요.
예시 정책:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:DescribeInstances"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
정적 자격 증명 순환을 허용하려면 iam:GetUser, iam:CreateAccessKey, iam:DeleteAccessKey 정책을 추가하세요.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:DeleteAccessKey",
"iam:GetUser",
"iam:CreateAccessKey"
],
"Effect": "Allow",
"Resource": "arn:aws:iam::123456789012:user/JohnDoe"
}
]
}
Note: AWS IAM 역할에 대한 **교차 계정 접근(cross-account access)**은 현재 지원되지 않아요.
이 기능은 self-managed Boundary 워커(worker)가 필요해요.
AWS 역할로 동적 호스트 카탈로그를 설정하려면 self-managed 워커가 그 역할을 가정(assume)해야 해요. 역할을 self-managed 워커 AWS 인스턴스에 할당한 다음, 동적 호스트 카탈로그를 설정할 때 AWS 워커와 일치하는 워커 필터를 제공해야 해요.
AssumeRole로 호스트 카탈로그를 설정하려면 다음 단계를 수행하세요.
- AWS 계정에 self-managed 워커를 배포하세요. 워커는 동적 호스트 카탈로그로 접근하려는 호스트와 같은 VPC(Virtual Private Cloud)에 있어야 해요. 나중에 워커 필터로 트래픽을 더 쉽게 라우팅하려면 워커 태그 추가를 고려하세요.
AmazonEC2ReadOnlyAccess정책이 부착된 IAM 역할을 만들거나, 모든 리소스에 대해ec2:DescribeInstances동작이 허용된 커스텀 정책을 정의하세요. 이 정책은 최소한 다음을 포함해야 해요:
자세한 내용은 AWS의 Create a role 문서를 참고하세요.{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:DescribeInstances" ], "Effect": "Allow", "Resource": "*" } ] }- 역할을 self-managed 워커로 구성된 IAM 인스턴스에 부착하세요. AWS의 Attach an IAM role to an instance를 참고하세요.
- 다음 단계로 진행해 동적 호스트 카탈로그를 설정하세요. 호스트 카탈로그를 설정할 때 트래픽을 역할을 가정하는 워커로 라우팅하기 위해 워커 태그를 추가해야 해요.
AWS를 위한 동적 호스트 카탈로그를 만들려면 다음 단계를 완료하세요.
- Boundary에 로그인하세요.
- org를 선택한 다음 호스트 카탈로그를 만들 프로젝트를 선택하세요.
- Host Catalogs를 선택하세요.
- New Host Catalog를 선택하세요.
- 다음 필드를 완료하세요.
- Name — (선택) 식별 목적의 선택적 이름이에요. 이름을 입력하면 고유해야 해요.
- Description — (선택) 식별 목적으로 호스트 카탈로그에 대한 선택적 설명이에요.
- Type — (필수) 동적 호스트 카탈로그를 만들려면 Dynamic을 선택하세요.
- Provider — (필수) AWS 리소스를 위한 동적 호스트 카탈로그를 만들려면 AWS를 선택하세요.
- AWS Region — (필수) 호스트 카탈로그에 추가하려는 호스트의 AWS 지역을 입력하세요.
- Credential type — (필수) 호스트 카탈로그에 인증하는 데 사용할 자격 증명 유형을 선택하세요. 호스트 카탈로그를 구성하는 데 필요한 필드는 정적 또는 동적 자격 증명 중 무엇을 구성하느냐에 따라 달라져요.
- Use an access key (Static Credentials) — AWS에서 생성한 액세스 키로 호스트 카탈로그에 인증해요.
- Use Assume Role (Dynamic Credentials) — AWS AssumeRole이 생성한 자격 증명으로 호스트 카탈로그에 인증해요.
정적 자격 증명(Static credentials):
- Access Key ID — (필수) 이 호스트 카탈로그와 함께 사용할 IAM 사용자의 액세스 키 ID예요.
- Secret Access Key — (필수) 이 호스트 카탈로그와 함께 사용할 IAM 사용자의 시크릿 액세스 키예요.
- Worker Filter — (선택) 지정된 워커로 요청을 라우팅하는 선택적 필터예요.
동적 자격 증명(Dynamic credentials):
- Role ARN — (필수)
AssumeRole인증에 사용할 AWS 역할 ARN이에요.role_arn값을 제공하면disable_credential_rotation도true로 설정해야 해요. - Role external ID — (선택)
AssumeRole제공자의 외부 ID예요. - Role session name — (선택)
AssumeRole제공자의 세션 이름이에요. - Role tags — (선택)
AssumeRole제공자의 키-값 쌍 태그예요. - Worker Filter — (선택) 지정된 워커로 요청을 라우팅하는 선택적 필터예요. 필터는 IAM 역할이 할당된 워커와 일치해야 해요.
- Disable credential rotation — 활성화하면 Boundary가 AWS에서 자격 증명을 자동으로 순환시키지 않아요. 동적 자격 증명을 사용하면 자격 증명 순환이 자동으로 비활성화돼요.
- Save를 선택하세요.
동적 호스트 카탈로그를 만드는 데 필요한 필드는 정적 또는 동적 자격 증명 중 무엇을 구성하느냐에 따라 달라져요.
CLI에서 정적 자격 증명으로 AWS 동적 호스트 카탈로그를 만들려면:
-
Boundary에 로그인하세요.
-
다음 명령으로 정적 자격 증명을 사용해 AWS를 위한 동적 호스트 카탈로그를 만드세요:
$ boundary host-catalogs create plugin \ -scope-id $BOUNDARY_PROJECT_ID \ -plugin-name aws \ -attr disable_credential_rotation=true \ -attr region=us-east-1 \ -secret access_key_id=env://AWS_ACCESS_KEY_ID \ -secret secret_access_key=env://AWS_SECRET_ACCESS_KEY
scope-id와 plugin-name 필드는 동적 호스트 카탈로그를 만들 때 필수예요. attr와 secret 플래그 뒤의 필드는 AWS 특화 필드이며 Boundary가 인증하는 데 필요해요.
명령의 값을 다음 필수 AWS 시크릿과 호스트 카탈로그와 연관시키려는 속성으로 바꾸세요.
disable_credential_rotation—true로 설정하면 Boundary가 AWS에서 자격 증명을 자동으로 순환시키지 않아요.region— 호스트 카탈로그를 구성할 지역이에요. 이 카탈로그의 모든 호스트 셋이 이 지역에 대해 구성돼요.access_key_id— 이 호스트 카탈로그와 함께 사용할 IAM 사용자의 액세스 키 ID예요.secret_access_key— 이 호스트 카탈로그와 함께 사용할 IAM 사용자의 시크릿 액세스 키예요.instance_addresses_only=true—-attr플래그로 추가하면 Boundary가 인스턴스 주소 동기화를 제한하고 호스트의 기본 ENI(Elastic Network Interface)를 자동으로 선택해요. 나중에 값을 해제하려면true를false로 바꾸세요.
호스트 카탈로그를 만들 때 사용할 수 있는 추가 필드는 host-catalogs create 명령 문서를 참고하세요.
CLI에서 동적 자격 증명으로 AWS 동적 호스트 카탈로그를 만들려면:
-
Boundary에 로그인하세요.
-
다음 명령으로 동적 자격 증명을 사용해 동적 호스트 카탈로그를 만드세요:
$ boundary host-catalogs create plugin \ -scope-id $BOUNDARY_PROJECT_ID \ -plugin-name aws \ -attr disable_credential_rotation=true \ -attr region=us-east-1 \ -attr role_arn=AWS_ROLE_ARN_VALUE \ -attr role_external_id=AWS_ROLE_EXTERNAL_ID_VALUE \ -attr role_session_name=AWS_ROLE_SESSION_NAME_VALUE \ -attr role_tags=AWS_ROLE_TAGS_VALUE \ -worker-filter '"aws" in "/tags/type"'
scope-id와 plugin-name 필드는 동적 호스트 카탈로그를 만들 때 필수예요. 명령의 값을 다음 필수 AWS 시크릿과 호스트 카탈로그와 연관시키려는 속성으로 바꾸세요.
disable_credential_rotation—true로 설정하면 Boundary가 AWS에서 자격 증명을 자동으로 순환시키지 않아요. 동적 자격 증명을 사용하려면 자격 증명 순환을 비활성화해야 해요.region— 호스트 카탈로그를 구성할 지역이에요. 이 카탈로그의 모든 호스트 셋이 이 지역에 대해 구성돼요.role_arn—AssumeRole인증에 사용되는 AWS 역할 ARN이에요.role_arn값을 제공하면disable_credential_rotation도true로 설정해야 해요.role_external_id—AssumeRole제공자에 대해 구성한 외부 ID예요.role_session_name—AssumeRole제공자에 대해 구성한 세션 이름이에요.role_tags—AssumeRole제공자에 대해 구성한 키-값 쌍 태그예요.worker-filter— 어떤 워커가 이 호스트 카탈로그의 동적 호스트 카탈로그 명령을 처리할 수 있는지 필터링하는 부울 표현식이에요. AWS에 배포된 self-managed 워커에 대한 유효한 필터 표현식과 일치해야 해요. 워커 Filter 예시에서 자세히 배울 수 있어요.instance_addresses_only=true—-attr플래그로 추가하면 Boundary가 인스턴스 주소 동기화를 제한하고 호스트의 기본 ENI(Elastic Network Interface)를 자동으로 선택해요. 나중에 값을 해제하려면true를false로 바꾸세요.
호스트 카탈로그를 만들 때 사용할 수 있는 추가 필드는 host-catalogs create 명령 문서를 참고하세요.
동적 호스트 카탈로그를 만드는 데 필요한 필드는 정적 또는 동적 자격 증명 중 무엇을 구성하느냐에 따라 달라져요.
다음 예시 속성들의 요구 사항을 배우려면 Boundary Terraform provider 문서를 참고하세요.
정적 자격 증명을 위한 Terraform 정책을 적용하세요:
resource "boundary_host_catalog_plugin" "aws_host_catalog" {
name = "AWS Catalog"
description = "AWS Host Catalog"
scope_id = boundary_scope.project.id
plugin_name = "aws"
# recommended to pass in aws secrets using a file() or using environment variables
attributes_json = jsonencode({
"region" = "eu-west-2",
"disable_credential_rotation" = true })
secrets_json = jsonencode({
"access_key_id" = "AWS_ACCESS_KEY_ID_VALUE",
"secret_access_key" = "AWS_SECRET_ACCESS_KEY_VALUE"})
}
scope_id와 plugin_name 필드는 동적 호스트 카탈로그를 만들 때 필수예요.
구성의 값을 다음 필수 AWS 시크릿과 호스트 카탈로그와 연관시키려는 속성으로 바꾸세요.
disable_credential_rotation—true로 설정하면 Boundary가 AWS에서 자격 증명을 자동으로 순환시키지 않아요.region— 호스트 카탈로그를 구성할 지역이에요. 이 카탈로그의 모든 호스트 셋이 이 지역에 대해 구성돼요.access_key_id— 이 호스트 카탈로그와 함께 사용할 IAM 사용자의 액세스 키 ID예요.secret_access_key— 이 호스트 카탈로그와 함께 사용할 IAM 사용자의 시크릿 액세스 키예요.
호스트 카탈로그를 만들 때 사용할 수 있는 추가 필드는 Boundary Terraform provider 문서의 boundary_host_catalog_plugin 항목을 참고하세요.
동적 자격 증명을 위한 Terraform 정책을 적용하세요:
resource "boundary_host_catalog_plugin" "aws_host_catalog" {
name = "AWS Catalog"
description = "AWS Host Catalog"
scope_id = boundary_scope.project.id
plugin_name = "aws"
worker_filter = "\"aws\" in \"/tags/type\""
attributes_json = jsonencode({
"region" = "eu-west-2",
"disable_credential_rotation" = true,
"role_arn" = "AWS_ROLE_ARN_VALUE",
"role_external_id" = "AWS_ROLE_EXTERNAL_ID_VALUE",
"role_session_name" = "AWS_ROLE_SESSION_NAME_VALUE",
"role_tags" = "AWS_ROLE_TAGS_VALUE"
})
}
scope_id와 plugin_name 필드는 동적 호스트 카탈로그를 만들 때 필수예요.
구성의 값을 다음 필수 AWS 시크릿과 호스트 카탈로그와 연관시키려는 속성으로 바꾸세요.
worker_filter— 어떤 워커가 이 호스트 카탈로그의 동적 호스트 카탈로그 명령을 처리할 수 있는지 필터링하는 부울 표현식이에요. AWS에 배포된 self-managed 워커에 대한 유효한 필터 표현식과 일치해야 해요. 워커 Filter 예시에서 자세히 배울 수 있어요.disable_credential_rotation—true로 설정하면 Boundary가 AWS에서 자격 증명을 자동으로 순환시키지 않아요. 동적 자격 증명을 사용하려면 자격 증명 순환을 비활성화해야 해요.region— 호스트 카탈로그를 구성할 지역이에요. 이 카탈로그의 모든 호스트 셋이 이 지역에 대해 구성돼요.role_arn—AssumeRole인증에 사용되는 AWS 역할 ARN이에요.role_arn값을 제공하면disable_credential_rotation도true로 설정해야 해요.role_external_id—AssumeRole제공자에 대해 구성한 외부 ID예요.role_session_name—AssumeRole제공자에 대해 구성한 세션 이름이에요.role_tags—AssumeRole제공자에 대해 구성한 키-값 쌍 태그예요.
호스트 카탈로그를 만들 때 사용할 수 있는 추가 필드는 Boundary Terraform provider 문서의 boundary_host_catalog_plugin 항목을 참고하세요.
AWS에 연결하기 위한 호스트 셋 생성
호스트 셋은 추가되어야 할 발견된 호스트를 식별하기 위해 어떤 AWS 필터를 사용할지 지정해요.
호스트 셋을 만들려면 다음 단계를 완료하세요.
- Boundary에 로그인하세요.
- org를 선택한 다음 호스트 셋을 만들 프로젝트를 선택하세요.
- Host Catalogs를 선택하세요.
- 호스트 셋을 추가하려는 동적 호스트 카탈로그를 선택하세요.
- Host Sets 탭을 클릭하고 New를 클릭하세요.
- 다음 필드를 완료하세요.
- Name — (선택) 식별 목적의 선택적 이름이에요. 이름을 입력하면 고유해야 해요.
- Description — (선택) 식별 목적으로 호스트 카탈로그에 대한 선택적 설명이에요.
- Filter — (선택)
key=val1,val2형식의 문자열 필터 배열이에요. key는tag:tag-name같은 필터 옵션에 해당하고, 값(들)은 쉼표로 구분된 목록이에요. 전체 예시는tag:service-type=database예요. 필터 옵션 목록은 AWS CLI 참조의 describe-instances를 확인하세요.
- Save를 클릭하세요.
CLI에서:
-
Boundary에 로그인하세요.
-
다음 명령으로 호스트 셋을 만드세요:
$ boundary host-sets create plugin \ -host-catalog-id $BOUNDARY_HOST_CATALOG_ID \ -attr filters=tag-key=foo,bar \ -attr filters=tag-key=baz
host-catalog-id 값은 이 호스트 셋을 만들 호스트 카탈로그를 지정하는 필수 필드예요. 호스트 카탈로그와 마찬가지로 attr 플래그 뒤에 전달되는 필드는 AWS 특화 필드예요. filters 필드는 key=val1,val2 형식의 문자열 필터를 포함해요. key는 필터 옵션에 해당하고, 값(들)은 쉼표로 구분된 목록이에요. 필터 옵션 목록은 AWS CLI 참조의 describe-instances를 참고하세요. 단일 filters 필드의 값이 쉼표로 구분되면, 그중 하나가 참이면 호스트가 일치해요. 여러 filters 필드가 제공되면 호스트가 일치하려면 모두 일치해야 해요. 위 예시에서 인스턴스는 foo 또는 bar 태그 중 하나를 가져야 하고, baz 태그도 가져야 해요.
호스트 셋을 만들 때 사용할 수 있는 추가 필드는 host-sets create 명령 문서를 참고하세요.
다음 Terraform 정책을 적용하세요:
resource "boundary_host_set_plugin" "aws_host_set" {
name = "AWS Host Set"
description = "AWS Host Set"
host_catalog_id = boundary_host_catalog_plugin.aws_host_catalog.id
attributes_json = jsonencode({
"filters" = ["tag-key=foo,bar", "tag-key=baz"] })
}
host_catalog_id 값은 이 호스트 셋을 만들 호스트 카탈로그를 지정하는 필수 필드예요.
filters 필드는 key=val1,val2 형식의 문자열 필터를 포함해요. key는 필터 옵션에 해당하고, 값(들)은 쉼표로 구분된 목록이에요. 필터 옵션 목록은 AWS CLI 참조의 describe-instances를 참고하세요.
단일 filters 필드의 값이 쉼표로 구분되면, 그중 하나가 참이면 호스트가 일치해요. 여러 filters 필드가 제공되면 호스트가 일치하려면 모두 일치해야 해요. 위 예시에서 인스턴스는 foo 또는 bar 태그 중 하나를 가져야 하고, baz 태그도 가져야 해요.
호스트 셋을 만들 때 사용할 수 있는 추가 필드는 Boundary Terraform provider 문서의 boundary_host_set_plugin 항목을 참고하세요.
더 알아보기
호스트 카탈로그(host catalogs)와 호스트 셋(host sets)의 도메인 모델 문서를 참고해 이 Boundary 리소스를 더 잘 이해하세요.
Boundary의 필터 문법과 모범 사례에 대한 자세한 내용은 Filtering and listing resources를 참고하세요.