EC2 Instance ConnectでWindowsにRDP接続するときに内部エラーが発生した

もくじ

書くこと

プライベートサブネットに配置した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.

もう一度リモートデスクトップ接続

今度はパスワードが聞かれました。

問題なくログインできました。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

もくじ
閉じる