このガイドでは、仮想マシン(VM)インスタンスにインストールした Logging エージェントに Google Cloud Observability へのテレメトリー データの送信を認可する方法について説明します。
認可の概要
「認可」とは、認証されたクライアントが一連のリソースに対してどのような権限を持つかを決定するためのプロセスです。 Google Cloud は、アプリケーションのデフォルト認証情報(ADC)を使用して、Compute Engine VM インスタンスで Logging エージェントを認可します。
Logging エージェントは、VM に接続されているサービス アカウントまたはサービス アカウント キーのいずれかを認証する ADC をサポートします。
- 接続されたサービス アカウントは、特定のリソース(VM など)に固有のサービス アカウントを意味します。サービス アカウントには固有の認証情報があります。ADC は VM のメタデータ サーバーを使用してサービスの認証情報を取得します。
- サービス アカウント キーは、プロジェクトのサービス アカウントで鍵ペアを認可するために使用する秘密鍵を、アクセス トークンの作成に使用できます。トークンを使用して ID を提供し、サービス アカウントに代わって Google Cloud APIs を操作できるようにします。
秘密鍵にはローカル ストレージが必要であり、このストレージは侵害される可能性があるため、可能な限り、接続されたサービス アカウントを使用して認証するように ADC を構成することをおすすめします。サービス アカウント キーの詳細については、サービス アカウント キーの管理に関するベスト プラクティスをご覧ください。
始める前に
次のいずれかに該当する場合は、このガイドをお読みください。
- 非常に古い Compute Engine インスタンスを実行しているか、Compute Engine インスタンスのアクセス スコープまたはサービス アカウントの設定を変更した場合は、エージェントをインストールする前にこのガイドの手順を完了する必要があります。これらの VM には、必要なサービス アカウント キー ファイルがない可能性があります。インスタンスのアクセス スコープとサービス アカウントの設定を確認する方法については、Compute Engine の認証情報を確認するをご覧ください。 - 新しく作成された Compute Engine VM インスタンスには、エージェントの実行に必要なアクセス スコープとサービス アカウントが設定されています。 
アクセス スコープを確認するには、次の操作を行います。
- Compute Engine インスタンスで次のコマンドを実行して、アクセス スコープをクエリします。curl --silent --connect-timeout 1 -f -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scopes 
- コマンド出力でアクセス スコープ - 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
 
アクセス スコープを変更するには、次の操作を行います。
- 
Google Cloud コンソールで [VM インスタンス] ページに移動します。 検索バーを使用してこのページを検索する場合は、小見出しが [Compute Engine] の結果を選択します。 
- 必要に応じて、 Google Cloud プロジェクトのプルダウン リストをクリックし、プロジェクトの名前を選択します。
- ナビゲーション メニューから [VM インスタンス] を選択し、[インスタンス] タブを選択して VM の名前を選択します。
- [stop 停止] をクリックして VM をシャットダウンします。
- VM が停止したら、[edit 編集] をクリックします。
- ページの [ID と API へのアクセス] セクションで [アクセス スコープ] を見つけて、[API ごとにアクセス権を設定] を選択します。
- [Stackdriver Logging API] と [Stackdriver Monitoring API] エントリの場合、[書き込みのみ] を選択します。
- [保存] をクリックしてから、開始 / 再開アイコン play_arrow をクリックして VM を再起動します。
サービス アカウントを使用する
「認証」とは、クライアントの身元を判別するためのプロセスです。認証にはサービス アカウントを使用することをおすすめします。これは、個人ではなく、アプリケーションまたはワークロードで通常使用される特別な種類のアカウントです。詳しくは、サービス アカウントの概要をご覧ください。
サービス アカウントは、コードが実行される場所(Compute Engine、App Engine、オンプレミス)に関係なく、認証に使用できます。詳細については、Google での認証をご覧ください。
このセクションでは、新しいサービス アカウントを作成して、それを必要なロールを付与する方法と、既存のサービス アカウントに必要なロールがない場合にそれを更新する方法について説明します。
サービス アカウントを作成する
サービス アカウントを作成するには、次の情報を使用してサービス アカウントの作成手順を完了します。
- サービス アカウントを作成する Google Cloud プロジェクトを選択します。 - Compute Engine インスタンスの場合は、インスタンスを作成したプロジェクトを選択します。
 
- [ロール] プルダウン メニューで次のロールを選択します。 - [ロギング] > [ログ書き込み]。これにより、Logging エージェントがログを取り込むように認可されます。
- [モニタリング] > [モニタリング指標の書き込み]。これにより、Logging エージェントが独自の健全性の指標を取り込むように認可されます。
 
- サービス アカウント キーを使用して認証する場合は、[キーのタイプ] として [JSON] を選択し、[作成] をクリックします。 - [作成] をクリックすると、サービス アカウント キーを含むファイルがローカル システムにダウンロードされます。詳細については、サービス アカウント キーの作成と削除をご覧ください。 
次に、接続されたサービス アカウント、またはサービス アカウントの秘密鍵のどちらを使用して認可するかに基づいて、サービス アカウントと設定を構成します。
既存のサービス アカウントのロールを確認して変更する
Google Cloud コンソールを使用して、既存のサービス アカウントにどのロールが付与されているかを確認し、不足している必要なロールを追加できます。
- 
Google Cloud コンソールで [IAM] ページに移動します。 検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。 
- 必要に応じて、 Google Cloud プロジェクトのプルダウン リストをクリックし、プロジェクトの名前を選択します。 
- IAM プリンシパル(ユーザーとサービス アカウント)のリストが表示されない場合は、[権限] タブを選択します。 
- [プリンシパル別に表示] リストで、サービス アカウントのエントリを見つけます。[ロール] 列に、サービス アカウントに付与されているロールが一覧表示されます。 
- サービス アカウントに Logging エージェントに必要なロールがない場合は、次の手順に沿って、サービス アカウントを作成するで説明されているロールを追加します。 - サービス アカウントのエントリで [edit 編集] をクリックします。
- [別のロールを追加] をクリックして、不足しているロールを追加します。
- [保存] をクリックします。
 
接続されたサービス アカウントを使用して認可する
サービス アカウントが接続されている Compute Engine VM インスタンスにインストールされている Logging エージェントを認可する手順は次のとおりです。
- VM のアクセス スコープを確認します。 
- そのサービス アカウントに最小権限の IAM ロールを付与します。必要なロールについては、このページのサービス アカウントを作成するセクションをご覧ください。 
- エージェントが実行されている VM にサービス アカウントを接続します。 
- エージェントをまだインストールしていない場合は、インストールします。エージェントをインストールする方法については、エージェントのインストールをご覧ください。 
サービス アカウント キーで認可する
サービス アカウントの秘密鍵を使用して VM インスタンスにインストールされている Logging エージェントを認可するには、次のようにします。
- サービス アカウント キー ファイルをローカル システムから VM インスタンスに転送します。 - ローカル システムのサービス アカウント キー ファイルを指す環境変数を作成します。次の例では、 - CREDSという変数を作成します。- CREDS=~/Downloads/PROJECT-NAME-KEY-ID.json
- 
Google Cloud コンソールで [VM インスタンス] ページに移動します。 検索バーを使用してこのページを検索する場合は、小見出しが [Compute Engine] の結果を選択します。 VM の INSTANCE_NAME と INSTANCE_ZONE を特定します。 
- ローカル システムで Google Cloud CLI コマンドを実行して、ローカル システムから VM インスタンスにキーファイルをコピーします。 - REMOTE_USER="$USER" INSTANCE="INSTANCE_NAME" ZONE="INSTANCE_ZONE" gcloud compute scp "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json" --zone "$ZONE"
- 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"
- Linux VM: 
 
- これで、エージェントが必要とするサービス アカウント キー ファイルが VM インスタンスに存在するようになりました。次に、エージェントをインストールまたは再起動します。 - エージェントをインストールする方法については、エージェントのインストールをご覧ください。 
- エージェントを再起動する方法については、エージェントの再起動をご覧ください。 
- サービス アカウント キーファイルを再確認する場合は、[秘密鍵認証情報を確認] をご覧ください。 
 
GOOGLE_APPLICATION_CREDENTIALS を設定する
このセクションでは、エージェントのプロセスに表示できるように環境変数 GOOGLE_APPLICATION_CREDENTIALS を設定する方法について説明します。
Linux
- 次の構成ファイルを編集します。ファイルが存在しない場合は作成します。 - /etc/default/google-fluentd
- 構成ファイルに以下の内容を追加します。 - GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE
- VM インスタンスで次のコマンドを実行して、エージェントを再起動します。 - sudo service google-fluentd restart
Windows
- PowerShell で管理者として次のコマンドを実行して、Ops エージェントで使用する - GOOGLE_APPLICATION_CREDENTIALSシステム環境変数を設定します。- [Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PATH_TO_CREDENTIAL_FILE", "Machine")
- VM インスタンスで次のコマンドを実行して、エージェントを再起動します。 - Restart-Service -Name StackdriverLogging