Logging エージェントを認可する

このガイドでは、仮想マシン(VM)インスタンスにインストールする Logging エージェントがテレメトリー データを Logging に送信することを保証する方法について説明します。

認可の概要

これに対して、「承認」とは、認証されたクライアントが一連のリソースに対してどのような権限を持つかを決定するためのプロセスです。Google Cloud は、アプリケーションのデフォルト認証情報(ADC)を使用して、Compute Engine VM インスタンスで Logging エージェントを認可します。

Logging エージェントは、VM に接続されているサービス アカウントまたはサービス アカウント キーのいずれかを認証する ADC をサポートします。

  • 接続されたサービス アカウントは、特定のリソース(VM など)に固有のサービス アカウントを意味します。サービス アカウントには固有の認証情報があります。ADC は VM のメタデータ サーバーを使用してサービスの認証情報を取得します。
  • サービス アカウント キーは、プロジェクトのサービス アカウントで鍵ペアを認可するために使用する秘密鍵を、アクセス トークンの作成に使用できます。トークンを使用して ID を提供し、サービス アカウントに代わって Google Cloud APIs を操作できるようにします。

秘密鍵にはローカル ストレージが必要であり、また、このストレージは侵害される可能性があるため、可能な限り、接続されたサービス アカウントを認証するように ADC を構成することをおすすめします。サービス アカウント キーの詳細については、サービス アカウント キーの管理に関するベスト プラクティスをご覧ください。

AWS EC2 VM インスタンスの場合、Logging エージェントはサービス アカウント キー方式を使用した認証のみをサポートします。

準備

次のいずれかに該当する場合は、このガイドをお読みください。

  • 非常に古い Compute Engine インスタンスを実行しているか、Compute Engine インスタンスのアクセス スコープまたはサービス アカウントの設定を変更した場合は、エージェントをインストールする前にこのガイドの手順を完了する必要があります。これらの VM には、必要なサービス アカウント キー ファイルがない可能性があります。インスタンスのアクセス スコープとサービス アカウントの設定を確認する方法については、Compute Engine の認証情報を確認するをご覧ください。

    新しく作成された Compute Engine VM インスタンスには、エージェントの実行に必要なアクセス スコープとサービス アカウントが設定されています。

  • Amazon EC2(AWS VC2)VM インスタンスを実行している場合は、エージェントをインストールする前に次の操作を行います。

    1. EC2 インスタンスを持つ AWS アカウントの AWS ホスティング プロジェクトを特定します。ホスティング プロジェクトは、EC2 インスタンスの指標とログを AWS アカウントに保存することを唯一の目的とする Google Cloud プロジェクトです。

      AWS アカウントに AWS コネクタ プロジェクトがある場合、コネクタ プロジェクトは AWS ホスティング プロジェクトです。

      アカウントに AWS コネクタ プロジェクトがない場合は、既存の Google Cloud プロジェクトを検索して、アカウントの AWS ホスティング プロジェクトを以前に作成したかどうかを確認します。ホスティング プロジェクトが見つかった場合は、それを使用します。

      アカウントの AWS ホスティング プロジェクトが見つからない場合は、ホスティング プロジェクトとして機能する Google Cloud プロジェクトを作成することをおすすめします。複数の AWS アカウントに EC2 インスタンスがある場合は、アカウントごとに Google Cloud プロジェクトを作成します。また、これらのプロジェクトには命名規則を使用するか、プロジェクト ラベルを使用して、ホスティング プロジェクトを識別できるようにすることをおすすめします。既存の Google Cloud プロジェクトを再利用することはおすすめしません(特に Google Cloud リソースが含まれている場合)。

    2. サービス アカウント キーファイルを使用してエージェントを認可する手順を行います。

アクセス スコープを確認するには、次の操作を行います。

  1. Compute Engine インスタンスで次のコマンドを実行して、アクセス スコープをクエリします。
    curl --silent --connect-timeout 1 -f -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scopes
  2. コマンド出力でアクセス スコープ https://www.googleapis.com/auth/cloud-platform がリストされている場合、認証情報は十分です。

    https://www.googleapis.com/auth/cloud-platform がリストにない場合、次の「logging」と「monitoring」のペアから 1 つずつ、2 つのアクセス スコープが必要です。

    • https://www.googleapis.com/auth/logging.write または
      https://www.googleapis.com/auth/logging.admin
    • https://www.googleapis.com/auth/monitoring.write または
      https://www.googleapis.com/auth/monitoring.admin

アクセス スコープを変更するには、次の操作を行います。

  1. Google Cloud コンソールのナビゲーション パネルで、[Compute Engine] を選択してから、[VM インスタンス] を選択します。

    [VM インスタンス] に移動

  2. 必要に応じて、Google Cloud プロジェクトのプルダウン リストをクリックし、プロジェクトの名前を選択します。
  3. ナビゲーション メニューから [VM インスタンス] を選択し、[インスタンス] タブを選択して VM の名前を選択します。
  4. 停止アイコン をクリックして VM をシャットダウンします。
  5. VM が停止したら、編集アイコン をクリックします。
  6. ページの [ID と API へのアクセス] セクションで [アクセス スコープ] を見つけて、[API ごとにアクセス権を設定] を選択します。
  7. [Stackdriver Logging API] と [Stackdriver Monitoring API] エントリの場合、[書き込みのみ] を選択します。
  8. [保存] をクリックしてから、開始 / 再開アイコン をクリックして VM を再起動します。

サービス アカウントを使用する

「認証」とは、クライアントの身元を判別するためのプロセスです。認証にはサービス アカウントを使用することをおすすめします。これは、個人ではなく、アプリケーションまたはワークロードで通常使用される特別な種類のアカウントです。詳しくは、サービス アカウントの概要をご覧ください。

サービス アカウントは、コードが実行される場所(Compute Engine、App Engine、オンプレミス)に関係なく、認証に使用できます。詳細については、Google での認証をご覧ください。

このセクションでは、新しいサービス アカウントを作成して、それを必要なロールを付与する方法と、既存のサービス アカウントに必要なロールがない場合にそれを更新する方法について説明します。

サービス アカウントを作成する

サービス アカウントを作成するには、次の情報を使用してサービス アカウントの作成手順を完了します。

  • サービス アカウントを作成する Google Cloud プロジェクトを選択します。

    • Compute Engine インスタンスの場合は、インスタンスを作成したプロジェクトを選択します。

    • Amazon EC2 インスタンスの場合は、AWS ホスティング プロジェクトを選択します。

  • [ロール] プルダウン メニューで次のロールを選択します。

    • [ロギング] > [ログ書き込み]。これにより、Logging エージェントがログを取り込むように認可されます。
    • [モニタリング] > [モニタリング指標の書き込み]。これにより、Logging エージェントが独自の健全性の指標を取り込むように認可されます。
  • サービス アカウント キーを使用して認証する場合は、[キーのタイプ] として [JSON] を選択し、[作成] をクリックします。

    [作成] をクリックすると、サービス アカウント キーを含むファイルがローカル システムにダウンロードされます。詳細については、サービス アカウント キーの作成と削除をご覧ください。

次に、接続されたサービス アカウント、またはサービス アカウントの秘密鍵のどちらを使用して認可するかに基づいて、サービス アカウントと設定を構成します。

既存のサービス アカウントのロールを確認して変更する

Google Cloud コンソールを使用して、既存のサービス アカウントにどのロールが付与されているかを確認し、不足している必要なロールを追加できます。

  1. Google Cloud コンソールのナビゲーション パネルで [IAM] を選択します。

    [IAM] に移動

  2. 必要に応じて、Google Cloud プロジェクトのプルダウン リストをクリックし、プロジェクトの名前を選択します。

  3. IAM プリンシパル(ユーザーとサービス アカウント)のリストが表示されない場合は、[権限] タブを選択します。

  4. [プリンシパル別に表示] リストで、サービス アカウントのエントリを見つけます。[ロール] 列に、サービス アカウントに付与されているロールが表示されます。

  5. サービス アカウントに Logging エージェントに必要なロールがない場合は、次の手順を使用してサービス アカウントを作成するで説明されているロールを追加します。

    1. サービス アカウントのエントリで [編集] をクリックします。
    2. [別のロールを追加] をクリックして、不足しているロールを追加します。
    3. [保存] をクリックします。

接続されたサービス アカウントを使用して認可する

サービス アカウントが接続されている Compute Engine VM インスタンスにインストールされている Logging エージェントを認可する手順は次のとおりです。

  1. VM のアクセス スコープを確認します。

  2. そのサービス アカウントに最小権限の IAM ロールを付与します。必要なロールについては、このページのサービス アカウントを作成するセクションをご覧ください。

  3. エージェントが実行されている VM にサービス アカウントを接続します。

  4. エージェントをまだインストールしていない場合は、インストールします。エージェントをインストールする方法については、エージェントのインストールをご覧ください。

サービス アカウントキーで認証する

サービス アカウントの秘密鍵を使用して VM インスタンスにインストールされている Logging エージェントを認可するには、次のようにします。

  1. サービス アカウント キーファイルをローカル システムから VM インスタンスに転送します。

    1. ローカル システムのサービス アカウント キー ファイルを指す環境変数を作成します。次の例では、CREDS という変数を作成します。

      CREDS=~/Downloads/PROJECT-NAME-KEY-ID.json
      
    2. 次の表の手順を完了します。

      Compute Engine

      1. Google Cloud コンソールのナビゲーション パネルで、[Compute Engine] を選択してから、[VM インスタンス] を選択します。

        [VM インスタンス] に移動

        VM の INSTANCE_NAMEINSTANCE_ZONE を特定します。

      2. ローカル システムで Google Cloud CLI コマンドを実行して、ローカル システムから VM インスタンスにキーファイルをコピーします。

        REMOTE_USER="$USER"
        INSTANCE="INSTANCE_NAME"
        ZONE="INSTANCE_ZONE"
        gcloud compute scp "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json" --zone "$ZONE"
        
      3. Compute Engine インスタンスで、サービス アカウント キー ファイルを一時的な場所から永続的な場所に移動します。Linux の場合、サービス アカウント キー ファイルは root にのみ読み取りを許可します。

        エージェントが想定するキーファイルの場所は次のとおりです。

        • Linux VM: /etc/google/auth/application_default_credentials.json
        • Windows VM: C:\ProgramData\Google\Auth\application_default_credentials.json
        • Linux VM と Windows VM: 環境変数 GOOGLE_APPLICATION_CREDENTIALS に格納する任意の場所。エージェントのプロセスから認識できる必要があります。構成情報については、GOOGLE_APPLICATION_CREDENTIALS を設定するをご覧ください。

        たとえば、Linux でサービス アカウント キー ファイルをデフォルトの場所に移動する次のスクリプトを実行すると、適切な権限を設定できます。

        CREDENTIALS_FILE_LOCATION="/etc/google/auth/application_default_credentials.json"
        sudo mkdir -p /etc/google/auth
        sudo mv "$HOME/temp.json" "$CREDENTIALS_FILE_LOCATION"
        sudo chown root:root "$CREDENTIALS_FILE_LOCATION"
        sudo chmod 0400 "$CREDENTIALS_FILE_LOCATION"
        

      Amazon EC2

      1. VM の YOUR-INSTANCE'S-IDYOUR-INSTANCE'S-AWS-REGION を特定します。

      2. ローカル システムで、scp を使用してサービス アカウント キー ファイルをローカル システムから VM インスタンスにコピーします。

        KEY="YOUR-SSH-KEY-PAIR-FILE"
        INSTANCE="ec2-YOUR-INSTANCE'S-ID.YOUR-INSTANCE'S-AWS-REGION.compute.amazonaws.com"
        # The remote user depends on the installed OS: ec2-user, ubuntu, root, etc.
        REMOTE_USER="EC2-USER"
        scp -i "$KEY" "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json"
        

        INSTANCE 環境変数の値は、EC2 インスタンスが us-east-1 リージョンにないことを前提としています。インスタンスが us-east-1 リージョンにあるときに INSTANCE 変数を定義する方法については、Amazon で定義されている命名規則をご覧ください。

      3. EC2 インスタンスで、サービス アカウント キー ファイルを一時的な場所から次のいずれかの場所に移動します。Linux の場合、サービス アカウント キー ファイルは root でのみ読み取り可能にします。

        エージェントが想定するキーファイルの場所は次のとおりです。

        • Linux VM: /etc/google/auth/application_default_credentials.json

        • Windows VM: C:\ProgramData\Google\Auth\application_default_credentials.json

        • Linux VM と Windows VM: 環境変数 GOOGLE_APPLICATION_CREDENTIALS に格納する任意の場所。エージェントのプロセスから認識できる必要があります。構成情報については、GOOGLE_APPLICATION_CREDENTIALS を設定するをご覧ください。

        たとえば、Linux でサービス アカウント キー ファイルをデフォルトの場所に移動する次のスクリプトを実行すると、適切な権限を設定できます。

        CREDENTIALS_FILE_LOCATION="/etc/google/auth/application_default_credentials.json"
        sudo mkdir -p /etc/google/auth
        sudo mv "$HOME/temp.json" "$CREDENTIALS_FILE_LOCATION"
        sudo chown root:root "$CREDENTIALS_FILE_LOCATION"
        sudo chmod 0400 "$CREDENTIALS_FILE_LOCATION"
        

  2. これで、エージェントが必要とするサービス アカウント キー ファイルが VM インスタンスに存在するようになりました。次に、エージェントをインストールまたは再起動します。

GOOGLE_APPLICATION_CREDENTIALS を設定する

このセクションでは、エージェントのプロセスに表示できるように環境変数 GOOGLE_APPLICATION_CREDENTIALS を設定する方法について説明します。

Linux

  1. 次の構成ファイルを編集します。ファイルが存在しない場合は作成します。

    /etc/default/google-fluentd
    
  2. 構成ファイルに以下の内容を追加します。

    GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE
    
  3. VM インスタンスで次のコマンドを実行して、エージェントを再起動します。

    sudo service google-fluentd restart
    

Windows

  1. PowerShell で管理者として次のコマンドを実行し、Ops エージェントで使用する GOOGLE_APPLICATION_CREDENTIALS システム環境変数を設定します。

    [Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PATH_TO_CREDENTIAL_FILE", "Machine")
    
  2. VM インスタンスで次のコマンドを実行して、エージェントを再起動します。

    Restart-Service -Name StackdriverLogging