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 엔드포인트를 생성하려면 사용자에게 다음 작업에 대한 권한이 필요합니다.

  • 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 요소에 * 와일드카드가 필요합니다.

Linux

이 예에서는 인스턴스에 대한 연결이 -포트 22(SSH)에서 설정되었는지, 인스턴스의 프라이빗 IP 주소가 10.0.1.0/31 범위(10.0.1.0~10.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.0~10.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": "*" } ] }