エージェント ポリシーの管理

エージェント ポリシーを使用すると、ユーザーが指定した条件に一致する一連の VM で Google Cloud のオペレーション スイート エージェントのインストールとメンテナンスを自動的に行うことができます。1 つのコマンドで Google Cloud プロジェクトのポリシーを作成し、その Cloud プロジェクトに関連付けられた既存の VM と新しい VM を管理できます。これにより、すべてのエージェントのインストールとオプションの自動アップグレードを適切に行うことができます。

サポートされているオペレーティング システム

次のオペレーティング システムを使用して、Compute Engine インスタンスにエージェント ポリシーを適用できます。

Logging agent は、エージェント タイプ logging のポリシーにマッピングされます。Monitoring agent は、エージェント タイプ metrics のポリシーにマッピングされます。Ops Agent は、エージェント タイプ ops-agent のポリシーにマッピングされます。

オペレーティング システム Logging エージェント Monitoring エージェント Ops エージェント
CentOS 7
CentOS 8
Rocky Linux 8
RHEL 6
RHEL 7:
rhel-7、rhel-7-6-sap-ha、rhel-7-7-sap-ha、rhel-7-9-sap-ha
1
RHEL 8:
rhel-8、rhel-8-1-sap-ha、rhel-8-2-sap-ha、rhel-8-4-sap-ha
1
Debian 9(Stretch)
Debian 10(Buster)
Debian 11(Bullseye)
Ubuntu LTS 18.04(Bionic Beaver):
ubuntu-1804-lts、ubuntu-minimal-1804-lts
Ubuntu LTS 20.04(Focal Fossa):
ubuntu-2004-lts、ubuntu-minimal-2004-lts
SLES 12:
sles-12、sles-12-sp3-sap、sles-12-sp4-sap、sles-12-sp5-sap
SLES 15:
sles-15、sles-15-sap、sles-15-sp1-sap、sles-15-sp2-sap
OpenSUSE Leap 15:
opensuse-leap(opensuse-leap-15-2-*、opensuse-leap-15-3-*)
Windows Server:
2012 R2、2016、2019、Core 2012 R2、Core 2016、Core 2019

1 Monitoring エージェントは、rhel-7-9-sap-harhel-8-2-sap-ha または rhel-8-4-sap-ha ではサポートされていません。

エージェント ポリシーの作成

Google Cloud CLI を使用してエージェント ポリシーを作成するには、次の操作を行います。

  1. Google Cloud CLI をインストールします(まだインストールしていない場合)。

    gcloud CLI のエージェント ポリシーを管理するコマンド グループは、beta リリースで使用できます。

  2. gcloud CLI の beta コンポーネントをまだインストールしていない場合は、インストールします。

    gcloud components install beta
    

    beta コンポーネントがインストールされているかどうかを確認するには、次を実行します。

    gcloud components list
    
    1. 以前に beta コンポーネントをインストールしたことがある場合は、最新バージョンを使用していることを確認してください。

      gcloud components update
      
  3. スクリプト set-permissions.sh を使用して API を有効にし、Google Cloud CLI を使用するための適切な権限を設定します。

    スクリプトの詳細については、set-permissions.sh スクリプトの内容をご覧ください。

  4. gcloud beta compute instances ops-agents policies create コマンドを使用して、ポリシーを作成します。コマンドの構文については、gcloud beta compute instances ops-agents policies create のドキュメントをご覧ください。

    コマンドの形式の例については、Google Cloud CLI ドキュメントのをご覧ください。

    利用可能な gcloud CLI コマンドと使用可能なオプションの詳細については、gcloud beta compute instances ops-agents policies のドキュメントをご覧ください。

エージェント ポリシーを使用するためのベスト プラクティス

ロールアウト中に本番環境システムへの影響を制御するには、インスタンス ラベルとゾーンを使用して、ポリシーを適用するインスタンスをフィルタリングすることをおすすめします。

CentOS 7 VM の段階的なロールアウト計画の例を次に示します。

フェーズ 1: ラベル env=testapp=myproduct を使用してすべての VM を対象とするポリシーを作成します。

gcloud beta compute instances \
    ops-agents policies create ops-agents-policy-safe-rollout \
    --agent-rules="type=logging,version=current-major,package-state=installed,enable-autoupgrade=true;type=metrics,version=current-major,package-state=installed,enable-autoupgrade=true" \
    --os-types=short-name=centos,version=7 \
    --group-labels=env=test,app=myproduct \
    --project=my_project

オペレーティング システムの指定について詳しくは、gcloud beta compute instances ops-agents policies create をご覧ください。

フェーズ 2: env=prodapp=myproduct、および 1 つのゾーンのみを対象とするよう、作成したポリシーを更新します。

gcloud beta compute instances \
    ops-agents policies update ops-agents-policy-safe-rollout \
    --group-labels=env=prod,app=myproduct \
    --zones=us-central1-c \

フェーズ 3: ゾーンのフィルタを消去して、ポリシーがグローバルに展開されるよう、ポリシーを更新します。

gcloud beta compute instances \
    ops-agents policies update ops-agents-policy-safe-rollout \
    --clear-zones

制限事項

ポリシーを OS Config より古い VM で有効にするには、追加設定を行い、ポリシーが依存している OS Config エージェントが VM にインストールされていることを確認する必要があります。VM フリートに OS Config エージェントをインストールするには、次の操作を行います。

  1. エージェント ポリシーの作成セクションの set-permissions.sh スクリプトを実行済みか確認します。

  2. OS Config エージェントをインストールする VM を決定し、CSV ファイルに記述します。

    Google 管理以外のすべてのインスタンス(Google Kubernetes Engine や Google App Engine など)のリストを CSV で取得するには、次のコマンドを実行します。

      gcloud compute instances list \
          --filter="-labels.list(show="keys"):goog-" \
          --format="csv(name,zone)" \
          | grep -v -x -F -f  <(gcloud compute instances os-inventory list-instances \
              --format="csv(name,zone)") \
          | sed 's/$/,update/' > instances.csv
    

    grep セクションでは、OS Config エージェントがすでにインストールされ、有効になっている VM が除外されます。goog- に基づく VM ラベルの除外では、GKE や App Engine などで管理される Compute Engine VM が除外されます。

    ゾーンまたはラベルでインスタンスをさらにフィルタリングするには、--filter を次のように変更します。

      "-labels.list(show="keys"):goog- AND zone:(ZONE_1,ZONE_2) AND labels.KEY_1:VALUE_1 AND labels.KEY_2=VALUE_2"
    
  1. 次のようなスクリプトに従ってコマンドを実行して、mass-install-osconfig-agent.sh スクリプトをダウンロードし、実行します。

       bash mass-install-osconfig-agent.sh --project project-id --input-file instances.csv
    

    このスクリプトは、OS Config エージェントのインストールの手順を自動化します。

トラブルシューティング

ops-agents コマンドが失敗します

ops-agents ポリシー コマンドが失敗すると、対応する検証エラーが表示されます。このようなエラーは、エラー メッセージの内容に従いコマンドの引数とフラグを修正することで解決します。

検証エラーに加えて、次のエラーが表示される場合があります。

  • IAM 権限が不十分です

    エラーの例を次に示します。

    ERROR: (gcloud.beta.compute.instances.ops-agents.policies.XXX) PERMISSION_DENIED: Caller does not have required permission to XXX
    

    エージェント ポリシーの作成セクションで set-permissions.sh スクリプトを実行して、osconfig.guestPolicy 固有の IAM のロールを設定してください。

    プロジェクトで十分な OS Config ゲストポリシーのロールが有効になっているかを確認するには、次のコマンドを実行します。この例のコマンドは、ユーザーが roles/osconfig.guestPolicyAdmin ロールを割り当てられているかを確認します。GCLOUD_MEMBER は、user:USER_EMAIL または serviceaccount:SERVICE_ACCOUNT_EMAIL の形式にします。

    gcloud projects get-iam-policy project-id \
        --filter=--member=gcloud-member \
        | grep "roles/osconfig.guestPolicyAdmin" -B 2
    

    想定される出力は次のとおりです。

    - members:
      - gcloud-member
      role: roles/osconfig.guestPolicyAdmin
    
  • Osconfig API が有効になっていません

    エラーの例を次に示します。

    API [osconfig.googleapis.com] not enabled on project [XXX].
    Would you like to enable and retry (this will take a few minutes)?
    (y/N)?
    

    エージェント ポリシーの作成セクションで set-permissions.sh スクリプトを実行して、必要なすべての権限を付与します。

    プロジェクトで OS Config API が有効になっているかどうかを確認するには、次のコマンドを実行します。

    gcloud services list --project project-id \
        | grep osconfig.googleapis.com
    

    想定される出力は次のとおりです。

    osconfig.googleapis.com    Cloud OS Config API
    
  • ポリシーが存在しません

    エラーの例を次に示します。

    NOT_FOUND: Requested entity was not found
    

    これは、ポリシーがすでに削除されている可能性があることを示しています。describeupdatedelete コマンドのポリシー ID が既存のポリシーにマッピングされていることを確認します。

ポリシーは作成されていますが、効果がないようです

OS Config エージェントは、各 Compute Engine インスタンスにデプロイされて、Logging エージェントと Monitoring エージェント用のパッケージを管理します。基盤となる OS Config エージェントがインストールされていない場合、このポリシーは効果がないように見える可能性があります。

Linux

OS Config エージェントがインストールされているかを確認するには、次のコマンドを実行します。

gcloud compute ssh instance-id \
    --project project-id \
    -- sudo systemctl status google-osconfig-agent

出力例は以下のとおりです。

google-osconfig-agent.service - Google OSConfig Agent
Loaded: loaded (/lib/systemd/system/google-osconfig-agent.service; enabled; vendor preset:
Active: active (running) since Wed 2020-01-15 00:14:22 UTC; 6min ago
Main PID: 369 (google_osconfig)
 Tasks: 8 (limit: 4374)
Memory: 102.7M
CGroup: /system.slice/google-osconfig-agent.service
        └─369 /usr/bin/google_osconfig_agent

Windows

OS Config エージェントがインストールされているかを確認するには、次の手順を行います。

  1. RDP または同様のツールを使用してインスタンスに接続し、Windows にログインします。

  2. PowerShell ターミナルを開き、次の PowerShell コマンドを実行します。管理者権限は必要ありません。

    Get-Service google_osconfig_agent
    

SUSE および Ubuntu Compute Engine インスタンスには OS Config エージェントが事前インストールされていないため、OS Config エージェントのインストール手順に沿って OS Config エージェントをこれらの Compute Engine インスタンスにインストールする必要があります。

OS Config エージェントはインストールされますが、Ops エージェントがインストールされません

OS Config エージェントがポリシーを適用したときにエラーが発生するかを確認するには、OS Config エージェントのログを確認します。この確認は、ログ エクスプローラまたは SSH / RDP を介して個々の Compute Engine インスタンスに対し行うことができます。

ログ エクスプローラで OS Config エージェントのログを表示するには、次のフィルタを使用します。

resource.type="gce_instance"
logName="projects/project-id/logs/OSConfigAgent"

SSH を介して個々の Compute Engine Linux インスタンスの OS Config エージェントのログを表示するには、以下のコマンドを実行します。

  • CentOS / RHEL / SLES / SUSE

    gcloud compute ssh instance-id \
        --project project-id \
        -- sudo cat /var/log/messages \
           | grep "OSConfigAgent\|google-fluentd\|stackdriver-agent"
    
  • Debian / Ubuntu

    gcloud compute ssh instance-id \
        --project project-id \
        -- sudo cat /var/log/syslog \
           | grep "OSConfigAgent\|google-fluentd\|stackdriver-agent"
    

RDP を介して個々の Compute Engine Windows インスタンスの OS Config エージェント ログを表示するには、次の手順を実行します。

  1. RDP または同様のツールを使用してインスタンスに接続し、Windows にログインします。

  2. Event Viewer アプリを開き、Windows Logs => Application で、SourceOSConfigAgent と等しいログを検索します。

OS Config サービスへの接続中にエラーが発生した場合は、エージェント ポリシーの作成セクションの set-permissions.sh スクリプトを実行してメタデータを設定します。

OS Config メタデータが有効になっているかを確認するには、次のコマンドを実行します。

gcloud compute project-info describe \
    --project project-id \
    | grep "enable-osconfig\|enable-guest-attributes" -A 1

想定される出力は次のとおりです。

- key: enable-guest-attributes
  value: 'TRUE'
- key: enable-osconfig
  value: 'TRUE'

Ops エージェントがインストールされていますが、正常に動作しません

特定の問題をデバッグするには、Logging エージェントMonitoring エージェントのトラブルシューティングのページをご覧ください。

デバッグレベルのログの有効化

OS Config エージェントのデバッグレベルのロギングを有効にすると、問題を報告するときに非常に役立ちます。

osconfig-log-level: debug メタデータを設定すると、OS Config エージェントのデバッグレベルのロギングを有効にできます。収集されたログには、調査に役立つ情報が記録されています。

プロジェクト全体のデバッグレベルのロギングを有効にするには、次のコマンドを実行します。

gcloud compute project-info add-metadata \
    --project project-id \
    --metadata osconfig-log-level=debug

1 つの VM に対するデバッグレベルのロギングを有効にするには、次のコマンドを実行します。

gcloud compute instances add-metadata instance-id \
    --project project-id \
    --metadata osconfig-log-level=debug

詳細情報

set-permissions.sh スクリプトの処理内容

プロジェクト ID、Identity and Access Management(IAM)ロール、メールアドレスまたはサービス アカウントにより、set-permissions.sh スクリプトは次のアクションを行います。

  • プロジェクトに対して Cloud Logging API、Cloud Monitoring API、OS Config API を有効にします。

  • Compute Engine のデフォルトのサービス アカウントroles/logging.logWriterroles/monitoring.metricWriter のロールを付与します。これにより、エージェントはログと指標を Logging API と Cloud Monitoring API に書き込めます。

  • プロジェクトの OS Config メタデータを有効にして、OS Config エージェントが VM で有効になるようにします。

  • 指定された IAM ロールを gcloud ユーザーまたはサービス アカウントに付与します。プロジェクト オーナーは、ポリシーの作成と管理を行うための完全アクセス権を持っています。他のすべてのユーザーまたはサービス アカウントの場合は、プロジェクト オーナーが次のいずれかのロールを付与する必要があります。

    • roles/osconfig.guestPolicyAdmin: あるポリシーに対する完全アクセス権を付与します。

    • roles/osconfig.guestPolicyEditor: ユーザーによるポリシーの取得、更新、一覧表示を許可します。

    • roles/osconfig.guestPolicyViewer: ポリシーを取得して一覧表示するための読み取り専用アクセス権を付与します。

スクリプトのコメントで使用例をご覧ください。

diagnose.sh スクリプトの処理内容

プロジェクト、Compute Engine インスタンス ID、Ops エージェント ポリシー ID を指定すると、diagnose.sh スクリプトがポリシーの問題を診断するために必要な情報を自動的に収集します。

  • OS Config エージェントのバージョン

  • 基盤となる OS Config ゲストポリシー

  • この Compute Engine インスタンスに適用されるポリシー

  • Compute Engine インスタンスに pull されるエージェント パッケージ リポジトリ

Terraform 統合

Terraform のサポートは、Google Cloud CLI コマンドを基盤として構築されています。Terraform を使用してエージェント ポリシーを作成する方法については、Terraform モジュールの手順をご覧ください。