운영 에이전트 측정항목 구성에서 보안 비밀 관리

일부 서드 파티 통합을 구성하려면 운영 에이전트 측정항목 수신기에 비밀번호와 같은 보안 비밀을 제공해야 합니다. 기본적으로 이러한 보안 비밀은 에이전트의 config.yaml 파일에 일반 텍스트로 저장됩니다. 이러한 비밀은 에이전트가 작성한 시스템 로그에 포함되어 Cloud Logging으로 전송되므로 운영 에이전트가 실행 중인 가상 머신(VM) 외부에 보안 비밀이 노출됩니다.

운영 에이전트 버전 2.57.0부터는 OpenTelemetry 공급자 통합 Secret Manager를 사용하여 구성 파일에서 일반 텍스트 보안 비밀을 삭제할 수 있습니다.

제공자는 수신자 및 프로세서 구성요소와 유사한 OpenTelemetry 구성 구성요소입니다. 각 제공자에는 유형이 있으며 각 유형의 제공자는 구성의 특정 식별자를 값에 매핑합니다.

googlesecretmanager 제공자는 Secret Manager 식별자를 Secret Manager에 저장한 비밀번호, 토큰, API 키와 같은 보안 비밀에 매핑합니다. googlesecretmanager 제공자를 사용하면 다음과 같은 이점이 있습니다.

  • 보안 강화: 구성 파일에 비밀번호와 같은 민감한 정보가 포함되지 않습니다. 실제 보안 비밀은 민감한 정보를 안전하게 저장, 액세스, 관리하기 위해 특별히 설계된 서비스인 Secret Manager에 저장됩니다.
  • 노출 위험 감소: 운영 에이전트 초기화 중에 Secret Manager가 보안 비밀을 가져오므로 로그에 일반 텍스트 보안 비밀이 실수로 기록되는 것을 방지할 수 있습니다.

googlesecretmanager는 커스텀 운영 에이전트 구성의 측정항목 수집 구성에서만 사용할 수 있습니다. 로깅 구성에서 보안 비밀을 대체하는 데 공급자를 사용하지 마세요.

시작하기 전에

googlesecretmanager 제공자를 사용하려면 다음 단계에 설명된 대로 Secret Manager API를 사용 설정하고 API에 대한 액세스를 허용해야 합니다.

  1. After installing the Google Cloud CLI, initialize it by running the following command:

    gcloud init

    If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  2. Google Cloud CLI의 기본 프로젝트를 설정합니다.

    gcloud config set project PROJECT_ID
    

    이전 명령어를 실행하기 전에 PROJECT_ID 변수를 Google Cloud 프로젝트의 식별자로 바꿉니다.

  3. Enable the Secret Manager API:

    gcloud services enable secretmanager.googleapis.com
  4. Secret Manager에 필요한 범위인 https://www.googleapis.com/auth/cloud-platform을 포함하도록 인스턴스의 OAuth 액세스 범위를 업데이트합니다.
    gcloud compute instances set-service-account "INSTANCE_ID" \
      --service-account "SERVICE_ACCT_EMAIL" \
      --scopes "https://www.googleapis.com/auth/cloud-platform"
    

    위 명령어를 실행하기 전에 다음 변수를 바꿉니다.

    • INSTANCE_ID: VM의 식별자
    • SERVICE_ACCT_EMAIL: VM과 연결된 서비스 계정의 주소

    자세한 내용은 Secret Manager API 액세스를 참조하세요.

  5. 운영 에이전트 구성을 관리하는 사용자에게 보안 비밀을 만들고 관리하는 데 필요한 권한을 부여합니다. Identity and Access Management 역할 roles/secretManager.secretAdmin에는 다음과 같은 필수 권한이 포함되어 있습니다.
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role=roles/secretManager.secretAdmin
    

    위 명령어를 실행하기 전에 다음 변수를 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 식별자
    • USER_EMAIL: 역할이 부여된 사용자의 주소
  6. VM과 연결된 서비스 계정에 보안 비밀에 액세스하는 데 필요한 권한을 부여합니다. Identity and Access Management 역할 roles/secretManager.secretAccessor에는 다음과 같은 필수 권한이 포함되어 있습니다.
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCT_EMAIL" \
      --role=roles/secretManager.secretAccessor
    

    위 명령어를 실행하기 전에 다음 변수를 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 식별자
    • SERVICE_ACCT_EMAIL: VM과 연결된 서비스 계정의 주소
  7. 일반 텍스트 보안 비밀을 관리형 보안 비밀로 대체

    Secret Manager 및 googlesecretmanager 제공자를 사용하여 구성 파일에서 일반 텍스트 보안 비밀 사용을 제거하려면 다음 단계를 따르세요.

    1. 구성 파일의 각 일반 텍스트 보안 비밀에 대해 Secret Manager에서 보안 비밀을 만듭니다.
    2. 구성 파일의 각 일반 텍스트 보안 비밀을 Secret Manager의 해당 보안 비밀에 대한 참조로 바꿉니다.

    예를 들어 mysql 측정항목 수신기를 사용하는 경우 구성 파일에 다음과 같은 항목이 포함될 수 있습니다.

    receivers:
      mysql:
        type: mysql
        username: root
        password: plaintext-secret
    

    이 예시에서는 plaintext-secret 문자열을 Secret Manager에 배치한 다음 일반 텍스트 보안 비밀을 관리형 보안 비밀 참조로 대체합니다.

    일반 텍스트 보안 비밀의 Secret Manager 보안 비밀 만들기

    일반 텍스트 보안 비밀 plaintext-secret이 포함된 Secret Manager 보안 비밀을 만들려면 다음 명령어를 실행합니다.
    echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \
        --replication-policy="automatic" \
        --data-file=-
    

    위 명령어를 실행하기 전에 다음 변수를 바꿉니다.

    • plaintext-secret: 일반 텍스트 보안 비밀로 바꿉니다.
    • SECRET_NAME: 보안 비밀의 의미 있는 이름으로 바꿉니다.

    새 보안 비밀의 정규화된 리소스 이름은 VERSION 1인 다음과 같은 형식입니다.

    projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION

    Secret Manager에서 보안 비밀을 저장, 버전 관리, 액세스하는 방법에 관한 자세한 내용은 보안 비밀 만들기를 참고하세요.

    일반 텍스트 보안 비밀 교체

    구성 파일을 업데이트하려면 다음 예와 같이 각 일반 텍스트 보안 비밀을 googlesecretmanager 제공자 참조 및 관리형 보안 비밀의 리소스 이름으로 바꿉니다.

    receivers:
      mysql:
        type: mysql
        username: root
        password: ${googlesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION}
    

    운영 에이전트 다시 시작

    Linux

    1. 에이전트를 다시 시작하려면 인스턴스에서 다음 명령어를 실행합니다.
      sudo systemctl restart google-cloud-ops-agent
      
    2. 에이전트가 다시 시작되었는지 확인하려면 다음 명령어를 실행하고 '측정항목 에이전트' 및 'Logging 에이전트' 구성요소가 시작되었는지 확인합니다.
      sudo systemctl status "google-cloud-ops-agent*"
      

    Windows

    1. RDP 또는 유사한 도구를 사용하여 인스턴스에 연결하고 Windows에 로그인합니다.
    2. PowerShell 아이콘을 마우스 오른쪽 버튼으로 클릭하고 관리자 권한으로 실행을 선택하여 관리자 권한이 있는 PowerShell 터미널을 엽니다.
    3. 에이전트를 다시 시작하려면 다음 PowerShell 명령어를 실행합니다.
      Restart-Service google-cloud-ops-agent -Force
      
    4. 에이전트가 다시 시작되었는지 확인하려면 다음 명령어를 실행하고 '측정항목 에이전트' 및 'Logging 에이전트' 구성요소가 시작되었는지 확인합니다.
      Get-Service google-cloud-ops-agent*