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

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

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

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

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

オペレーティング システム Logging エージェント バージョン 6.0.0 より前の Monitoring エージェント バージョン 6.0.0 以降の Monitoring エージェント Ops エージェント
CentOS 7
CentOS 8
RHEL 6
RHEL 7:
rhel-7, rhel-7-6-sap-ha, rhel-7-7-sap-ha, rhel-7-9-sap-ha
1 1
RHEL 8:
rhel-8, rhel-8-1-sap-ha, rhel-8-2-sap-ha, rhel-8-4-sap-ha
1 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
Ubuntu 21.04(Hirsute Hippo):
ubuntu-2104、ubuntu-minimal-2104
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
Windows Server 2016
Windows Server 2019
Windows Server Core 2012 R2
Windows Server Core 2016
Windows Server Core 2019

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

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

gcloud コマンドライン ツールを使用してエージェント ポリシーを作成するには、次の操作を行います。

  1. まだインストールしていない場合は、Cloud SDK をインストールします。

    Cloud SDK では、Agent Policy を管理するコマンド グループは beta 版で使用できます。

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

    gcloud components install beta
    

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

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

      gcloud components update
      
  3. 次のスクリプトを使用して API を有効にし、gcloud コマンドライン ツールを使用するための適切な権限を設定します(set-permissions.sh)。

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

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

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

    利用可能な gcloud ツールコマンドと使用可能なオプションの詳細については、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

フェーズ 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

制限事項

ポリシーが Ubuntu と SLES OS ディストリビューション、または 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"
    
  3. 次のようなスクリプトに従ってコマンドを実行して、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
    

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

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 のサポートは、gcloud コマンドライン ツールのコマンドで構築されています。Terraform を使用してエージェント ポリシーを作成する方法については、Terraform モジュールの手順をご覧ください。