EC2 Instance Connect エンドポイント を使用するためのアクセス許可の付与 - Amazon Elastic Compute Cloud

EC2 Instance Connect エンドポイント を使用するためのアクセス許可の付与

デフォルトでは、IAM エンティティには EC2 Instance Connect エンドポイント を作成、記述、変更するためのアクセス許可はありません。IAM 管理者は、必要なリソースに対して特定のアクションを実行するために必要な IAM ポリシーを作成できます。

IAM ポリシーの作成の詳細については、「IAM ユーザーガイド」の「IAM ポリシーの作成」を参照してください。

以下のポリシー例では、ユーザーの EC2 Instance Connect エンドポイントへのアクセス許可を制御する方法を示しています。

EC2 Instance Connect エンドポイント を作成、記述、削除するためのアクセス許可

EC2 Instance Connect Endpoint を作成するには、ユーザーには次のアクションのアクセス許可が必要です。

  • ec2:CreateInstanceConnectEndpoint

  • ec2:CreateNetworkInterface

  • ec2:CreateTags

  • iam:CreateServiceLinkedRole

EC2 Instance Connect Endpoint を記述して削除するには、ユーザーに次のアクションに対するアクセス許可が必要です。

  • ec2:DescribeInstanceConnectEndpoints

  • ec2:DeleteInstanceConnectEndpoint

すべてのサブネットで EC2 Instance Connect Endpoint を作成、記述、削除するためのアクセス許可を付与するポリシーを作成できます。または、サブネット ARN を許可済みの Resource として指定するか、ec2:SubnetID 条件キーを使用して、指定したサブネットのアクションのみを制限することもできます。aws:ResourceTag 条件キーを使用して、特定のタグによるエンドポイントの作成を明示的に許可または拒否することもできます。詳細については、「 IAM ユーザーガイド」の「IAM のポリシーとアクセス許可」を参照してください。

IAM ポリシーの例

次の IAM ポリシーの例では、[Resource] セクションはアスタリスク (*) で指定されたすべてのサブネットでエンドポイントを作成および削除するアクセス許可を付与しています。ec2:Describe* API アクションは、リソースレベルのアクセス許可をサポートしていません。したがって、Resource の要素には、* (ワイルドカード) が必要です。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "GrantAllActionsInAllSubnets", "Action": [ "ec2:CreateInstanceConnectEndpoint", "ec2:DeleteInstanceConnectEndpoint", "ec2:CreateNetworkInterface", "ec2:CreateTags", "iam:CreateServiceLinkedRole" ], "Effect": "Allow", "Resource": "arn:aws:ec2:region:account-id:subnet/*" }, { "Action": [ "ec2:CreateNetworkInterface" ], "Effect": "Allow", "Resource": "arn:aws:ec2:::security-group/*" }, { "Sid": "DescribeInstanceConnectEndpoints", "Action": [ "ec2:DescribeInstanceConnectEndpoints" ], "Effect": "Allow", "Resource": "*" } ] }

ユーザーに EC2 Instance Connect エンドポイント を使用してインスタンスへ接続するためのアクセス許可

ec2-instance-connect:OpenTunnel アクションは、EC2 Instance Connect Endpoint を介して接続するインスタンスへの TCP 接続を確立するためのアクセス許可を付与します。使用する EC2 Instance Connect Endpoint を指定できます。または、アスタリスク (*) が付いている Resource を使用すると、ユーザーは利用可能な任意の EC2 Instance Connect Endpoint を使用できます。条件キーとしてのリソースタグの有無に基づいて、インスタンスへのアクセスを制限することもできます。

条件
  • ec2-instance-connect:remotePort — TCP 接続の確立に使用できるインスタンスのポート。この条件キーを使用した場合、ポリシーで指定されているポート以外のポート上のインスタンスに接続しようとすると失敗します。

  • ec2-instance-connect:privateIpAddress — TCP 接続を確立するインスタンスに関連する宛先プライベート IP アドレス。例えば、1 つの IP アドレス (10.0.0.1/32 など) を指定することも、CIDR を介して IP 範囲 (10.0.1.0/28 など) を指定することもできます。この条件キーを使用した場合、別のプライベート IP アドレスまたは CIDR 範囲外のインスタンスに接続しようとすると失敗します。

  • ec2-instance-connect:maxTunnelDuration — 確立された TCP 接続の最大期間。単位は秒で、期間の範囲は最小 1 秒から最大 3,600 秒 (1 時間) です。条件が指定されていない場合、デフォルトの時間は 3,600 秒 (1 時間) に設定されます。IAM ポリシーで指定された期間よりも長く、またはデフォルトの最大期間よりも長くインスタンスに接続しようとすると、失敗します。指定した期間が経過すると、接続は切断されます。

    maxTunnelDuration は IAM ポリシーで指定されていて、指定した値が 3,600 秒 (デフォルト) 未満の場合は、インスタンスに接続するときにコマンドで --max-tunnel-duration を指定する必要があります。インスタンスへの接続方法については、「EC2 Instance Connect Endpoint を使用して Amazon EC2 インスタンスに接続する」を参照ください。   

ユーザーには、EC2 Instance Connect エンドポイントに対するリソースタグの有無に基づいて、インスタンスへの接続を確立するためのアクセス許可を付与することもできます。詳細については、「 IAM ユーザーガイド」の「IAM のポリシーとアクセス許可」を参照してください。

Linux インスタンスでは、ec2-instance-connect:SendSSHPublicKey アクションでパブリックキーをインスタンスにプッシュするアクセス許可が付与されます。ec2:osuser 条件は、パブリックキーをインスタンスにプッシュできる OS (オペレーティングシステム) ユーザーの名前を指定します。インスタンスの起動に使用した AMI のデフォルトのユーザー名を使用します。詳細については、「IAM への EC2 Instance Connect のアクセス許可の付与」を参照してください。

IAM ポリシーの例

次の IAM ポリシーの例では、IAM プリンシパルは、指定されたエンドポイント ID eice-123456789abcdef で識別される指定された EC2 Instance Connect Endpoint のみを使用してインスタンスに接続できます。接続は、すべての条件が満たされた場合にのみ正常に確立されます。

注記

ec2:Describe* API アクションは、リソースレベルのアクセス許可をサポートしていません。したがって、Resource の要素には、* (ワイルドカード) が必要です。

Linux

この例では、インスタンスへの接続がポート 22 (SSH) で確立されているかどうか、インスタンスのプライベート IP アドレスが 10.0.1.0/31 (10.0.1.010.0.1.1) の範囲内であるかどうか、および maxTunnelDuration3600 秒以下であるかどうかが評価されます。3600 秒(1 時間) 後 に接続が切断されます。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "EC2InstanceConnect", "Action": "ec2-instance-connect:OpenTunnel", "Effect": "Allow", "Resource": "arn:aws:ec2:region:account-id:instance-connect-endpoint/eice-123456789abcdef", "Condition": { "NumericEquals": { "ec2-instance-connect:remotePort": "22" }, "IpAddress": { "ec2-instance-connect:privateIpAddress": "10.0.1.0/31" }, "NumericLessThanEquals": { "ec2-instance-connect:maxTunnelDuration": "3600" } } }, { "Sid": "SSHPublicKey", "Effect": "Allow", "Action": "ec2-instance-connect:SendSSHPublicKey", "Resource": "*", "Condition": { "StringEquals": { "ec2:osuser": "ami-username" } } }, { "Sid": "Describe", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceConnectEndpoints" ], "Effect": "Allow", "Resource": "*" } ] }
Windows

この例では、インスタンスへの接続がポート 3389 (RDP) で確立されているかどうか、インスタンスのプライベート IP アドレスが 10.0.1.0/31 (10.0.1.010.0.1.1) の範囲内であるかどうか、および maxTunnelDuration3600 秒以下であるかどうかが評価されます。3600 秒(1 時間) 後 に接続が切断されます。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "EC2InstanceConnect", "Action": "ec2-instance-connect:OpenTunnel", "Effect": "Allow", "Resource": "arn:aws:ec2:region:account-id:instance-connect-endpoint/eice-123456789abcdef", "Condition": { "NumericEquals": { "ec2-instance-connect:remotePort": "3389" }, "IpAddress": { "ec2-instance-connect:privateIpAddress": "10.0.1.0/31" }, "NumericLessThanEquals": { "ec2-instance-connect:maxTunnelDuration": "3600" } } }, { "Sid": "Describe", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceConnectEndpoints" ], "Effect": "Allow", "Resource": "*" } ] }

特定の IP アドレス範囲からのみ接続できるアクセス許可

次の IAM ポリシーの例では、ポリシーで指定された IP アドレス範囲内の IP アドレスから接続することを条件に、IAM プリンシパルがインスタンスに接続することを許可しています。IAM プリンシパルが 192.0.2.0/24 (このポリシーの IP アドレス範囲の例) 内ではない IP アドレスから OpenTunnel の呼び出しを行った場合、応答は Access Denied になります。詳細については、IAM ユーザーガイドaws:SourceIp を参照してください。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2-instance-connect:OpenTunnel", "Resource": "arn:aws:ec2:region:account-id:instance-connect-endpoint/eice-123456789abcdef", "Condition": { "IpAddress": { "aws:SourceIp": "192.0.2.0/24" }, "NumericEquals": { "ec2-instance-connect:remotePort": "22" } } }, { "Sid": "SSHPublicKey", "Effect": "Allow", "Action": "ec2-instance-connect:SendSSHPublicKey", "Resource": "*", "Condition": { "StringEquals": { "ec2:osuser": "ami-username" } } }, { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceConnectEndpoints" ], "Resource": "*" } ] }