Vault Radar 에이전트 배포
Vault Radar 에이전트 배포
HCP Vault Radar 에이전트를 사용하면 클라우드 스캐너가 접근할 수 없는 온프레미스 데이터 소스에서 시크릿을 스캔하고, Vault Enterprise에 저장된 Vault Radar 발견 시크릿 간의 상호 연관(correlation)을 활성화할 수 있어요.
출처: 문서
본문
사전 요구 사항
- 서비스 주체를 만들 수 있는 계정으로 HCP에 접근 가능해야 해요.
- Vault Radar CLI가 설치되어 있어야 해요.
- 호스트 머신 또는 이미지에
git이 설치되어 있어야 해요. - 에이전트는 실행하고 HCP에 연결하려면 다음 환경 변수가 필요해요.
HCP_CLIENT_IDHCP_CLIENT_SECRETHCP_PROJECT_IDHCP_RADAR_AGENT_POOL_ID
서비스 주체 만들기
HCP Vault Radar 에이전트는 시크릿을 상호 연관 짓고 Vault로 복사하는 같은 에이전트 기능을 지원하려면 특정 역할이 필요해요.
프로젝트 수준 서비스 주체는 조직의 특정 프로젝트 내 리소스와 상호작용해요.
- Vault Radar Agent 역할이 할당된 프로젝트 수준 서비스 주체를 만드세요.
- 서비스 주체에 대한 키를 생성하세요.
- 클라이언트 ID와 클라이언트 시크릿에 대한 환경 변수를 내보내세요.
$ export HCP_CLIENT_ID=actual-client-id HCP_CLIENT_SECRET=actual-client-secret
HCP 포털에서 에이전트 풀 만들기
에이전트 풀은 같은 HCP_RADAR_AGENT_POOL_ID를 공유하는 에이전트 그룹이에요. 에이전트 수를 수평 확장해 더 높은 처리량을 가능하게 해줘요.
- HCP 포털로 이동해 HCP Vault Radar로 이동하세요.
- Settings를 클릭하세요.
- Agent를 클릭하세요.
- Add an agent pool을 클릭하고 프롬프트에 따라 새 에이전트 풀을 만드세요.마지막 페이지에 필요한 구성 정보가 표시돼요. 이 정보는 설정 페이지의 Agent 섹션에서 나중에 검색할 수 있어요.
- Connect the agent 페이지에서 풀 ID와 프로젝트 ID에 대한 환경 변수를 만드는 명령을 복사하세요.예시:
$ export HCP_RADAR_AGENT_POOL_ID=actual-pool-id
export HCP_PROJECT_ID=actual-project-id
시크릿 값 구성
대부분의 데이터 소스에서 에이전트는 데이터 소스 자체와 인증하기 위한 자격 증명이 필요해요. HCP에서 데이터 소스를 구성할 때 통합이 동작하는 데 필요한 자격 증명을 정의하라는 프롬프트가 표시될 수 있어요.
GitHub 데이터 소스를 구성하는 경우 에이전트용 GitHub PAT를 생성해야 해요. 해당 PAT 값을 에이전트 로컬에 환경 변수로 저장하세요. 환경 변수를 VAULT_RADAR_GIT_TOKEN으로 저장했다면 HCP에 입력하는 해당 변수의 URI는 env://VAULT_RADAR_GIT_TOKEN이어야 해요.
추가 구성
- 에이전트는
.hashicorp/vault-radar/ignore.yaml이 설정한 구성을 존중해요. Custom ignore rules 참고. - 에이전트는
VAULT_RADAR_LOG_LEVEL환경 변수가 설정한 로그 수준을 존중해요. 지원되는 로그 수준 참고.
데이터 소스 연결
HCP 포털의 Vault Radar 모듈에서 데이터 소스를 설정하고 관리할 수 있어요.
- Settings를 클릭하세요.
- Data Sources를 클릭하세요.
- Add data source를 클릭하세요.
- agent scan을 선택하세요.
- 설정하려는 데이터 소스 유형을 선택하세요. 데이터 소스 양식이 요청하는 정보를 제공하세요.
권장 방식은 에이전트를 Kubernetes로 배포하는 것이에요. 릴리스와 함께 샘플 매니페스트가 제공돼요.
배포 예시:
---
apiVersion: v1
kind: Namespace
metadata:
name: vault-radar
labels:
app: vault-radar-agent
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault-radar-agent
namespace: vault-radar
labels:
app: vault-radar-agent
---
# Note: This cluster role binding is only required if you are using the Kubernetes auth method for Vault indexing feature.
# It is needed for Vault to be able to review the Kubernetes service account token and authenticate the Agent.
# See https://developer.hashicorp.com/vault/docs/auth/kubernetes#configuring-kubernetes
# apiVersion: rbac.authorization.k8s.io/v1
# kind: ClusterRoleBinding
# metadata:
# name: vault-radar-agent
# roleRef:
# apiGroup: rbac.authorization.k8s.io
# kind: ClusterRole
# name: system:auth-delegator
# subjects:
# - kind: ServiceAccount
# name: vault-radar-agent
# namespace: vault-radar
---
apiVersion: v1
kind: Secret
metadata:
name: vault-radar-secrets
namespace: vault-radar
labels:
app: vault-radar-agent
type: Opaque
data:
HCP_CLIENT_SECRET: <Base64 Encoded HCP_CLIENT_SECRET>
VAULT_RADAR_GIT_TOKEN: <Base64 Encoded VAULT_RADAR_GIT_TOKEN>
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: vault-radar-agent
namespace: vault-radar
labels:
app: vault-radar-agent
spec:
replicas: 2
selector:
matchLabels:
app: vault-radar-agent
template:
metadata:
labels:
app: vault-radar-agent
spec:
serviceAccountName: vault-radar-agent
automountServiceAccountToken: true
containers:
- name: vault-radar-agent
image: docker.io/hashicorp/vault-radar:latest
command: ["vault-radar"]
args: ["agent", "exec"]
imagePullPolicy: Always
tty: true
resources:
limits:
cpu: 1000m
memory: 1024Mi
requests:
cpu: 100m
memory: 512Mi
env:
- name: HCP_PROJECT_ID
value: <HCP_PROJECT_ID>
- name: HCP_RADAR_AGENT_POOL_ID
value: <HCP_RADAR_AGENT_POOL_ID>
- name: HCP_CLIENT_ID
value: <HCP_CLIENT_ID>
- name: HCP_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: vault-radar-secrets
key: HCP_CLIENT_SECRET
- name: VAULT_RADAR_GIT_TOKEN
valueFrom:
secretKeyRef:
name: vault-radar-secrets
key: VAULT_RADAR_GIT_TOKEN
예시 매니페스트는 민감한 자격 증명에 Kubernetes Secrets를 사용해요. 이 방식은 값을 base64로 인코딩하고 시크릿을 파드에 환경 변수로 로드해야 해요. 파드에 vault-radar 환경 변수를 설정하기만 하면 다양한 방식으로 배포를 구성할 수 있어요.
명령줄 유틸리티로 값을 base64 인코딩한다면 입력 끝의 줄바꿈 문자를 제외해야 해요. 예를 들어 다음 명령을 사용할 수 있어요.
$ echo -n "<some value>" | base64
배포되면 각 파드는 stderr로 로그를 출력해요. 다른 Kubernetes 파드처럼 kubectl 명령으로 로그를 tail 할 수 있어요.
$ kubectl logs <pod name> -f
<PLACEHOLDERS>를 실제 값으로 대체해 vault-radar 환경 변수를 설정해야 해요.
$ export HCP_PROJECT_ID=<HCP_PROJECT_ID>
$ export HCP_CLIENT_ID=<HCP_CLIENT_ID>
$ export HCP_CLIENT_SECRET=<HCP_CLIENT_SECRET>
$ export HCP_RADAR_AGENT_POOL_ID=<HCP_RADAR_AGENT_POOL_ID>
그런 다음 다음을 실행해 에이전트를 시작할 수 있어요.
$ vault-radar agent exec
구성이 완료되면 에이전트는 포그라운드에서 실행되고 stderr로 로그를 남겨요.
더 알아보기 (Learn more)
- Vault와 상호 연관 짓기 — 에이전트를 Vault 클러스터에 연결하는 방법을 알아봐요.
- Vault Radar 에이전트 개요 — 에이전트의 전반적인 개념을 살펴봐요.
- Vault Radar 개요 — Vault Radar의 전반적인 개념을 살펴봐요.