【CloudWatch】オンプレ環境にssmエージェントをインストールする

AWS

任意のコマンドで監視するために、まずはオンプレサーバーにSSM Agentをインストールします。

今回もAnsibleでの実行を行いました。

大元のプレイブックはこちらをご覧ください。

AWS System Managerのアクティベーションコードの発行

  1. まずAWS System Managerのコンソールを開き、左ペインの「ノード管理」-「ハイブリッドアクティベーション」をクリックします。下のような画面が表示されるので、「アクティベーションの作成」をクリックします。

2. デフォルトのインスタンス名 だけサーバーのホスト名に変えて、他はデフォルトで「アクティベーションの作成」をクリック

3. 下の画像のように「Activation Code」と「Activation ID」が表示されるので、控えておきます。

参考:

ステップ 4: ハイブリッド環境のマネージドインスタンスのアクティベーションを作成する - AWS Systems Manager
マネージドインスタンスのアクティベーションを作成して、マネージドインスタンスから Systems Manager サービスへの安全なアクセスを提供します。

SSMのインストールとアクティベート

アクティベーションコードの発行が終わったら、実際にサーバーにSSMをインストールしてアクティベートしていきます。

家のNUCにはCentOS 7 が入っているので、以下のような形になりました。

  • インストール用のプレイブック
# install_ssm.yml

- name: confirm exists ssm rpm
  stat:
    path: /tmp/amazon-ssm-agent.rpm
  register: ssm_rpm

- name: ssm rpm download
  get_url:
    url: https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
    dest: /tmp
  when: ssm_rpm.stat.exists  == false

- name: install ssm agent (yum)
  become: yes 
  yum: 
    name:
     - /tmp/amazon-ssm-agent.rpm
    state: present
  when: ssm_rpm.stat.exists  == false
  check_mode: no
  notify: ssm activate

CloudWatch Agentと同じように、get_urlでrpmを取得してきたあと、yumモジュールでインストールしています。

インストールが行われたならhandlerのssm activateを呼ぶようにしています。

  • handler
- name: ssm activate
  become: yes
  shell: |
    systemctl stop amazon-ssm-agent &&
      amazon-ssm-agent -register \
      -code "{{ ssm_activation_code }}" \
      -id "{{ ssm_activation_id }}" \
      -region "ap-northeast-1" &&
      systemctl start amazon-ssm-agent
      

公式ページのインストールコマンドに従って、ssm-agentの停止、アクティベート、起動を行っています。

group_varsの方で、ssm_activation_codeとssm_activation_idを先ほど控えたものを設定しておいて、こちらで読み込んでいます。

参考:

ステップ 5: ハイブリッド環境に SSM Agent をインストールする (Linux) - AWS Systems Manager
ハイブリッド環境の Linux マシンに SSM Agent をインストールします。

プライベートキーの自動ローテーション設定

アクティベートした後のプライベートキーは、自動ローテーションが設定できるようなのでこちらも設定します。

ssmをインストールした後に出来る amazon-ssm-agent.json.templateをAnsible実行端末側にもってきて、そちらを書き換えてAnsibleでコピーしています。

- name: config ssm
  become: yes
  copy:
    src: amazon-ssm-agent.json
    dest: /etc/amazon/ssm/amazon-ssm-agent.json 
  notify:
    - Restart ssm daemon

handlerではただデーモンを再起動しているだけです。

- name: Restart ssm daemon
  become: yes
  service:
    name: amazon-ssm-agent
    state: restarted

amazon-ssm-agent.json はこのようにしています。

ローテーションの設定として、ProfileのKeyAutoRotateDaysを1に変えているだけです。(デフォルト0)

{
    "Profile":{
        "ShareCreds" : true,
        "ShareProfile" : "",
        "ForceUpdateCreds" : false,
        "KeyAutoRotateDays": 1
    },
    "Mds": {
        "CommandWorkersLimit" : 5,
        "StopTimeoutMillis" : 20000,
        "Endpoint": "",
        "CommandRetryLimit": 15
    },
    "Ssm": {
        "Endpoint": "",
        "HealthFrequencyMinutes": 5,
        "CustomInventoryDefaultLocation" : "",
        "AssociationLogsRetentionDurationHours" : 24,
        "RunCommandLogsRetentionDurationHours" : 336,
        "SessionLogsRetentionDurationHours" : 336,
        "PluginLocalOutputCleanup": "",
        "OrchestrationDirectoryCleanup": ""
    },
    "Mgs": {
        "Region": "",
        "Endpoint": "",
        "StopTimeoutMillis" : 20000,
        "SessionWorkersLimit" : 1000
    },
    "Agent": {
        "Region": "",
        "OrchestrationRootDir": "",
        "SelfUpdate": false,
        "TelemetryMetricsToCloudWatch": false,
        "TelemetryMetricsToSSM": true,
        "AuditExpirationDay" : 7,
        "LongRunningWorkerMonitorIntervalSeconds": 60
    },
    "Os": {
        "Lang": "en-US",
        "Name": "",
        "Version": "1"
    },
    "S3": {
        "Endpoint": "",
        "Region": "",
        "LogBucket":"",
        "LogKey":""
    },
    "Kms": {
        "Endpoint": ""
    }
}

まとめ

これで一応コマンド等を実行できる環境が整いました。

RunCommandで任意のコマンド実行結果をCloudWatchで監視するまでもう一息です。。。

コメント

タイトルとURLをコピーしました