オンプレミス環境のサーバーに CloudWatch エージェントを導入し、IAM ロールの権限でメトリクスやログを出力する方法

オンプレミス環境のサーバーに CloudWatch エージェントを導入し、IAM ロールの権限でメトリクスやログを出力する方法

オンプレミス環境のサーバーから CloudWatch エージェントを用いてカスタムメトリクスとログを送信する際に、Systems Manager のマネージドノードとして登録することで、ハイブリッドアクティベーションに紐づいた IAM ロールを用いることができます。また、環境変数を設定することで、AWS CLI コマンドも当該の IAM ロールを使用することが可能です。
Clock Icon2024.06.01 00:00

困っていること

オンプレミス環境のサーバーに CloudWatch エージェントを導入し、カスタムメトリクスを CloudWatch メトリクスに送信し、ログを CloudWatch Logs へ送信したいです。

しかしながら、オンプレミス環境のサーバーに IAM ユーザーのアクセスキーを発行し、クレデンシャル情報を登録する必要があり、セキュリティの関係上、これを避けたいです。

IAM ロールを使用する方法があれば、教えてください。

どう対応すればいいの?

オンプレミス環境のサーバーを Systems Manager のマネージドノードとして登録します。

その後、CloudWatch エージェントの common-config.toml ファイルにて、SSM エージェントが生成する認証情報を指定します。

これにより、CloudWatch エージェントが SSM エージェントの用いる認証情報を使用して、カスタムメトリクスの送信、及び、CloudWatch Logs へのログ出力を実現します。

やってみた

今回はローカル環境の Windows 10 をマネージドノードとして登録してみます。Linux の場合は、参考資料[1]を参考に適宜置き換えてください。

ハイブリッドアクティベーション用の IAM ロールを作成する

1. IAM コンソールから、IAM ロール作成画面へ推移する。

2. 信頼されたエンティティタイプとして、AWS のサービスを選択し、ユースケースのサービスに Systems Manager を選択する。

3. 許可ポリシーに下記 2 つのマネージドポリシーを追加する。

  • AmazonSSMManagedInstanceCore
  • CloudWatchAgentServerPolicy

4. 任意の名前(ここではSSMCloudWatchAgentRole)を指定し、ロールを作成する。

ハイブリッドアクティベーションを作成する

1. System Manager コンソールから、アクティベーションの作成画面へ推移する。

2. IAM ロールに「必要な許可を持つ既存のカスタム IAM ロールを選択する」を選択し、SSMCloudWatchAgentRoleを指定する。

3. Activation ID と Activation Code が発行されるため、テキストエディタなどに控える。

オンプレミス環境のサーバーに SSM エージェントをインストールし、マネージドノードとして登録する。

PowerShell を管理者権限で起動し、下記のコマンドレットを実行します。

[System.Net.ServicePointManager]::SecurityProtocol = 'TLS12'
$code = "activation-code"
$id = "activation-id"
$region = "ap-northeast-1"
$dir = $env:TEMP + "\ssm"
New-Item -ItemType directory -Path $dir -Force
cd $dir
(New-Object System.Net.WebClient).DownloadFile("https://amazon-ssm-$region.s3.$region.amazonaws.com/latest/windows_amd64/ssm-setup-cli.exe", $dir + "\ssm-setup-cli.exe")
./ssm-setup-cli.exe -register -activation-code="$code" -activation-id="$id" -region="$region"
Get-Content ($env:ProgramData + "\Amazon\SSM\InstanceData\registration")
Get-Service -Name "AmazonSSMAgent"

activation-code, activation-idはハイブリッドアクティベーション作成時に生成されたコード、$regionの値はマネージドノードとして登録したリージョンへと適宜変更ください。

※ SSM エージェントのインストールに失敗するなどのエラーが発生した場合、Windows AWS Tools for PowerShell を最新バージョンに更新してください[3]。

※ それでも失敗する場合は、PowerShell の文字コードを utf-8 に変更するために、下記のコマンドを実行してください。

chcp 65001

オンプレミス環境のサーバーに CloudWatch エージェントをインストールする

インストール方法についての詳細は割愛します。下記ドキュメントが参考になります。

CloudWatch エージェントのインストール - Amazon CloudWatch

common-config.toml ファイルを編集し、SSM エージェントによって生成された認証情報をポイントする

common-config.tomlファイルを用いて、CloudWatch エージェントが使用する認証情報や、プロキシの設定が可能です。

編集するファイルの場所

$Env:ProgramData\Amazon\AmazonCloudWatchAgent\common-config.toml

下記のように変更します。

[credentials] 
  shared_credential_profile = "default" 
  shared_credential_file = "C:\\Windows\\System32\\config\\systemprofile\\.aws\\credentials"

※ SSM エージェントによって生成される認証情報は C:\Windows\System32\config\systemprofile\.aws\credentials に保管されます。

SSM エージェントが参照する認証情報のフォルダに config ファイルを追加する

下記フォルダに認証情報が保存されています。

C:\Windows\System32\config\systemprofile\.aws

このフォルダに新規ファイルconfigを作成し、下記を入力します。

[default]
region = "ap-northeast-1"

$regionの値はマネージドノードとして登録したリージョンへと適宜変更ください。

CloudWatch エージェントの設定ファイルを適切に設定する

詳細については割愛しますが、動作検証目的であれば下記ドキュメントを参照にして、ウィザードで生成することがお手軽です。

CloudWatch エージェント設定ファイルを作成する - Amazon CloudWatch

CloudWatch エージェントを開始する

PowerShell 上で下記のコマンドを実行します。

& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m onPremise -s -c file:configuration-file-path

※file:configuration-file-path は前段のステップで作成した CloudWatch エージェントの設定ファイルを指定します。

その他の開始方法につきましては、下記のドキュメントをご参照ください。

オンプレミスサーバーへの CloudWatch エージェントのインストール - Amazon CloudWatch

補足:AWS CLI をハイブリッドアクティベーション用の IAM ロールを用いて実行する

環境変数AWS_SHARED_CREDENTIALS_FILEC:\Windows\System32\config\systemprofile\.aws\credentials に設定することで、ハイブリッドアクティベーションによって保存された認証情報を AWS CLI から参照することが可能となります。

下記コマンドでユーザーの環境変数に追加できます。

[Environment]::SetEnvironmentVariable('AWS_SHARED_CREDENTIALS_FILE', 'C:\Windows\System32\config\systemprofile\.aws\credentials', 'User')

参考資料

[1] SSM Agent と統合 CloudWatch エージェントを使用するオンプレミスサーバーで、一時的な認証情報のみを使用するように設定する | AWS re:Post

[2] ステップ 4: ハイブリッドおよびマルチクラウド環境に SSM Agent をインストールする (Windows) - AWS Systems Manager

[3] Windows AWS Tools for PowerShell への のインストール - AWS Tools for PowerShell

[4] 20秒で終わるWindows日本語(utf-8)出力解決

[5] AWS CLI を設定する環境変数 - AWS Command Line Interface

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.