EC2 Instance Connect 엔드포인트를 사용할 수 있는 권한 부여
기본적으로 IAM 엔터티에는 EC2 Instance Connect 엔드포인트를 생성, 설명 또는 수정할 수 있는 권한이 없습니다. IAM 관리자는 필요한 리소스에서 특정 작업을 수행하는 데 필요한 권한을 부여하는 IAM 정책을 생성할 수 있습니다.
IAM 정책 생성에 대한 자세한 내용은 IAM 사용 설명서의 IAM 정책 생성을 참조하세요.
다음 예제 정책은 EC2 Instance Connect 엔드포인트에 대해 필요한 권한을 제어하는 방법을 보여줍니다.
예시
EC2 Instance Connect 엔드포인트 생성, 설명 및 삭제할 수 있는 권한
EC2 Instance Connect 엔드포인트를 생성하려면 사용자에게 다음 작업에 대한 권한이 필요합니다.
-
ec2:CreateInstanceConnectEndpoint
-
ec2:CreateNetworkInterface
-
ec2:CreateTags
-
iam:CreateServiceLinkedRole
EC2 Instance Connect 엔드포인트를 설명 및 삭제하려면 사용자에게 다음 작업에 대한 권한이 필요합니다.
-
ec2:DescribeInstanceConnectEndpoints
-
ec2:DeleteInstanceConnectEndpoint
모든 서브넷에서 EC2 Instance Connect 엔드포인트의 생성, 설명, 삭제 권한을 부여하는 정책을 생성할 수 있습니다. 또는 서브넷 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 엔드포인트를 통해 연결하도록 인스턴스에 대한 TCP 연결을 설정하는 권한을 부여합니다. 사용할 EC2 Instance Connect 엔드포인트를 지정할 수 있습니다. 또는 별표(*
)가 있는 Resource
를 사용하면 사용 가능한 모든 EC2 Instance Connect 엔드포인트를 사용할 수 있습니다. 조건 키로서 리소스 태그의 존재 여부에 따라 인스턴스에 대한 액세스를 제한할 수도 있습니다.
조건
-
ec2-instance-connect:remotePort
- TCP 연결 설정에 사용할 수 있는 인스턴스의 포트. 이 조건 키가 사용되는 경우 정책에 지정된 포트가 아닌 다른 포트에서 인스턴스에 연결하려고 하면 오류가 발생합니다. -
ec2-instance-connect:privateIpAddress
- TCP 연결을 설정하려는 인스턴스와 연결된 대상 프라이빗 IP 주소. 단일 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 인스턴스 연결 엔드포인트를 사용하여 Amazon EC2 인스턴스에 연결 섹션을 참조하세요.
또한 EC2 Instance Connect 엔드포인트의 리소스 태그 존재 여부에 따라 사용자에게 인스턴스에 대한 연결을 설정할 권한을 부여할 수 있습니다. 자세한 내용은 IAM 사용자 가이드에서 IAM의 정책 및 권한을 참조하세요.
Linux 인스턴스의 경우 ec2-instance-connect:SendSSHPublicKey
작업은 인스턴스에 공개 키를 푸시할 수 있는 권한을 부여합니다. ec2:osuser
조건은 퍼블릭 키를 인스턴스에 푸시할 수 있는 OS(운영 체제) 사용자의 이름을 지정합니다. 인스턴스를 시작하는 데 사용한 AMI의 기본 사용자 이름을 사용합니다. 자세한 내용은 EC2 Instance Connect에 대한 IAM 권한 부여 단원을 참조하십시오.
IAM 정책 예제
다음 IAM 정책 예제는 IAM 보안 주체가 지정된 엔드포인트 ID eice-123456789abcdef
로 식별되는 지정된 EC2 인스턴스 연결 엔드포인트만 사용하여 인스턴스에 연결할 수 있도록 허용합니다. 모든 조건이 충족되는 경우에만 연결이 성공적으로 설정됩니다.
참고
ec2:Describe*
API 작업은 리소스 수준 권한을 지원하지 않습니다. 따라서 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": "*" } ] }