

# EC2 Instance Connect エンドポイント を使用するためのアクセス許可の付与
<a name="permissions-for-ec2-instance-connect-endpoint"></a>

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

IAM ポリシーの作成について詳しくは、「*IAM ユーザーガイド*」の「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。

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

**Topics**
+ [EC2 Instance Connect エンドポイントを作成、記述、削除するアクセス許可](#iam-CreateInstanceConnectEndpoint)
+ [ユーザーに EC2 Instance Connect エンドポイントを使用してインスタンスへ接続するためのアクセス許可](#iam-OpenTunnel)
+ [特定の IP アドレス範囲からのみ接続できるアクセス許可](#iam-sourceip)

## EC2 Instance Connect エンドポイントを作成、記述、削除するアクセス許可
<a name="iam-CreateInstanceConnectEndpoint"></a>

EC2 Instance Connect エンドポイントを作成して変更するには、ユーザーには次のアクションのアクセス許可が必要です。
+ `ec2:CreateInstanceConnectEndpoint`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateTags`
+ `ec2:ModifyInstanceConnectEndpoint`
+ `iam:CreateServiceLinkedRole`

EC2 Instance Connect エンドポイントを記述して削除するには、ユーザーに次のアクションに対するアクセス許可が必要です。
+ `ec2:DescribeInstanceConnectEndpoints` 
+ `ec2:DeleteInstanceConnectEndpoint`

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

**IAM ポリシーの例**

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

## ユーザーに EC2 Instance Connect エンドポイントを使用してインスタンスへ接続するためのアクセス許可
<a name="iam-OpenTunnel"></a>

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

**条件**
+ `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 エンドポイントを使用して Amazon EC2 インスタンスに接続する](connect-using-eice.md)」を参照ください。　　　

ユーザーには、EC2 Instance Connect エンドポイントに対するリソースタグの有無に基づいて、インスタンスへの接続を確立するためのアクセス許可を付与することもできます。詳細については、「* IAM ユーザーガイド*」の「[IAM のポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)」を参照してください。

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

**IAM ポリシーの例**

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

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

------
#### [ Linux ]

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

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "EC2InstanceConnect",
            "Action": "ec2-instance-connect:OpenTunnel",
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:{{us-east-1}}:{{111122223333}}: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.0`～`10.0.1.1`) の範囲内であるかどうか、および `maxTunnelDuration` が `3600` 秒以下であるかどうかが評価されます。`3600` 秒(1 時間) 後 に接続が切断されます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "EC2InstanceConnect",
            "Action": "ec2-instance-connect:OpenTunnel",
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:{{us-east-1}}:{{111122223333}}: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 アドレス範囲からのみ接続できるアクセス許可
<a name="iam-sourceip"></a>

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

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "ec2-instance-connect:OpenTunnel",
            "Resource": "arn:aws:ec2:{{us-east-1}}:{{111122223333}}: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": "*"
        }
    ]
}
```

------