この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS Systems Manager Session Managerを利用するとWindows・Linuxに関係なくクロスプラットフォームにシェルアクセス出来ます。
SSH/RDを使ってサーバー管理する場合、ポートの通信を許可し、さらに、接続元のIPアドレスを制限することが多かったと思います。 Session Managerの場合、ポート管理は不要になり、IAMだけでアクセスコントロールされます。
SSH/RDPで行っていたサーバー管理をSession Managerに切り替えるにあたり、ポート管理が不要になったのは嬉しいけれど、IP制限は継続したいというケース向けに、Session ManagerでIP制限する方法を紹介します。
やり方
AWS Systems Manager Session Manager はIAMでアクセスコントロールされているため、IP制限もIAMレベルで行います。
ユーザーが次のIAMポリシーによりSession Managerを利用する権限が与えられていたとします。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ssm:StartSession",
"ssm:TerminateSession",
"ssm:ResumeSession",
"ssm:DescribeSessions",
"ssm:GetConnectionStatus"
],
"Effect": "Allow",
"Resource": [
"*"
]
}
]
}
このポリシーに、アクセス元IPアドレス(192.0.2.0/24
または203.0.113.0/24
)で制限したのが次のポリシーです。
アクセス元IPアドレスが aws:SourceIp
で指定した CIDR にマッチする(IpAddress
)場合、Action
で指定した API を許可(Allow)します。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ssm:StartSession",
"ssm:TerminateSession",
"ssm:ResumeSession",
"ssm:DescribeSessions",
"ssm:GetConnectionStatus"
],
"Effect": "Allow",
"Resource": [
"*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.0.2.0/24",
"203.0.113.0/24"
]
}
}
}
]
}
補集合的に、アクセス元IPアドレスが aws:SourceIp
で指定した CIDR にマッチしない(NotIpAddress
)場合、Action
で指定した API を拒否(Deny)したのが次のポリシーです。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ssm:StartSession",
"ssm:TerminateSession",
"ssm:ResumeSession",
"ssm:DescribeSessions",
"ssm:GetConnectionStatus"
],
"Effect": "Deny",
"Resource": [
"*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"192.0.2.0/24",
"203.0.113.0/24"
]
}
}
}
]
}
別のポリシーで広範囲にアクセス権限を許可しており、ピンポイントにIP制限するポリシーを追加したい場合は、Deny 方式のほうが向いているでしょう 。
Session Manager系 API 全般で適用可能
Session Managerを利用したシェルアクセスは
の3種類があります。
いずれのケースでも ssm:StartSession
でセッションを開始するという点では同じため、IAM で IP制限する際は、この3つの違いを意識する必要はありません。
ノーマル Session Manager利用時にIP制限に引っかかった例です。
$ aws ssm start-session --target i-1234
An error occurred (AccessDeniedException) when calling the StartSession operation: User: arn:aws:iam::1234:user/test-user
is not authorized to perform: ssm:StartSession on resource: arn:aws:ec2:eu-central-1:1234:instance/i-1234
SSH Session Manager利用時にIP制限に引っかかった例です。
$ ssh -i /path/to/ssh.pem ec2-user@i-1234
An error occurred (AccessDeniedException) when calling the StartSession operation: User: arn:aws:iam::1234:user/test-user
is not authorized to perform: ssm:StartSession on resource: arn:aws:ec2:eu-central-1:1234:instance/i-1234
ssh_exchange_identification: Connection closed by remote host
いずれのケースでも ssm:StartSession
の実行に失敗しているのがわかります。