

# IAM への EC2 Instance Connect のアクセス許可の付与
<a name="ec2-instance-connect-configure-IAM-role"></a>

EC2 Instance Connect を使用してインスタンスに接続するには、以下のアクションと条件に対するアクセス許可をユーザーに付与する IAM ポリシーを作成する必要があります。
+ `ec2-instance-connect:SendSSHPublicKey` アクション – パブリックキーをインスタンスにプッシュするためのアクセス許可を付与します。
+ `ec2:osuser` 条件 – パブリックキーをインスタンスにプッシュできる OS ユーザーの名前を指定します。インスタンスの起動に使用した AMI のデフォルトのユーザー名を使用します。デフォルトのユーザー名は AL2023 と Amazon Linux 2 では `ec2-user`、Ubuntu では `ubuntu` です。
+ `ec2:DescribeInstances` アクション — ラッパーがこのアクションを呼び出すため、EC2 コンソールを使用するときに必要です。ユーザーには、別のポリシーからこのアクションを呼び出すためのアクセス許可が既に付与されている場合があります。
+ `ec2:DescribeVpcs` アクション – IPv6 アドレスに接続するときに必要です。

特定の EC2 インスタンスへのアクセスを制限することを検討してください。それ以外の場合、`ec2-instance-connect:SendSSHPublicKey` アクションのアクセス許可を持つすべての IAM プリンシパルは、すべての EC2 インスタンスに接続できます。リソース ARN を指定するか、リソースタグを[条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2instanceconnect.html#amazonec2instanceconnect-policy-keys)として使用して、アクセスを制限することができます。

詳細については、[Amazon EC2 Instance Connect のアクション、リソース、および条件キー ](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2instanceconnect.html)を参照してください。

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

## ユーザーに特定のインスタンスへの接続を許可
<a name="eic-permissions-allow-users-to-connect-to-specific-instances"></a>

次の IAM ポリシーは、リソース ARN で識別される特定のインスタンスに接続するアクセス許可を付与します。

次の IAM ポリシーの例では、以下のアクションと条件が指定されています。
+ `ec2-instance-connect:SendSSHPublicKey` アクションは、リソース ARN で指定された 2 つのインスタンスに接続するためのアクセス許可をユーザーに付与します。*すべての* EC2 インスタンスに接続するためのアクセス許可をユーザーに付与するには、リソース ARN を `*` (ワイルドカード) に置き換えます。
+ `ec2:osuser` 条件により、接続時に {{ami-username}} が指定されている場合にのみ、インスタンスに接続するためのアクセス許可が付与されます。
+ `ec2:DescribeInstances` アクションは、コンソールを使用してインスタンスに接続するユーザーにアクセス許可を付与するように指定されます。ユーザーが SSH クライアントのみを使用してインスタンスに接続する場合は、`ec2:DescribeInstances` を省略できます。`ec2:Describe*` API アクションはリソースレベルのアクセス許可をサポートしないことに注意してください。したがって、`Resource` の要素には、`*` (ワイルドカード) が必要です。
+ `ec2:DescribeVpcs` アクションは、IPv6 アドレスでインスタンスに接続するために、コンソールを使用してユーザーにアクセス許可を付与するように指定されます。ユーザーがパブリック IPv4 アドレスのみを使用する場合は、`ec2:DescribeVpcs` を省略できます。`ec2:Describe*` API アクションはリソースレベルのアクセス許可をサポートしないことに注意してください。したがって、`Resource` の要素には、`*` (ワイルドカード) が必要です。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "ec2-instance-connect:SendSSHPublicKey",
            "Resource": [
                "arn:aws:ec2:{{us-east-1}}:{{111122223333}}:instance/{{i-1234567890abcdef0}}",
                "arn:aws:ec2:{{us-east-1}}:{{111122223333}}:instance/{{i-0598c7d356eba48d7}}"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:osuser": "{{ami-username}}"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## ユーザーに特定のタグを持つインスタンスへの接続を許可
<a name="eic-permissions-allow-users-to-connect-to-instances-with-specific-tags"></a>

属性ベースのアクセス制御 (ABAC) は、ユーザーおよび AWS リソースにアタッチできるタグに基づいてアクセス許可を定義する認可戦略です。リソースタグを使用してインスタンスへのアクセスを制御することもできます。AWS リソースへのアクセスを制御するタグの使用の詳細については、「*IAM ユーザーガイド*」の「[AWS リソースへのアクセス制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-resources)」を参照してください。

次の IAM ポリシーの例では、`ec2-instance-connect:SendSSHPublicKey` アクションは、インスタンスに key=`tag-key` と value=`tag-value` が付いたリソースタグが割り当てられていることを条件に、(リソース ARN の `*` (ワイルドカード) で示される) 任意のインスタンスに接続するためのアクセス許可をユーザーに付与します。

`ec2:DescribeInstances` アクションは、コンソールを使用してインスタンスに接続するユーザーにアクセス許可を付与するように指定されます。ユーザーが SSH クライアントのみを使用してインスタンスに接続する場合は、`ec2:DescribeInstances` を省略できます。`ec2:Describe*` API アクションはリソースレベルのアクセス許可をサポートしないことに注意してください。したがって、`Resource` の要素には、`*` (ワイルドカード) が必要です。

`ec2:DescribeVpcs` アクションは、IPv6 アドレスでインスタンスに接続するために、コンソールを使用してユーザーにアクセス許可を付与するように指定されます。ユーザーがパブリック IPv4 アドレスのみを使用する場合は、`ec2:DescribeVpcs` を省略できます。`ec2:Describe*` API アクションはリソースレベルのアクセス許可をサポートしないことに注意してください。したがって、`Resource` の要素には、`*` (ワイルドカード) が必要です。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": "ec2-instance-connect:SendSSHPublicKey", 
            "Resource": "arn:aws:ec2:{{us-east-1}}:{{111122223333}}:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/{{tag-key}}": "{{tag-value}}"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        }
    ]
}
```

------