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)