はじめに
AWS Systems Manager Fleet Managerのツールは、マネジメントコンソールからEC2インスタンスのファイルシステム、パフォーマンスカウンター、プロセス、ユーザーとグループを確認することができる機能です。
ReadOnlyAccess権限のみをもつIAMユーザーでパフォーマンスカウンターを確認したところ、データを取得できませんでした。
ユーザーガイドを確認する
確認したドキュメントはこちらです。
Fleet Manager 読み取り専用アクセスのサンプルポリシーとReadOnlyAccessポリシーを比較したところ、ReadOnlyAccessポリシーには含まれていない4つのアクションが含まれていました。
ssm:SendCommand
ssm:StartSession
ssm:TerminateSession
kms:GenerateDataKey
ReadOnlyAccessに加えてこれらの書き込み権限を付与すると、Session ManagerやRun Commandの機能も利用可能になることに注意が必要です(サンプルポリシーのみの場合は読み取り権限不足となります)。
ユーザーガイドでは「読み取り専用アクセス」として案内されていますが、セッションをつないだりコマンドを送ったりしたいようです。
権限を付け外しして簡単に動作確認したところ、それぞれ以下の機能を使用しているようでした。
- Session Manager(ssm:StartSession、ssm:TerminateSession、kms:GenerateDataKey)
- パフォーマンスカウンター
- プロセス
- Run Command(ssm:SendCommand)
- ファイルシステム
- ユーザーとグループ
SSM Agentのログを確認する
SSM Agentのログをみながら、十分な権限のあるIAMユーザーを使ってFleet Managerのパフォーマンスカウンターを開いてみました。
パフォーマンスカウンターの画面を開いたタイミングでセッションを張っていることが確認できました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
[root@ip-10-0-0-68 ~]# tail -f /var/log/amazon/ssm/amazon-ssm-agent.log ... 2025-01-24 09:14:11.1092 INFO [ssm-agent-worker] [MessageService] [MGSInteractor] Processing AgentMessage: MessageType - interactive_shell, Id - xxxxxxxx 2025-01-24 09:14:11.1470 INFO ssm-session-worker - v3.3.987.0 2025-01-24 09:14:11.1093 INFO [ssm-agent-worker] [MessageService] [MGSInteractor] Parsing AgentMessage xxxxxxxx, Payload: {"schemaVersion": ...} 2025-01-24 09:14:11.1470 INFO picking up runtime config identity selector 2025-01-24 09:14:11.1137 INFO [ssm-agent-worker] [MessageService] [EngineProcessor] document xxxx-xxxx submission started 2025-01-24 09:14:11.1471 INFO Checking if agent identity type OnPrem can be assumed 2025-01-24 09:14:11.1149 INFO [ssm-agent-worker] [MessageService] [EngineProcessor] document xxxx-xxxx submission ended 2025-01-24 09:14:11.1472 INFO Checking if agent identity type EC2 can be assumed 2025-01-24 09:14:11.1911 INFO Agent will take identity from EC2 2025-01-24 09:14:11.1912 INFO [ssm-session-worker] [xxxx-xxxx] Init the cloudwatchlogs publisher 2025-01-24 09:14:11.1912 INFO [ssm-session-worker] [xxxx-xxxx] document: xxxx-xxxx worker started 2025-01-24 09:14:11.1927 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] received plugin config message 2025-01-24 09:14:11.1927 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] {"DocumentInformation":{"DocumentID": ...} 2025-01-24 09:14:11.1940 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] Running plugin InteractiveCommands InteractiveCommands 2025-01-24 09:14:11.1959 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Setting up datachannel for session: xxxx-xxxx, requestId: xxxxxxxxxxxx, clientId: 2025-01-24 09:14:11.2623 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Opening websocket connection to: wss://ssmmessages.ap-northeast-1.amazonaws.com/v1/data-channel/xxxx-xxxx?role=publish_subscribe 2025-01-24 09:14:11.3088 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Successfully opened websocket connection to: 52.119.222.209:443 2025-01-24 09:14:11.3088 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Starting websocket pinger 2025-01-24 09:14:11.3089 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Starting websocket listener 2025-01-24 09:14:11.3093 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Initiating Handshake 2025-01-24 09:14:11.4380 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Client side session manager plugin version is: placeholder_client_ver 2025-01-24 09:14:11.4522 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Verifying encryption challenge.. 2025-01-24 09:14:11.4524 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Encryption challenge confirmed. 2025-01-24 09:14:11.4524 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Handshake successfully completed. 2025-01-24 09:14:11.4533 WARN [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Overriding SessionLogsDestination: "none" since logging session data to CloudWatch or S3 is enabled. 2025-01-24 09:14:11.4843 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Starting command executor 2025-01-24 09:14:11.4850 INFO [ssm-session-worker] [xxxx-xxxx] [DataBackend] [pluginName=InteractiveCommands] Plugin InteractiveCommands started |
おわりに
Fleet Managerパフォーマンスカウンターはインスタンスの使用状況を表示する機能なので、読み取り権限のみで問題ないと考えていました。しかし実際には表示するときにセッションをつないでいるということがわかりました。マネジメントコンソールの裏側の仕組みを理解することの大切さを改めて感じました。
参考リンク
- Controlling access to Fleet Manager
https://docs.aws.amazon.com/systems-manager/latest/userguide/configuring-fleet-manager-permissions.html - ReadOnlyAccess
https://docs.aws.amazon.com/aws-managed-policy/latest/reference/ReadOnlyAccess.html - AWS Systems Manager Agent のログ設定を変更してみた
https://dev.classmethod.jp/articles/change-ssm-agent-log-configuration/