書くこと
プライベートサブネットに配置したWindowsのEC2インスタンスに、EC2 Instance Connectを使用して接続するときの備忘録です。
セキュリティグループとIAMポリシーの設定を記載しています。
また、RDP接続するときに内部エラーが発生したので、そのときの解決方法を記載したいと思います。
構成図
構成図です。
セキュリティグループ
VPCエンドポイント用
VPCエンドポイント用のセキュリティグループを作成しました。
インバウンドには何も許可を入れていません。
アウトバウンドに、EC2用のセキュリティグループを送信先として、RDP(3389)の許可設定を入れました。
EC2用
インバウンドに、VPCエンドポイントのセキュリティグループを送信元として、RDP(3389)の許可設定を入れました。
アウトバウンドには何も許可設定を入れていません。
IAMポリシーの作成
「ユーザーに EC2 Instance Connect Endpoint を使用したインスタンスへの接続を許可」を参考に、下記のIAMポリシーをIAMユーザーにアタッチしました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2InstanceConnect",
"Action": "ec2-instance-connect:OpenTunnel",
"Effect": "Allow",
"Resource": "arn:aws:ec2:us-east-1:123456789012:instance-connect-endpoint/eice-xxxxxxxxxxxxxxxxx",
"Condition": {
"NumericEquals": {
"ec2-instance-connect:remotePort": "3389"
},
"IpAddress": {
"ec2-instance-connect:privateIpAddress": "10.0.10.191/31"
},
"NumericLessThanEquals": {
"ec2-instance-connect:maxTunnelDuration": "3600"
}
}
},
{
"Sid": "Describe",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeInstanceConnectEndpoints"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
"Resource": "arn:aws:ec2:us-east-1:123456789012:instance-connect-endpoint/eice-xxxxxxxxxxxxxxxxx",
にはEICのVPCエンドポイントのarnを入力します。"ec2-instance-connect:remotePort": "3389"
ですが、接続先はRDPのポート3389なので書き換えました。"ec2-instance-connect:privateIpAddress": "10.0.10.191/31"
のIPアドレスは、接続するEC2インスタンスのIPアドレスに書き換えました。- あと、以下の部分は削除しました。
{
"Sid": "SSHPublicKey",
"Effect": "Allow",
"Action": "ec2-instance-connect:SendSSHPublicKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:osuser": "ami-username"
}
}
},
接続
AWSプロファイルの切り替え
先ほどのIAMポリシーは、Johnというアカウントにアタッチしています。
Powershellから、Johnユーザーのプロファイルに切り替えます。
PS > $env:AWS_PROFILE="john"
PS >
PS > aws configure list
Name Value Type Location
---- ----- ---- --------
profile john env ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE']
access_key ****************62WF shared-credentials-file
secret_key ****************xbzH shared-credentials-file
region us-east-1 config-file ~/.aws/config
aws ec2-instance-connect open-tunnelコマンドの実行(–max-tunnel-durationオプションなし)
PS > aws ec2-instance-connect open-tunnel --instance-id i-xxxxxxxxxxxxxxxxx --remote-port 3389 --local-port 13389
Listening for connections on port 13389.
接続先のポートは3389
で、接続元のポートは13389
としました。
Listening for connections on port 13389.
と表示されているので、つながっているように見えます。
リモートデスクトップ接続
ここでリモートデスクトップ接続をしてみます。
「内部エラーが発生しました。」と出てしまいました。
aws ec2-instance-connect open-tunnelコマンドの実行(–max-tunnel-durationオプションあり)
トラブルシューティングに書いてあったのですが、エラーが発生した場合は「–max-tunnel-duration」オプションを指定せよ、とのことです。
AccessDeniedException エラーが発生し、maxTunnelDuration 条件が IAM ポリシーで指定されている場合は、インスタンスに接続するときに必ず –max-tunnel-duration パラメータを指定してください。
エラーはAccessDeniedExceptionではありませんでしたが、ダメもとで「–max-tunnel-duration」オプションを指定してaws ec2-instance-connect open-tunnel
コマンドを実行してみました。
PS > aws ec2-instance-connect open-tunnel --instance-id i-xxxxxxxxxxxxxxxxx --remote-port 3389 --local-port 13389 --max-tunnel-duration 3600
Listening for connections on port 13389.
もう一度リモートデスクトップ接続
今度はパスワードが聞かれました。
問題なくログインできました。
コメント