レシーバやエクスポータなどの一部のコンポーネントを構成する場合は、パスワードなどのシークレットを指定する必要があります。これらのシークレットは、コレクタの構成ファイルに平文として含めることが可能です。ただし、これらのシークレットは Collector によって書き込まれたシステムログに含まれ、Cloud Logging に送信されるため、Collector が実行されているノードまたは仮想マシン(VM)の外部にシークレットが公開されます。
Google がビルドした Collector バージョン 0.126.0 以降では、Secret Manager と統合された OpenTelemetry プロバイダを使用して、構成ファイル内の平文シークレットを排除できます。
プロバイダは、レシーバー コンポーネントやプロセッサ コンポーネントと同様に、OpenTelemetry 構成コンポーネントです。各プロバイダにはタイプがあり、各タイプのプロバイダは構成内の特定の ID を値にマッピングします。
googlesecretmanager
プロバイダは、Secret Manager 識別子を、Secret Manager に保存したシークレット(パスワード、トークン、API キーなど)にマッピングします。googlesecretmanager
プロバイダを使用すると、次のメリットが得られます。
- 強化されたセキュリティ: 構成ファイルにはパスワードなどの機密情報が含まれません。実際のシークレットは Secret Manager に保存されます。これは、センシティブ データの安全な保存、アクセス、管理のために特別に設計されたサービスです。
- 露出のリスクを軽減: Secret Manager は Google が構築した OpenTelemetry Collector の初期化時にシークレットを取得するため、平文のシークレットが誤ってログに記録されることはありません。
始める前に
googlesecretmanager
プロバイダを使用するには、次の手順で Secret Manager API を有効にして、API へのアクセスを許可する必要があります。
-
Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init
外部 ID プロバイダ(IdP)を使用している場合は、まずフェデレーション ID を使用して gcloud CLI にログインする必要があります。
Google Cloud CLI のデフォルト プロジェクトを設定します。
gcloud config set project PROJECT_ID
前のコマンドを実行する前に、PROJECT_ID 変数を Google Cloud プロジェクトの ID に置き換えます。
-
Enable the Secret Manager API:
gcloud services enable secretmanager.googleapis.com
- インスタンスの OAuth アクセス スコープを更新して、Secret Manager に必要なスコープ
https://www.googleapis.com/auth/cloud-platform
を含めます。gcloud compute instances set-service-account "INSTANCE_ID" \ --service-account "SERVICE_ACCT_EMAIL" \ --scopes "https://www.googleapis.com/auth/cloud-platform"
前述のコマンドを実行する前に、次の変数を置き換えます。
- INSTANCE_ID: VM の ID。
- SERVICE_ACCT_EMAIL: VM に関連付けられたサービス アカウントのアドレス。
詳細については、Secret Manager API へのアクセスをご覧ください。
- Google が構築した OpenTelemetry Collector の構成を管理するユーザーに、シークレットの作成と管理に必要な権限を付与します。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 プロジェクトの ID。
- USER_EMAIL: ロールを付与するユーザーのアドレス。
- 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 プロジェクトの ID。
- SERVICE_ACCT_EMAIL: VM に関連付けられたサービス アカウントのアドレス。
- 構成ファイルの平文シークレットごとに Secret Manager でシークレットを作成します。
- 構成ファイル内の各平文シークレットを、Secret Manager 内の対応するシークレットの参照に置き換えます。
- plaintext-secret: 平文シークレットに置き換えます。
- SECRET_NAME: シークレットのわかりやすい名前に置き換えます。
平文シークレットをマネージド シークレットに置き換える
Secret Manager と googlesecretmanager
プロバイダを使用して、構成ファイルで平文シークレットの使用を排除するには、次の操作を行います。
たとえば、http
エクスポータを使用している場合、構成ファイルには次のようなエントリが含まれる場合があります。
exporters: logging: loglevel: debug http: endpoint: "https://example.com/api/metrics" headers: X-API-Key: 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=-
前述のコマンドを実行する前に、次の変数を置き換えます。
新しいシークレットの完全修飾リソース名の形式は次のとおりです。VERSION は 1
です。
projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION
Secret Manager でのシークレットの保存、バージョニング、アクセスの詳細については、シークレットを作成するをご覧ください。
平文シークレットを置き換える
構成ファイルを更新するには、各平文シークレットを、次の例に示すように、googlesecretmanager
プロバイダとマネージド シークレットのリソース名への参照に置き換えます。
exporters: logging: loglevel: debug http: endpoint: "https://example.com/api/metrics" headers: X-API-Key: ${googlesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION}
詳細
googlesecretmanager
プロバイダの使用方法について詳しくは、opentelemetry-collector-contrib
リポジトリをご覧ください。