このガイドでは、仮想マシン(VM)インスタンスにインストールする Ops エージェントがテレメトリー データを Logging に送信することを保証する方法について説明します。
認可の概要
「認可」とは、認証されたクライアントが一連のリソースに対してどのような権限を持つかを決定するためのプロセスです。Google Cloud は、アプリケーションのデフォルト認証情報(ADC)を使用して、Compute Engine VM インスタンスで Ops エージェントを認可します。
Ops エージェントは、VM に接続されているサービス アカウントまたはサービス アカウント キーのいずれかを認証する ADC をサポートします。
- 接続されたサービス アカウントは、特定のリソース(VM など)に固有のサービス アカウントを意味します。サービス アカウントには固有の認証情報があります。ADC は VM のメタデータ サーバーを使用してサービスの認証情報を取得します。
- サービス アカウント キーは、プロジェクトのサービス アカウントで鍵ペアを認可するために使用する秘密鍵を、アクセス トークンの作成に使用できます。トークンを使用して ID を提供し、サービス アカウントに代わって Google Cloud APIs を操作できるようにします。
- Ops エージェントは、
gcloud auth
を使用した認可をサポートしていません。望ましくない動作を防ぐには、gcloud auth
を使用して作成した認証情報を取り消す必要があります。
秘密鍵にはローカル ストレージが必要であり、また、このストレージは侵害される可能性があるため、可能な限り、接続されたサービス アカウントを認証するように ADC を構成することをおすすめします。サービス アカウント キーの詳細については、サービス アカウント キーの管理に関するベスト プラクティスをご覧ください。
アクセス スコープを確認する
Compute Engine VM インスタンスは、作成時にアクセス スコープが割り当てられます。新しい Compute Engine VM には Ops エージェント用に十分なアクセス スコープがありますが、古い VM やスコープが変更された VM にはアクセス スコープがない場合があります。アクセス スコープとサービス アカウントの詳細については、Compute Engine ドキュメントの承認をご覧ください。
アクセス スコープを確認するには、次の操作を行います。
- 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] > [ログ書き込み]。
サービス アカウント キーを使用して認証する場合は、[キーのタイプ] として [JSON] を選択し、[作成] をクリックします。
[作成] をクリックすると、サービス アカウント キーを含むファイルがローカル システムにダウンロードされます。詳細については、サービス アカウント キーの作成と削除をご覧ください。
次に、接続されたサービス アカウント、またはサービス アカウントの秘密鍵のどちらを使用して認可するかに基づいて、サービス アカウントと設定を構成します。
既存のサービス アカウントのロールを確認して変更する
Google Cloud コンソールを使用して、既存のサービス アカウントにどのロールが付与されているかを確認し、不足している必要なロールを追加できます。
-
Google Cloud コンソールの [IAM] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [IAM & Admin] の結果を選択します。
必要に応じて、Google Cloud プロジェクトのプルダウン リストをクリックし、プロジェクトの名前を選択します。
IAM プリンシパル(ユーザーとサービス アカウント)のリストが表示されない場合は、[権限] タブを選択します。
[プリンシパル別に表示] リストで、サービス アカウントのエントリを見つけます。[ロール] 列に、サービス アカウントに付与されているロールが一覧表示されます。
サービス アカウントに Ops エージェントに必要なロールがない場合は、次の手順に沿って、サービス アカウントを作成するで説明されているロールを追加します。
- サービス アカウントのエントリで [edit 編集] をクリックします。
- [別のロールを追加] をクリックして、不足しているロールを追加します。
- [保存] をクリックします。
接続されたサービス アカウントを使用して認可する
サービス アカウントが接続されている Compute Engine VM インスタンスにインストールされている Ops エージェントを認可する手順は次のとおりです。
VM のアクセス スコープを確認します。
そのサービス アカウントに最小権限の IAM ロールを付与します。必要なロールについては、このページのサービス アカウントを作成するセクションをご覧ください。
エージェントが実行されている VM にサービス アカウントを接続します。
エージェントをまだインストールしていない場合は、インストールします。エージェントをインストールする方法については、エージェントのインストールをご覧ください。
サービス アカウント キーで認可する
サービス アカウントの秘密鍵を使用して VM インスタンスにインストールされている Ops エージェントを認可するには、次のようにします。
サービス アカウント キー ファイルをローカル システムから VM インスタンスに転送します。
ローカル システムのサービス アカウント キー ファイルを指す環境変数を作成します。次の例では、
CREDS
という変数を作成します。CREDS=~/Downloads/PROJECT-NAME-KEY-ID.json
次の表の手順を完了します。
Compute Engine
-
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
にのみ読み取りを許可します。また、サービス アカウント キー ファイルの場所を指すように環境変数
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"
-
これで、エージェントが必要とするサービス アカウント キー ファイルが VM インスタンスに存在するようになりました。次に、エージェントをインストールまたは再起動します。
エージェントをインストールする方法については、エージェントのインストールをご覧ください。
エージェントを再起動する方法については、エージェントの再起動をご覧ください。
サービス アカウント キー ファイルを再確認する場合は、秘密鍵認証情報を確認をご覧ください。
GOOGLE_APPLICATION_CREDENTIALS
を設定する
このセクションでは、エージェントのプロセスに表示できるように環境変数 GOOGLE_APPLICATION_CREDENTIALS
を設定する方法について説明します。
Linux
次の構成ファイルを編集します。ファイルが存在しない場合は作成します。
/etc/systemd/system.conf
構成ファイルに以下の内容を追加します。
DefaultEnvironment="GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE"
環境変数を再度読み込みます。
sudo systemctl daemon-reload
VM インスタンスで次のコマンドを実行して、エージェントを再起動します。
sudo systemctl restart google-cloud-ops-agent
Windows
PowerShell で管理者として次のコマンドを実行し、Ops エージェントで使用する
GOOGLE_APPLICATION_CREDENTIALS
システム環境変数を設定します。[Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PATH_TO_CREDENTIAL_FILE", "Machine")
VM インスタンスで次のコマンドを実行して、エージェントを再起動します。
Restart-Service -Name google-cloud-ops-agent -Force