AWS Systems Manager Fleet Managerで、特定のEC2のみRDP接続できるよう制限する
こんにちは!クラウド事業本部の吉田です。
SSM Session Managerで接続するEC2インスタンスをタグベースで制御することが可能です。
そちらの実装方法は、下記のブログと公式ドキュメントが参考になります。
[ IAM版 ]Session Manager で特定の EC2 のみアクセスできるよう制限する | DevelopersIO
Session Manager の追加サンプル IAM ポリシー - AWS Systems Manager #例 3: タグに基づいてアクセスを制限
当記事は、そのFleet ManagerによるRDP接続バージョンとなります。
SSM Session Manger版とは少し異なる部分があり、引っかかりやすいと思いますので、参考になりましたら幸いです。
結論
下記のIAMポリシーをIAMユーザーにアタッチしてください。
(EC2にアタッチするタグは適宜変更していただいて問題ありません。)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowEc2andGUIconnect",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ssm-guiconnect:*",
"ssm:DescribeInstanceProperties"
],
"Resource": "*"
},
{
"Sid": "AllowStartSessionOnTaggedInstances",
"Effect": "Allow",
"Action": "ssm:StartSession",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringLike": {
"ssm:resourceTag/SsmAccess": [
"true"
]
}
}
},
{
"Sid": "AllowStartSessionOnSSMDocuments",
"Effect": "Allow",
"Action": "ssm:StartSession",
"Resource": [
"arn:aws:ssm:*:*:document/AWS-StartPortForwardingSession"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession",
"ssm:ResumeSession"
],
"Resource": "arn:aws:ssm:*:*:session/${aws:username}-*"
}
]
}
SSM Session Manger版との違い
①「ssm-guiconnect:*」アクションの許可
コンソールからRDP接続するには下記のアクションの許可が必要となります。
- ssm-guiconnect:CancelConnection
- ssm-guiconnect:GetConnection
- ssm-guiconnect:StartConnection
接続を開始するためのアクセス許可
コンソールで EC2 インスタンスへの RDP 接続を作成するには、次のアクセス許可が必要です。
- ssm-guiconnect:CancelConnection
- ssm-guiconnect:GetConnection
- ssm-guiconnect:StartConnection
引用元:Remote Desktop を使用して Windows Server マネージドインスタンスに接続する - AWS Systems Manager
サンプルポリシーでは、「ssm-guiconnect:*」で丸めておりますが、ここは適宜変更してください。
②SSM Document(AWS-StartPortForwardingSession)に対するssm:StartSession許可追加
ここが私が実装時に躓いた部分です。
SSM Session Manger版でも、EC2上にアタッチしているタグベース制御がある形でssm:StartSession許可を定義しております。
ただ、Fleet ManagerによるRDP接続の場合、RDP接続にSSM Document(AWS-StartPortForwardingSession)を利用しているため、
SSM Document(AWS-StartPortForwardingSession)に対するssm:StartSession許可も必要となります。
したがって、タグベース制御のssm:StartSession許可を定義しているステートメントに加えて、SSM Document(AWS-StartPortForwardingSession)に対するssm:StartSession許可を定義したステートメントを追加する必要があります。
上記の権限がない場合、下記のエラーが発生します。
403: An error occurred (AccessDeniedException) when calling the StartSession operation: User: arn:aws:iam::XXXXXXX:user/fleet-test-user is not authorized to perform: ssm:StartSession on resource: arn:aws:ssm:ap-northeast-1::document/AWS-StartPortForwardingSession because no identity-based policy allows the ssm:StartSession action
最後に
SSM Documentに対するssm:StartSession許可は抜け漏れやすい箇所だと思います。
この記事がどなかかの役に立てば嬉しいです。






