環境変数内のシークレットを Security Command Center に報告する

このページでは、機密データ保護の検出サービスを使用して、Cloud Functions の環境変数にシークレットが存在するかどうかを確認する方法について説明します。機密データ保護により、検出結果が Security Command Center に脆弱性として報告されます。

Security Command Center の概要

Security Command Center は、脆弱性と脅威の報告を一元的に行う Google Cloud のサービスです。Security Command Center では、構成ミス、脆弱性、観測、脅威を特定することで、セキュリティ体制を強化できます。また、検出結果の調査と修正に関する推奨事項も示します。

環境変数内のシークレットをスキャンする理由

環境変数は暗号化されていないため、パスワードなどのシークレットを環境変数に格納することは安全ではありません。これらの値が取得され、ログなどのさまざまなシステムで公開されるおそれがあります。Secret Manager を使用してシークレットを保存することをおすすめします。詳細については、Cloud Functions のドキュメントのシークレットの構成をご覧ください。

仕組み

シークレットの検出を行うには、組織レベルまたはプロジェクト レベルで検出スキャン構成を作成します。選択したスコープ内で、機密データ保護により Cloud Functions が定期的にスキャンされ、ビルドとランタイムの環境変数内にシークレットがあるか確認します。

環境変数にシークレットが存在する場合、機密データ保護によって Secrets in environment variables の脆弱性検出が Security Command Center に送信されます。データ プロファイルは生成されません。検出結果は Security Command Center 経由でのみ利用できます。

機密データ保護は、関数ごとに最大 1 つの検出結果を生成します。たとえば、同じ関数で 2 つの環境変数内にシークレットが見つかった場合、Security Command Center には 1 つの検出結果のみが生成されます。

Security Command Center では、次の操作を行うと Secrets in environment variables の検出結果を表示できます。

Google Cloud コンソールの Security Command Center 検出結果リスト内にある生成された検出結果

次の JSON は、Secrets in environment variables の検出結果の例です。この例では、本機能に関連するフィールドのみを示しています。フィールドの包括的なリストは提供されません。

環境変数内のシークレット

{
  "finding": {
    "canonicalName": "projects/PROJECT_NUMBER/sources/SOURCE_ID/findings/FINDING_ID",
    "category": "SECRETS_IN_ENVIRONMENT_VARIABLES",
    "compliances": [
      {
        "standard": "cis",
        "version": "1.3",
        "ids": [
          "1.18"
        ]
      }
    ],
    "createTime": "DATE_TIME",
    "description": "The affected resource is storing credentials or other secret information in its environment variables. This is a security vulnerability because environment variables are stored unencrypted, and accessible to all users who have access to the code.",
    "eventTime": "DATE_TIME",
    "findingClass": "VULNERABILITY",
    "findingProviderId": "organizations/ORGANIZATION_ID/firstPartyFindingProviders/dlp",
    "mute": "MUTE_STATUS",
    "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
    "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
    "parentDisplayName": "Sensitive Data Protection",
    "resourceName": "//cloudfunctions.googleapis.com/projects/PROJECT_ID/locations/REGION/functions/FUNCTION_ID",
  },
  "resource": {
    "name": "//cloudfunctions.googleapis.com/projects/PROJECT_ID/locations/REGION/functions/FUNCTION_ID",
    "display_name": "projects/PROJECT_ID/locations/REGION/functions/FUNCTION_ID",
    "type": "google.cloudfunctions.CloudFunction",
    "project_name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "project_display_name": "PROJECT_DISPLAY_NAME",
    "parent_name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "parent_display_name": "PARENT_DISPLAY_NAME"
  }
}
    

検出生成のレイテンシ

機密データ保護でシークレット検出を有効にしてから、環境変数の初期スキャンが完了するまでに最大 12 時間かかることがあります。その後、機密データ保護は 24 時間ごとに環境変数をスキャンします。実際には、スキャンはそれよりも頻繁に実行される場合があります。

報告対象となるシークレットの種類

シークレットの例には、パスワード、認証トークン、Google Cloud 認証情報があります。本機能で機密データ保護のスキャン対象となるシークレット タイプの完全なリストについては、認証情報とシークレットをご覧ください。

サポートされているリソース

シークレットを検出するために、機密データ保護は Cloud Functions(第 1 世代と第 2 世代)をサポートしています。

料金

本機能では、機密データ保護は無料で利用できます。サービスティア(スタンダードまたはプレミアム)によっては、Security Command Center の料金が適用される場合があります。機密データ保護は、スタンダード ティアとプレミアム ティアの両方で Security Command Center と連携します。

データ所在地

スキャン構成を初めて作成するときに、機密データの保護がそれを保存する場所を指定します。それ以降に作成するスキャン構成は、すべて、同じリージョンに保存されます。機密データ保護は、スキャン構成が保存されているリージョンに Cloud Functions メタデータをエクスポートしますが、関数自体はエクスポートされません。

機密データ保護が環境変数内でシークレットを検出すると、検出結果は Security Command Center に送信され、データ処理プロセスの対象となります。

必要な IAM のロール

シークレットの検出を実行するには、データのプロファイリングに必須となる Identity and Access Management ロールが必要です。

さらに、Security Command Center の検出結果を操作するには、適切なロールが必要です。詳細については、Security Command Center ドキュメントの組織レベルでのアクティベーションのための IAM をご覧ください。

準備

  1. 組織の Security Command Center のアクティベーション レベルを確認します。Security Command Center にデータ プロファイルを送信するには、スタンダード ティアまたはプレミアム ティアの組織レベルで Security Command Center を有効にしている必要があります。詳細については、組織で Security Command Center を有効にするをご覧ください。

    プロジェクト レベルでのみ Security Command Center が有効になっている場合、機密データの保護からの検出結果は Security Command Center に表示されません。

  2. Security Command Center で、機密データ保護が統合サービスとして有効になっていることを確認します。詳細については、Google Cloud 統合サービスを追加するをご覧ください。

組織レベルでシークレットの検出を構成する

組織全体でシークレット検出を有効にする場合は、次の手順を行います。プロジェクト レベルの検出については、プロジェクト レベルでシークレット検出を構成するをご覧ください。

組織管理者(roles/resourcemanager.organizationAdmin)またはセキュリティ管理者(roles/iam.securityAdmin)のロールを付与されていなくても、スキャン構成を作成できます。ただし、スキャン構成を作成した後、これらのいずれかのロールを持つユーザーが、サービス エージェントに検出のアクセス権を付与する必要があります。

  1. [スキャン構成の作成] ページに移動します。

    [スキャン構成の作成] に移動

  2. 組織に移動します。ツールバーで、プロジェクト セレクタをクリックして組織を選択します。

    このページの各ステップを行った後で、[続行] をクリックします。

  3. [検出タイプの選択] で [シークレット / 認証情報の脆弱性] を選択します。

  4. [スコープを選択] で、組織全体をスキャンするかどうかを選択します。

  5. [サービス エージェント コンテナと課金の管理] で、サービス エージェント コンテナとして使用するプロジェクトを指定します。機密データの保護で新しいプロジェクトを自動的に作成することも、既存のプロジェクトを選択することもできます。

    • サービス エージェント コンテナとして使用するプロジェクトがない場合は、[サービス エージェント コンテナとして新しいプロジェクトを作成] を選択します。機密データ保護によって、DLP サービス エージェント コンテナという新しいプロジェクトが作成されます。このプロジェクト内のサービス エージェントは、機密データ保護やその他の API への認証に使用されます。検出に関係のないオペレーションを含め、このプロジェクトに関連するすべての課金対象オペレーションに対して課金されるアカウントを選択するように求められます。

      プロジェクトの作成に必要な権限がない場合、[サービス エージェント コンテナとして新しいプロジェクトを作成する] オプションは無効になります。この場合は、既存のプロジェクトを選択するか、Google Cloud 管理者にプロジェクト作成者(roles/resourcemanager.projectCreator)のロールを付与してもらうよう依頼する必要があります。

    • 既存のサービス エージェント コンテナを再利用する場合は、[既存のサービス エージェント コンテナを選択する] を選択します。次に、[参照] をクリックして、サービス エージェント コンテナのプロジェクト ID を選択します。

  6. [構成の保存ロケーションを設定する] で、このスキャン構成を保存するリージョンを選択します。後で作成するすべてのスキャン構成も、このロケーションに保存されます。データ所在地に関する検討事項については、このページのデータ所在地をご覧ください。

  7. 省略可: スキャン構成を作成した直後にスキャンを開始しない場合は、[一時停止モードでスキャンを作成する] を選択します。

    この構成は、次のような場合に利用できます。

  8. [作成] をクリックします。

機密データ保護は、スキャン構成を作成するか、一時停止した構成を再開するとすぐに Cloud Functions 環境変数のスキャンを開始します。検出結果が Security Command Center に表示されるまでの時間については、このページの検出生成のレイテンシをご覧ください。

組織管理者(roles/resourcemanager.organizationAdmin)またはセキュリティ管理者(roles/iam.securityAdmin)のいずれのロールも保持していない場合、検出開始前にどちらかのロールを持つユーザーが、サービス エージェントに検出のアクセス権を付与する必要があります。

プロジェクト レベルでシークレットの検出を構成する

単一プロジェクトでシークレットの検出を有効にする場合は、次の手順を行います。組織レベルの検出については、組織レベルでシークレットの検出を構成するをご覧ください。

  1. [スキャン構成の作成] ページに移動します。

    [スキャン構成の作成] に移動

  2. プロジェクトに移動します。ツールバーで、プロジェクト セレクタをクリックしてプロジェクトを選択します。

    このページの各ステップを行った後で、[続行] をクリックします。

  3. [検出タイプの選択] で [シークレット / 認証情報の脆弱性] を選択します。

  4. [スコープを選択] で、[プロジェクト全体をスキャン] が選択されていることを確認します。こちらが選択されていない場合は、プロジェクト ビューが表示されていることを確認します。

  5. [構成の保存ロケーションを設定する] で、このスキャン構成を保存するリージョンを選択します。後で作成するすべてのスキャン構成も、このロケーションに保存されます。データ所在地に関する検討事項については、このページのデータ所在地をご覧ください。

  6. [作成] をクリックします。

機密データ保護は、スキャン構成を作成するか、一時停止した構成を再開するとすぐに Cloud Functions 環境変数のスキャンを開始します。検出結果が Security Command Center に表示されるまでの時間については、このページの検出生成のレイテンシをご覧ください。

Secrets in environment variables 検出結果に対するクエリ

Security Command Center で Secrets in environment variables の検出結果を見つけるために使用できるクエリの例を次に示します。これらのクエリは、[クエリエディタ] フィールドに入力できます。クエリエディタの詳細については、Security Command Center ダッシュボードで検出結果クエリを編集するをご覧ください。

すべての Secrets in environment variables 検出結果を一覧表示する

state="ACTIVE"
AND NOT mute="MUTED"
AND category="SECRETS_IN_ENVIRONMENT_VARIABLES"

特定プロジェクトのすべての Secrets in environment variables 検出結果を一覧表示する

state="ACTIVE"
AND NOT mute="MUTED"
AND category="SECRETS_IN_ENVIRONMENT_VARIABLES"
AND resource.project_name="//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER"

次のように置き換えます。

  • PROJECT_NUMBER: クエリを実行するプロジェクトの数値 ID