AWS SessionManagerによる接続とエラーについて


# 概要

* SessionManager（以下SSM）で接続する
* 既にシステム側にはSSMは設定されている状態
* なのでシステム側設定は他の記事へどうぞ
* 主にローカルPC側の設定をメモ
* 接続うまく行かなかったエラーなどもメモ
* ローカルPCはMacの場合です


# 詳細

## ローカル設定

* ~/.ssh/configの設定

``` :ローカルPC（Macの設定）

% cat ~/.ssh/config
host web
    HostName i-02b08efa398999XXX
    Port 22
    User ubuntu
    IdentityFile ~/.ssh/id_rsa
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

```

## ローカルから接続確認

* AWSコマンドがない場合のエラー

``` :ローカルPC（Macの設定）
% ssh web

sh: aws: command not found

% curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
:
installer: The install was successful.
```

* aws configureしてない場合のエラー

``` :ローカルPC（Macの設定）
% ssh web
You must specify a region. You can also configure your region by running "aws configure".
kex_exchange_identification: Connection closed by remote host

% aws configure
AWS Access Key ID [None]: AKIXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: BEfXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

```

* セッションマネージャプラグインがローカルに入ってない場合のエラー

``` :ローカルPC（Macの設定）
% ssh web

An error occurred (TargetNotConnected) when calling the StartSession operation: i-06d97b1XXXXXXX is not connected.
kex_exchange_identification: Connection closed by remote host

% aws --version
aws-cli/2.2.36 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off

% session-manager-plugin --version
zsh: command not found: session-manager-plugin

% curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
% unzip sessionmanager-bundle.zip
% sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
Creating install directories: /usr/local/sessionmanagerplugin/bin
Creating Symlink from /usr/local/sessionmanagerplugin/bin/session-manager-plugin to /usr/local/bin/session-manager-plugin
Installation successful!

$ % session-manager-plugin --version
1.2.245.0

```
[参考：公式](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html)

* 変わらず接続できない

``` :ローカルPC（Macの設定）
% ssh web

An error occurred (TargetNotConnected) when calling the StartSession operation: i-06d97b1e8ac1xxxxx is not connected.
kex_exchange_identification: Connection closed by remote host
% ssh -vvv web
OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/user/.ssh/config
debug1: /Users/user/.ssh/config line 1: Applying options for iryoo-biz-mng-1a
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 47: Applying options for *
debug1: Executing proxy command: exec sh -c "aws ssm start-session --target i-06d97b1e8ac1xxxxx --document-name AWS-StartSSHSession --parameters 'portNumber=22'"
debug1: identity file /Users/user/.ssh/id_rsa type -1
debug1: identity file /Users/user/.ssh/id_rsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.1

An error occurred (TargetNotConnected) when calling the StartSession operation: i-06d97b1e8ac1xxxxx is not connected.
kex_exchange_identification: Connection closed by remote host

```

* AWS側権限が不足している場合のエラー

```
$ ssh web

An error occurred (403) when calling the StartSession operation: Server authentication failed: <UnauthorizedRequest xmlns=""><message>Forbidden.</message></UnauthorizedRequest>

//AWS権限を確認してみる
$ aws sts get-caller-identity

An error occurred (SignatureDoesNotMatch) when calling the GetCallerIdentity operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

//AWSSecretAccessKeyがおかしいとのこと、確認してみる
$ printenv | grep AWS
AWS_ACCESS_KEY_ID=*********************
AWS_SECRET_ACCESS_KEY=*********************

//確認した所間違っていた
正しい値を入れ直す

AWS_SECRET_ACCESS_KEY=*********************

//再度確認。権限の確認ができた。
$ aws sts get-caller-identity                                    
{
    "UserId": "*******************",
    "Account": "***************",
    "Arn": "arn:aws:iam::*************:user/********username"
}

//再度ログイン。成功。
$ ssh web
```

[参考：公式トラブルシューティング](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-troubleshooting.html#ssh-target-not-connected)

## コンソールから接続確認

* 上記対応でも改善しないためコンソールから確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/a2e5305f-40e6-429d-cac4-2cf993a49310.png)

* 以下の画面からエージェントが導入されているか確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/7990b4c0-519f-c3e9-db14-c6030032ac6a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/7ff435ca-a731-0b48-c7a6-bdfd74f977d8.png)

* SSMエージェントが導入されていないまたは有効でない場合はエラーとなる
* はじめにコンソールでSSMエージェントの状態を確認したほうが良い
* 自分でSSM環境を一から作った場合はこういったトラブルはあまりなさそう