EC2インスタンスにIAMロールを設定
作成済みのEC2インスタンスに、Session Manager経由で接続するためのポリシーを含むIAMロールを設定します。
IAMロールの作成
AWS Management Consoleにログインし、「IAM」サービスにアクセスします。
サイドメニューから「ロール」をクリックし、「ロールの作成」ボタンをクリックします。
「AWSのサービス」の「EC2」を選択し、「次へ」ボタンをクリックします。
AmazonSSMManagedInstanceCore
ポリシーを選択し、「次へ」ボタンをクリックします。
ロール名および説明を入力し、「ロールを作成」ボタンをクリックします。
EC2インスタンスの設定
AWS Management Consoleにログインし、「EC2」サービスにアクセスします。
サイドメニューから「インスタンス」をクリックし、任意のEC2インスタンスを選択、「アクション」 > 「セキュリティ」 > 「IAMロールを変更」の順番にクリックします。
先ほど作成したIAMロールを選択し、「IAMロールの更新」ボタンをクリックします。
セキュリティグループの設定
Session Manager経由でEC2インスタンスに接続する場合、SSH (TCP/22) などのインバウンドルールは不要になるので削除します。
サイドメニューから「セキュリティグループ」をクリックし、任意のセキュリティグループを選択、「インバウンドルール」タブの中から「インバウンドのルールを編集」ボタンをクリックします。
SSH (TCP/22) などのインバウンドルールを削除し、「ルールを保存」ボタンをクリックします。
SSM Agentのインストール
EC2インスタンスにSSM Agentをインストールします。なお、Amazon Linux 2などの主要なAMIにはプリインストールされているのでインストールする必要はありません。
インストールが完了したら、以下のコマンドを実行してSSM Agentが起動しているか確認します。
$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2023-02-12 08:03:54 UTC; 24min ago
Main PID: 3087 (amazon-ssm-agen)
CGroup: /system.slice/amazon-ssm-agent.service
├─3087 /usr/bin/amazon-ssm-agent
├─3153 /usr/bin/ssm-agent-worker
└─3305 /usr/bin/ssm-session-worker SSM-06ad644cdfb4abd75
AWS CLIの設定 (オプション)
AWS CLIやSSH over Session ManagerでEC2インスタンスに接続する場合、以下の手順を行います。
AWS CLIのインストール
ローカルにAWS CLIをインストールします。
AWS CLIの設定
AWS CLIで使用するセキュリティ認証情報およびデフォルトのAWSリージョンを設定します。
AWS Management Consoleにログインし、「IAM」サービスにアクセスします。
サイドメニューから「ユーザー」をクリックし、任意のユーザーをクリックします。
「セキュリティ認証情報」タブの中から「アクセスキーを作成」ボタンをクリックします。
「コマンドラインインターフェイス (CLI)」を選択し、「上記のレコメンデーションを理解し〜」をチェックし「次へ」ボタンをクリックします。
「アクセスキーを作成」ボタンをクリックします。
「アクセスキー」および「シークレットアクセスキー」をコピーし、「完了」ボタンをクリックします(CSVファイルの保存は任意)。
ターミナルから以下のコマンドを実行し、AWS CLIの認証情報を設定します。
% aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]:
% aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
Session Managerプラグインのインストール
ローカルにSession Managerプラグインをインストールします。
% session-manager-plugin --version
1.2.398.0
EC2インスタンスへの接続方法
Session Manager経由でEC2インスタンスに接続する方法は3つあります。AWS CLIまたはSSH over Session Managerを使う場合、事前にAWS CLIの設定とSession Managerプラグインのインストールを行っておく必要があります。
AWS Management Console
セッションの開始
AWS Management Consoleにログインし、「Systems Manager」サービスにアクセスします。
サイドメニューの「セッションマネージャー」をクリックし、「セッションの開始」ボタンをクリックします。
任意のEC2インスタンスを選択し、「セッションを開始する」ボタンをクリックすると新しいタブでセッションが開始されます。
sh-4.2$ whoami
ssm-user
セッションの終了
セッションマネージャーから現在のセッション一覧が確認できます(後述のAWS CLIやSSH over Session Managerを使ったセッションも同様)。セッションを終了するには任意のセッションを選択し、「終了」ボタンをクリックします。
「終了」ボタンをクリックするとセッションを強制的に終了します。
AWS CLI
AWS CLIを使ってEC2インスタンスに接続するには以下のコマンドを実行します。
% aws ssm start-session --target i-XXXXXXXXXXXXXXXXX
i-XXXXXXXXXXXXXXXXX
はEC2インスタンスのインスタンスIDです。AWS Management Consoleで確認するか、EC2インスタンスで以下のコマンドを実行して確認してください。
$ curl http://169.254.169.254/latest/meta-data/instance-id
i-XXXXXXXXXXXXXXXXX
SSH over Session Manager
SSH over Session Managerを使ってEC2インスタンスに接続するには、SSH設定ファイルを以下のように変更します。
% vi ~/.ssh/config
# SSH over Session Manager
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
% ssh -i /path/to/keypair.pem ec2-user@i-XXXXXXXXXXXXXXXXX
特定の接続情報のみSSH over Session Managerで接続するには、SSH設定ファイルを以下のように変更します。
% vi ~/.ssh/config
Host my-ec2
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
HostName i-XXXXXXXXXXXXXXXXX
User ec2-user
IdentityFile /path/to/keypair.pem
% ssh my-ec2
トラブルシューティング
アクセスが拒否される
AWS CLIまたはSSH over Session Managerを使ってEC2インスタンスに接続しようとしたときに、以下のエラーが表示される場合があります。
An error occurred (AccessDeniedException) when calling the StartSession operation: User: arn:aws:iam::XXXXXXXXXX:user/xxxxx is not authorized to perform: ssm:StartSession on resource: arn:aws:ec2:ap-northeast-1:XXXXXXXXX:instance/i-XXXXXXXXXXXX because no identity-based policy allows the ssm:StartSession action
原因はIAMユーザーまたはEC2インスタンスに必要な権限が付与されていないためです。
IAMユーザーに権限を付与
IAMユーザーにAmazonSSMFullAccess
ポリシーを付与します。より上位のAdministratorAccess
などのポリシーが付与されている場合は必要ありません。
EC2インスタンスに権限を付与
「EC2インスタンスにIAMロールを設定」セクションを参照して、EC2インスタンスにAmazonSSMManagedInstanceCore
ポリシーを付与します。
EC2インスタンスが見つからない
AWS CLIまたはSSH over Session Managerを使ってEC2インスタンスに接続しようとしたときに、以下のエラーが表示される場合があります。
An error occurred (TargetNotConnected) when calling the StartSession operation: i-XXXXXXXXXXXXXXX is not connected.
EC2インスタンスのインスタンスIDやAWSリージョン情報が間違っている可能性があります。インスタンスIDはAWS Management Consoleで確認するか、EC2インスタンスで以下のコマンドを実行して確認してください。
$ curl http://169.254.169.254/latest/meta-data/instance-id
i-XXXXXXXXXXXXXXXXX
EC2インスタンスのあるAWSリージョンを確認してください。コマンド実行時にオプションを指定しなければデフォルトのAWSリージョンが使用されます。デフォルトのAWSリージョンとは異なる場合、コマンド実行時にオプションを指定します。
% aws ssm start-session --target i-XXXXXXXXXXXXXXXXX --region ap-northeast-1
% aws configure list
...
# デフォルトのAWSリージョン
region us-east-1 config-file ~/.aws/config