AWS Session Manager
概要
個人の備忘録としてAWS Session Managerについてまとめていきます。
Session Manager
Session ManagerはフルマネージドのAWS System Managerの機能です。
Session Managerを使うことでEC2インスタンス、エッジデバイス、オンプレミスサーバー、仮想マシンを管理できます。インタラクティブ・ワンクリックブラウザベースのシェルまたはAWS CLIを使用できます。
セッションマネージャのシェル
Session Managerは安全かつ監査可能なノード管理を実現し、インバウンドポートを開いたり踏み台ホストを維持したりSSHキーの管理をする必要がありません。
またSession Managerはマネージドノードの制御されたアクセス、厳格なセキュリティプラクティス、ノードアクセス詳細がある完全監査可能なログを要件とする社内ポリシーの遵守を実現しつつ、簡単なワンクリック・クロス・プラットフォームアクセスによってマネージドノードの使用を実現できます。
組織にとってのセッションマネージャーのメリット
-
IAMポリシーを使用してマネージドノードの一元アクセス制御
IAMポリシーのみを使用して、Session Managerの使用とアクセス可能なマネージドノードにおいて、組織内で対象となる個々のユーザーまたはグループを管理することができます。 -
インバウンドポートを開いたり、踏み台ホストや SSH キーを管理したりする必要はありません
-
コンソールとCLIからワンクリックでマネージドノードへのアクセスが可能
-
ポート転送
マネージドノード内の任意のポートをクライアントのローカルポードにリダイレクトします。
その後、ローカルポートに接続してノード内で実行されているサーバーアプリケーションにアクセスします。 -
ログ記録と監査のセッションアクティビティ
Session Managerの許可設定
デフォルトではAWS Systems Managerにはインスタンスでアクションを実行する権限がないため、
IAMでアクセス許可の設定が必要です。
参考
EC2インスタンスの場合はインスタンスプロファイルで許可設定します。インスタンスプロファイルはIAMロールをEC2インスタンスに渡します。
参考
↓参考:S3やCloudWatchなどのリソースへのアクセス許可設定をする場合
↓参考:Session Managerのエンドユーザーポリシーの設定例
↓参考:Session ManagerのIAMポリシーのその他のサンプル例
セッションの設定
セッションマネージャーでは次のような設定を行うことができます。(管理者のアクセス許可がされているIAMユーザー)
- セッションログ履歴を作成してS3やCloudWatch Logsロググループに送信できます。保存されたログデータを使用してマネージドノード上のセッション接続とセッション中に実行されたコマンドの監査やレポートの作成ができます
- セッションタイムアウトを設定できます。この設定により非アクティブ期間後にセッションを終了するタイミングを指定できます。
- シェルの設定、環境変数、作業ディレクトリ、セッション開始時の複数コマンドの実行などのセッション内の設定をカスタマイズなどをできるように、シェルプロファイルの設定ができます。
参考
シェルプロファイルの有効化
前節でみたセッションの設定のうち、リストの3つめにあたる、シェルの設定、環境変数や作業ディレクトリ、セッション開始時のコマンド実行の指定などを可能にするシェルプロファイルの設定についてここでは見ていきます。
コマンドラインからの設定の場合、次のコマンドを実行します。
aws ssm create-document \
--name SSM-SessionManagerRunShell \
--content "file://SessionManagerRunShell.json" \
--document-type "Session" \
--document-format JSON
オプション--content
部分にセッションマネージャーの指定を記載したJSONファイルを指定します。
例えばJSONファイルは次のような内容になります。
{
"schemaVersion": "1.0",
"description": "Document to hold regional settings for Session Manager",
"sessionType": "Standard_Stream",
"inputs": {
"s3BucketName": "",
"s3KeyPrefix": "",
"s3EncryptionEnabled": true,
"cloudWatchLogGroupName": "",
"cloudWatchEncryptionEnabled": true,
"cloudWatchStreamingEnabled": false,
"kmsKeyId": "",
"runAsEnabled": false,
"runAsDefaultUser": "",
"idleSessionTimeout": "",
"maxSessionDuration": "",
"shellProfile": {
"windows": "date",
"linux": "pwd;ls"
}
}
}
アカウントレベルの設定をこの方法で指定できます。
カスタムセッションドキュメントを作成することでCLIでの実行毎にドキュメントを指定することでセッションんマネージャの設定を変更できます。
その場合、カスタムドキュメントのname
パラメータにSSM-SessionManagerRunShell
以外の値を指定する必要があります。
カスタムセッションドキュメントはAWS CLIコマンドからのみ使用可能で、オプション--document-name
に指定します。
↓その他参考:既存のセッションの設定を更新する場合
また、カスタムセッションタイプのSystems Managerドキュメントを作成することでSession Managerのセッションでユーザーが実行できるコマンドを制限できます。
参考: https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-restrict-command-access.html
AWS System Manager Documents
AWS System Manager document(SSM document)はマネージドインスタンスに対するSystem Managerの振る舞いの設定をするためのリソースです。
System Managerには100以上の事前定義されたドキュメントがあります。ランタイム上で指定のパラメータにより指定します。
ここでは、これまで見てきたSession Managerのセッションの設定に関するSSMドキュメントについてみていきます。
そのほかにもRunコマンド用のコマンドのドキュメントであったり、CloudFormation用のAWS CloudFormation テンプレートなどがあります。
その他
SSMドキュメントのSyntax
参考
アカウント全体のSSMドキュメントの設定
アカウント全体のデフォルトでのSSMドキュメントは
SSM-SessionManagerRunShell
が使用されます。
terraformなどでこの設定を反映するには、
下記コメントのように一旦デフォルトで作成されているSSMドキュメントSSM-SessionManagerRunShell
を手動で削除、またはimportしたのちに設定してあげる必要があります。
参考
Discussion