SSM の仕様
使いかたは SSM で EC2 にログインする にあります。ここには、その細かい規則をまとめます。
| 項目 | 規則 |
|---|---|
| 使用するプロファイル | 必須。ホストはプロファイルを内部の ID で覚えます。プロファイルを削除して登録し直すと別のものになり、ホストからは選び直しが要ります |
| 別名 | 必須。ほかのホストと同じ別名も登録できます。そのときセッションの名前には、プロファイルの名前(なければアカウント ID)が括弧で付きます |
| インスタンス ID | 必須 |
| リージョン | 任意。決まりかたは リージョン |
| run-as ドキュメント | 任意。入れると aws ssm start-session --document-name に渡します。空なら Session Manager の既定のシェルです |
| 端末の色 | 既定は「自動」で、ホストごとに決まります。色はセッションを作るときに付くので、変えると、これから開くセッションに効きます |
- ホストの編集は、これから開くセッションに効きます。開いているセッションの接続先は変わりません。
- ホストが使っているプロファイルは削除できず、画面がそのホストを挙げます。ほかのプロファイルがロールを引き受ける元になっている プロファイルも、削除やロールを引き受ける種類への変更ができません。
- ホストが使っていたプロファイルがないときは、行に「プロファイルが削除されています」と出ます。編集して選び直してください。
接続するリージョンは、次の順で最初に決まったものです。
- ホストのリージョン
- プロファイルの既定リージョン
- 別のプロファイルからロールを引き受けるプロファイルなら、元のプロファイルの既定リージョン
- SSO のプロファイル(ロールを引き受けるなら元のプロファイル)の SSO リージョン
~/.aws/config に書き出すプロファイルも同じ順で決まるので、aws、SDK、SSM のセッションは同じリージョンに届きます。
- 端末はまず
aws sts get-caller-identityでログインを確かめ、ログインしていなければデバイスコードのログインを始めます。 コードは「SSM ログイン」の画面に出ます。ロールを引き受けるプロファイルでは、ログインするのは元のプロファイルです。 - 接続の直前に
[Agent Fleet] AWS profile <名前> (identity from Settings, not confirmed) · account … · role … · region … · target …の 1 行を出します。設定に書かれた身元で、AWS に確かめたものではありません。値のない項目は出ません。ロールを引き受けるプロファイルではvia <元のプロファイル>、 共有サインインではsign-in <名前>も出ます。 - 強制的に再ログイン(停止したセッションでは 再ログインして再開)は、そのプロファイルのログインを捨ててからログインします。
- 「SSM ログイン」の画面で キャンセル を押すと、新しく作ったセッションはごみ箱へ移ります。停止していたセッションを 開き直したときは、セッションは停止したまま残ります。
- 停止した SSM のセッションを 再開 すると、ログインの確認からやり直します。
AWS から検索
Section titled “AWS から検索”「はじめる」の SSM の画面の AWS から検索 は、選んだプロファイルで aws ssm describe-instance-information を実行します。
- 出るのは、今オンラインの EC2 インスタンス(
i-…)だけです。オンプレミスのマネージドノード(mi-…)は出ません。 - 名前は EC2 の Name タグです。ロールに
ec2:DescribeInstancesがないときは名前なしで出ます。 ssm:DescribeInstanceInformationがないと「AWS上のインスタンスを検索する権限がありません」と出ます。- プロファイルが 2 つ以上あるときは、検索に使うプロファイルを選べます。1 つだけならそのプロファイルです。登録 したホストも、そのプロファイルで接続します。
- 検索は保存済みのログインを使います。ログインが切れていると失敗するので、登録済みのホストに一度接続してログインしてください。
- 検索は 25 秒で打ち切ります。権限以外の AWS のエラーは「AWS の検索に失敗」と出ます。
- 登録 で作るホストの別名は、Name タグ、なければコンピューター名、それもなければインスタンス ID です。リージョンは空 (プロファイルの既定)、run-as ドキュメントも空です。
- 検索の結果は Agent Fleet に保存しません。
ssh config の取り込み
Section titled “ssh config の取り込み”~/.ssh/config から取り込む(プロファイルの取り込みの隣)は、ssh の設定を読んで SSM ホストを作ります。
接続のしかたが変わります。 ssh の設定では、これらのエントリは
ProxyCommand aws ssm start-session … --document-name AWS-StartSSHSession で SSM のトンネル越しに SSH セッション
(ユーザー・鍵・ポート)を開きます。Agent Fleet のホストは、インスタンス上で aws ssm start-session のシェルを開き、
SSH のユーザー・鍵・ポートはありません。User・IdentityFile・Port・転送などの設定は引き継がれず、プレビューにそれらの名前が出ます。
ファイルはブラウザの中だけで読み、ProxyCommand は実行も表示も送信も保持もしません。 保存されるのは、チェックした
行の別名・インスタンス ID・AWS プロファイル・リージョンだけで、ホストの追加と同じ保存を使います。
取り込める形
Section titled “取り込める形”読むのは決まった 1 つの形だけです。
- 1 つの具体的な名前の
Hostであること ProxyCommandがaws ssm start-session(sh -c "…"で包んだ形も可)であること- 次のオプションだけを、各 1 回まで使うこと
--target:インスタンス ID(i-…/mi-…)か%h。%hはそのエントリのHostName、HostNameがなければHostの名前そのもので、 インスタンス ID であること--document-name AWS-StartSSHSession--parameters portNumber=%p(またはportNumber=22)--profile--region
それ以外は、理由つきで取り込めません。他のドキュメント(ポートフォワード・独自)、他のオプション、他の % トークン、
シェルの構文(;・|・$(…)・単語全体を囲む以外の引用符)、ProxyJump、CanonicalizeHostname、ワイルドカード(*・?)、否定(!)、
Match、Include です。
ブロックの重なり
Section titled “ブロックの重なり”OpenSSH は、名前に当てはまる全ブロックを通して、各キーワードの最初の値を使うので、ブロックは互いに独立していません。
ProxyCommand(%h が要るときは HostName も)が最初の値で、かつそのホスト名を直接書いたブロックから来ている
ときだけ取り込めます。Host * や前にあるパターンから受け継ぐ値、これらのキーワードを設定する Match や
Include(その中身は貼り付けた文面にありません)より後ろの値は断ります。取り込みたいときは、Include 先の内容を
上に貼り、そのホストのエントリを全部書いてください。
プロファイルと別名
Section titled “プロファイルと別名”- AWS プロファイルは、AWS 名がコマンドの
--profileと同じ設定のプロファイルです。--profileがない、または 一致するものがないときは、行の中でプロファイルを選びます。 - 別名に使えるのは英数字と
. _ @ -で、64 文字までです。 - すでにある行(別名とインスタンスが同じ)は 登録済み と出ます。別のインスタンスで使われている別名は断ります。
- 1 つのファイルで読めるエントリは 500 件までです。
- アクセスキーやトークンらしきものがあると警告し、それは使いません。
- 「取り込む」を押すまで何も作りません。今のホストの一覧を読めなければ、何も送りません。