このガイドでは、仮想マシン(VM)インスタンスにインストールした Logging エージェントに Google Cloud Observability へのテレメトリー データの送信を認可する方法について説明します。
認可の概要
これに対して、「承認」とは、認証されたクライアントが一連のリソースに対してどのような権限を持つかを決定するためのプロセスです。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 インスタンスを実行している場合は、エージェントをインストールする前に次の操作を行います。
EC2 インスタンスを持つ AWS アカウントの AWS ホスティング プロジェクトを特定します。ホスティング プロジェクトは、EC2 インスタンスの指標とログを AWS アカウントに保存することのみを目的とする Google Cloud プロジェクトです。
アカウントの AWS ホスティング プロジェクトが見つからない場合は、ホスティング プロジェクトとして機能する Google Cloud プロジェクトを作成することをおすすめします。複数の AWS アカウントに EC2 インスタンスがある場合は、アカウントごとに Google Cloud プロジェクトを作成します。また、これらのプロジェクトには命名規則を使用するか、プロジェクト ラベルを使用して、ホスティング プロジェクトを識別できるようにすることをおすすめします。既存の Google Cloud プロジェクトを再利用することはおすすめしません。特に、Google Cloud リソースが含まれている場合はなおさらです。
サービス アカウント キー ファイルを使用してエージェントを認可する手順を完了します。
アクセス スコープを確認するには、次の操作を行います。
- 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 インスタンスの場合は、インスタンスを作成したプロジェクトを選択します。
Amazon EC2 インスタンスの場合は、[AWS ホスティング プロジェクト] を選択します。
[ロール] プルダウン メニューで次のロールを選択します。
- [ロギング] > [ログ書き込み]。これにより、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
次の表の手順を完了します。
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
でのみ読み取り可能にします。エージェントがキーファイルを期待する場所は次のとおりです。
- 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:
Amazon EC2
VM の YOUR-INSTANCE'S-ID と YOUR-INSTANCE'S-AWS-REGION を特定します。
ローカル システムで、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 で定義されている命名規則をご覧ください。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"
-
これで、エージェントが必要とするサービス アカウント キーファイルが 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
ウィンドウ
PowerShell で管理者として次のコマンドを実行して、Ops エージェントで使用する
GOOGLE_APPLICATION_CREDENTIALS
システム環境変数を設定します。[Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PATH_TO_CREDENTIAL_FILE", "Machine")
VM インスタンスで次のコマンドを実行して、エージェントを再起動します。
Restart-Service -Name StackdriverLogging