NO IMAGE

Session Managerで「NotFoundException: Key … does not exist」とエラーが表示される

  • 2023年5月4日
  • AWS, IT
AWS NO IMAGE

こんにちはますのです。
LT資料作成のためにAWS Systems Managerを扱っており、ホスト管理設定 (DHMC、Default Host Management Configuration) を有効化するだけでSessionManagerとかが利用できるのかと検証しております。

EC2インスタンスをSystemsManager管理する場合にIAMロールが必要無くなったので試してみる(2023.2アップデート)

繋がらない…。

ということで、SessionManagerの接続までを確認します。

原因:KMSキーが利用出来ない状態

AWS公式のナレッジセンターを見てみます。

エラー:「無効な KeyName: セッションは次の理由で終了されました: NotFoundException: 無効な keyId xxxx」

セッションを暗号化するための Session Manager の詳細設定で指定された AWS KMS キー Amazon リソースネーム (ARN) が有効であることを確認します。使用可能なキー ARN を表示し、Session Manager の詳細設定で指定された ARN が、利用可能な ARN の 1 つと一致することを確認します。詳細については、キー ID と ARN の検索をご参照ください。

引用:Session Manager を使用して Amazon EC2 インスタンスに接続できないのはなぜですか?

エラーの内容通り、KMSキーが利用出来ない状態とのことなのでSessionManagerで設定されているKMSの設定を確認します。

「カスタマー管理型のキー」を確認

AWSマネジメントコンソール > Key Management Service (KMS) > カスタマー管理型のキーをチェックします。

念のためにAWSマネージド型キーも確認しますが、該当のKMSキーIDは見当たらず。

このAWSアカウントでKMSキーを作ったこと無いので、見当たらないだろうなとは思っていました。
マネージド型キーを確認しますがもちろん見当たらず。どこから出てきたキーIDなのかと不思議な気持ちでいっぱいです。
Session Managerは同じAWSアカウントで昔から利用していたので使えると思っていたので詰まりました。

Session ManagerのKMS暗号化設定を確認する

KMSキーIDが存在しないことを確認したので、大元となるSession Managerの設定を確認しましょう。

AWS Systems Manager > セッションマネージャー > タブ:設定 をクリック

設定した覚えが無いですが「KMS encryption:Enabled」となっています。
きっとハンズオン参加とかの時に何かの拍子で有効化したのでしょう。

「編集」をクリックして詳細を確認します。

Select a KMS key」が選択されているものの、何も選択されていません。
カスタマー管理型キーが無効だったので当然ですね。

Name
なんとなく「Enter a KMS key ARN」に切り替えたら、エラー画面に表示されたKMSキーが出てきました。
裏で持っていた情報でKMSキーのARNにアクセスしてエラーが出てたようです。
CloudTrailでARNを検索するも3ヶ月以内に利用された形跡が無いので調査は諦めました。

Session ManagerのKMS暗号化を無効化する

今回は検証目的なので無効化してしまいます。

「KMS encryption:Disabled」と変更されたので無効化完了です。

KMSキーを無効化しますが「TLS1.2暗号化」は有効化されるとメッセージを確認しました。
通信側の暗号化はデフォルトでされているようです。

以下のような要件があるときはKMSキー暗号化を利用したほうが良さそうです。

  • SessionManagerで利用される際の保管データを暗号化する
  • 暗号化出来る利用者を絞りたい
  • EC2インスタンス⇔ローカルPC間で機密データを扱う
  • CloudTrailのログでキーの使用を監査したい
  • 暗号化キーの有効/無効を自分たちで管理したい
メッセージにもある通り、通信そのものはデフォルトで「TLS1.2」で暗号化されています。
https通信での疎通で許容されないセキュリティ要件の場合は利用を検討しましょう。

Session Managerで接続出来るか確認する

実際に接続出来るか確認してみましょう。
接続は「①Session Manager」、「②EC2ダッシュボード」のどちらの画面からでも同様にアクセス出来るので分かりやすい方でアクセスしましょう。

  • ①:AWS Systems Manager  > セッションマネージャ > [セッションの開始]  をクリック
    • ターゲットインスタンス:対象のEC2インスタンスを選択 > [Start session] をクリック
  • ②:EC2 > インスタンス > 対象のEC2インスタンスを選択 > [接続] をクリック
    • タブ:セッションマネージャー > [接続]をクリック

以下のようにブラウザ上でアクセスが出来ました。

参考:対象のEC2インスタンスのセキュリティグループ

対象のEC2インスタンスがSystems Managerのエンドポイントへ443通信でアクセス出来る設定としています。

  • インバウンド:設定なし
  • アウトバウンド:https(TCP) 443 0.0.0.0/0
対象のEC2インスタンスがSystems Managerのエンドポイントにhttpsアクセス出来る設定としています。
今回はパブリックIPを付与し、インターネットゲートウェイ経由で通信となっています。

プライベートサブネットの場合はVPCエンドポイントの作成や、NAT経由でのアクセスが必要となるため割愛です。

結論:デフォルトのホスト管理設定有効化でSession Managerは利用可能

利用出来ないかと思いましたが、ただ単純にKMSキーの設定がおかしかっただけでした。
ホスト管理設定 (DHMC、Default Host Management Configuration)を行うことで、EC2インスタンスへのIAMロール設定が不要になるのは有難いです。

参考サイト

NO IMAGE
最新情報をチェックしよう!