🧤

AWS Session Manager

2022/09/27に公開

概要

個人の備忘録としてAWS Session Managerについてまとめていきます。

Session Manager

Session ManagerはフルマネージドのAWS System Managerの機能です。
Session Managerを使うことでEC2インスタンス、エッジデバイス、オンプレミスサーバー、仮想マシンを管理できます。インタラクティブ・ワンクリックブラウザベースのシェルまたはAWS CLIを使用できます。


セッションマネージャのシェル

Session Managerは安全かつ監査可能なノード管理を実現し、インバウンドポートを開いたり踏み台ホストを維持したりSSHキーの管理をする必要がありません。
またSession Managerはマネージドノードの制御されたアクセス、厳格なセキュリティプラクティス、ノードアクセス詳細がある完全監査可能なログを要件とする社内ポリシーの遵守を実現しつつ、簡単なワンクリック・クロス・プラットフォームアクセスによってマネージドノードの使用を実現できます。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html

組織にとってのセッションマネージャーのメリット

  • IAMポリシーを使用してマネージドノードの一元アクセス制御
    IAMポリシーのみを使用して、Session Managerの使用とアクセス可能なマネージドノードにおいて、組織内で対象となる個々のユーザーまたはグループを管理することができます。

  • インバウンドポートを開いたり、踏み台ホストや SSH キーを管理したりする必要はありません

  • コンソールとCLIからワンクリックでマネージドノードへのアクセスが可能

  • ポート転送
    マネージドノード内の任意のポートをクライアントのローカルポードにリダイレクトします。
    その後、ローカルポートに接続してノード内で実行されているサーバーアプリケーションにアクセスします。

  • ログ記録と監査のセッションアクティビティ

Session Managerの許可設定

デフォルトではAWS Systems Managerにはインスタンスでアクションを実行する権限がないため、
IAMでアクセス許可の設定が必要です。

参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-instance-profile.html

EC2インスタンスの場合はインスタンスプロファイルで許可設定します。インスタンスプロファイルはIAMロールをEC2インスタンスに渡します。

参考
https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html

↓参考:S3やCloudWatchなどのリソースへのアクセス許可設定をする場合
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-create-iam-instance-profile.html

↓参考:Session Managerのエンドユーザーポリシーの設定例
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-restrict-access-quickstart.html

↓参考:Session ManagerのIAMポリシーのその他のサンプル例
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-restrict-access-examples.html

セッションの設定

セッションマネージャーでは次のような設定を行うことができます。(管理者のアクセス許可がされているIAMユーザー)

  • セッションログ履歴を作成してS3やCloudWatch Logsロググループに送信できます。保存されたログデータを使用してマネージドノード上のセッション接続とセッション中に実行されたコマンドの監査やレポートの作成ができます
  • セッションタイムアウトを設定できます。この設定により非アクティブ期間後にセッションを終了するタイミングを指定できます。
  • シェルの設定、環境変数、作業ディレクトリ、セッション開始時の複数コマンドの実行などのセッション内の設定をカスタマイズなどをできるように、シェルプロファイルの設定ができます。

参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-configure-preferences.html

シェルプロファイルの有効化

前節でみたセッションの設定のうち、リストの3つめにあたる、シェルの設定、環境変数や作業ディレクトリ、セッション開始時のコマンド実行の指定などを可能にするシェルプロファイルの設定についてここでは見ていきます。

コマンドラインからの設定の場合、次のコマンドを実行します。

aws ssm create-document \
    --name SSM-SessionManagerRunShell \
    --content "file://SessionManagerRunShell.json" \
    --document-type "Session" \
    --document-format JSON

オプション--content部分にセッションマネージャーの指定を記載したJSONファイルを指定します。
例えばJSONファイルは次のような内容になります。

SessionManagerRunShell.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に指定します。

↓その他参考:既存のセッションの設定を更新する場合
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-configure-preferences-cli.html

また、カスタムセッションタイプの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 テンプレートなどがあります。

https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-ssm-docs.html#document-schemas-features

その他

SSMドキュメントのSyntax

参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-doc-syntax.html

アカウント全体のSSMドキュメントの設定

アカウント全体のデフォルトでのSSMドキュメントは
SSM-SessionManagerRunShellが使用されます。

terraformなどでこの設定を反映するには、
下記コメントのように一旦デフォルトで作成されているSSMドキュメントSSM-SessionManagerRunShellを手動で削除、またはimportしたのちに設定してあげる必要があります。

参考

https://github.com/gazoakley/terraform-aws-session-manager-settings/issues/1#issuecomment-487256946

Discussion