簡単にできるAWSのセキュリティ強化(番外編)
~ Session Manager編 ~
投稿日: 2022/06/22
はじめに
こんにちは、高橋です。
簡単にできるAWSのセキュリティ強化シリーズですが、今回は直接のセキュリティ関連サービスではありませんが、最近何度か問い合わせがあり、改めて個別検証を実施したAWS Systems ManagerのSession Managerについてご紹介したいと思います。こちらのサービスはセキュアにAmazon EC2インスタンスにアクセスする方法ということで、セキュリティ強化の番外編としてご容赦頂ければと思います。
1.AWS Systems Manager Session Managerとは?
AWS Systems Manager Session Manager(以下長いのでSession Manager)とはAmazon EC2インスタンスにsshを使用することなくアクセスできるサービスです。
Session ManagerはAmazon EC2インスタンス内で稼働するAWS Systems Managerエージェント(以下SSMエージェント)を経由でAWSのコンソール画面やAWS CLIからインスタンスのシェルにアクセスすることが可能で、インスタンスでsshのポートを開放する必要がありません。また、インターネットに公開されていないEC2インスタンスにもアクセスできるため、セキュアにEC2インスタンスを利用することができます。さらに、アクセス制御はIAMにて行われ、アクセス履歴はCloudTrailに保存されるため、ユーザ管理やアクセス管理を個々のOSから、AWS内の管理に移行することが可能です。
2.Amazon Inspectorの利用料金
AWS Systems Manager Session Managerは無償で利用できます。
3.Session ManagerでアクセスするためのEC2インスタンスの設定
Session Managerを利用するためにはSSMエージェント(以下SSMエージェント)がインストールされている必要があります。SSMエージェントはAmazon Linux2やWindowsであればデフォルトでインストールされているため、特にインスタンス側で設定を行わなくても利用することが可能です。ただし、Red Hat LinuxにはSSMエージェントがインストールされていないため、手動でインストールする必要があります。インストール手順はこちら(https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/agent-install-rhel.html)のサイトでご確認ください。
例 Red Hat Enterprise Linux 8(x86_64)の場合
[ec2-user@ip-192-168-0-48 ~]$ sudo dnf install -y https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
・
・
・
Installed:
amazon-ssm-agent-3.1.1511.0-1.x86_64
また、EC2インスタンスがSystems Managerにアクセスする必要があるため、EC2インスタンスに「AmazonSSMManagedInstanceCore」を含むIAMロールをアタッチする必要があります。
4.プライベートネットワーク内のEC2インスタンスへの接続方法
パブリックネットワークに配置されたインスタンスであれば、SSHにて簡単にアクセスできますが、プライベートネットワークに配置されたインスタンスの場合はそういうわけにはいきません。その場合に活躍するのがSession Managerです。プライベートネットワークに配置されたインスタンスにアクセスするには以下の2つの要件の内、どちらかを設定する必要があります。
① Nat Gatewayを作成し、Nat Gateway経由でアクセスする
② VPCエンドポイントを作成し、VPCエンドポイント経由でアクセスする
パッチやパッケージのインストールを行う都合上、Nat Gatewayは多くのケースで用意されるので、①で対応する場合の方が多いのではないかと推測されます。ただし、Nat Gatewayがない場合は、VPCエンドポイント経由でアクセスする必要があります。VPCエンドポイント経由でアクセスするためには、下記のVPCエンドポイントを作成する必要があります。
サービス名 | |
---|---|
com.amazonaws.[region].ssm | 必須 |
com.amazonaws.[region].ssmmessages | 必須 |
com.amazonaws.[region].ec2messages | 必須 |
com.amazonaws.[region].s3 | 必須 |
com.amazonaws.[region].kms | 必須 |
com.amazonaws.[region].logs | 必須 |
com.amazonaws.[region].monitoring | 必須 |
VPCエンドポントの作成例
1. AWSコンソールにてVPCのページを開き、左のメニューからエンドポイントを選択し、画面右上の「エンドポイントを作成」をクリックする。

2. 名前タグ欄に任意の名前を入力し、サービスカテゴリからAWSのサービスを選択し、サービスから上記の表のサービスから1つ選択し、VPCでインスタンスが配置されたVPCを選択したら、画面下部の「エンドポイントを作成」をクリックして、VPCエンドポイントを作成します。

5.IAMユーザごとにアクセス可能なEC2インスタンスの制御
IAMユーザがSession Manger経由でインスタンスにアクセスするにはIAMポリシーにて権限を付与する必要があります。ただし、ただ権限を付与しただけでは、そのIAMユーザは全てのEC2のOS内部にアクセスすることができるようになってしまいます。それを制限するためには下記の様に、IAMポリシーを設定する必要があります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ec2:ap-northeast-1:<アカウントID>:instance/<インスタンスID>"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession",
"ssm:ResumeSession"
],
"Resource": [
"arn:aws:ssm:*:*:session/${aws:username}-*"
]
}
]
}
6.Session Managerを用いたインスタンスへのアクセス
Session Managerを用いたインスタンスにアクセスする方法はAWSコンソールからとAWS CLIからの2つの方法がございます。AWSコンソールからのアクセスはAWS Systems Managerの画面のセッションマネージャーのページから、アクセスしたいインスタンスを選択し、「セッションを開始する」をクリックするだけです。


また、AWS CLIからアクセスする場合は、下記のコマンドを実行します。
> aws ssm start-session --target <インスタンスID> --profile <プロファイル名>
実行例
PS C:\Users\takas> aws ssm start-session --target i-XXXXXXXXXXXXXXX --profile test
Starting session with SessionId: ssmtest-00e9e86c139dfe76d
sh-4.2$
さいごに
今回はAWS環境のセキュリティ強化の番外編としてSession Managerについてご紹介しました。AWS社のベストプラクティス的にEC2インスタンスはパブリックネットワークに配置するのではなく、プライベートネットワークに配置することが推奨され、また昨今セキュリティに対する対策が強化され、AWS上のEC2インスタンスへのアクセスが制限されている会社も増えるなど、EC2インスタンス内のOSにアクセスが難しくなってきています。そういった背景もあり、EC2へのアクセス方法に関する問い合わせが増え、今回記事を記載することにしました。今回の記事が同様のお悩みを抱えている方の解決に役立てばと思います。
CTCは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。