EC2 Instance Connect Endpoint를 사용할 권한 부여
EC2 Instance Connect Endpoint를 사용할 권한 부여
기본적으로 IAM 엔터티는 EC2 Instance Connect Endpoint를 생성·설명·수정할 권한이 없어요. IAM 관리자는 IAM 정책을 만들어 필요한 리소스에 대해 특정 작업을 수행하는 데 필요한 권한을 부여할 수 있습니다. IAM 정책 생성에 대한 자세한 내용은 IAM 사용 설명서의 "IAM 정책 생성"을 참고하세요.
출처: 문서
본문
다음 예제 정책들은 사용자가 EC2 Instance Connect Endpoint에 대해 갖는 권한을 어떻게 제어할 수 있는지 보여줘요.
EC2 Instance Connect Endpoint 생성·설명·수정·삭제 권한
EC2 Instance Connect Endpoint를 생성·수정하려면 사용자에게 다음 작업에 대한 권한이 필요해요.
ec2:CreateInstanceConnectEndpointec2:CreateNetworkInterfaceec2:CreateTagsec2:ModifyInstanceConnectEndpointiam:CreateServiceLinkedRole
EC2 Instance Connect Endpoint를 설명·삭제하려면 사용자에게 다음 작업에 대한 권한이 필요해요.
ec2:DescribeInstanceConnectEndpointsec2:DeleteInstanceConnectEndpoint
모든 서브넷에서 EC2 Instance Connect Endpoint를 생성·설명·수정·삭제하는 권한을 부여하는 정책을 만들 수 있어요. 또는 허용된 Resource로 서브넷 ARN을 지정하거나 ec2:SubnetID 조건 키를 사용해 특정 서브넷으로만 동작을 제한할 수 있어요. aws:ResourceTag 조건 키를 사용해 특정 태그가 있는 엔드포인트 생성만 명시적으로 허용·거부할 수도 있어요. 자세한 내용은 IAM 사용 설명서의 "IAM의 정책 및 권한"을 참고하세요.
예제 IAM 정책 — 다음 예제 IAM 정책에서 Resource 섹션은 별표(*)로 지정된 모든 서브넷에서 엔드포인트를 생성·수정·삭제하는 권한을 부여해요. ec2:Describe* API 작업은 리소스 수준 권한을 지원하지 않으므로, Resource 요소에 * 와일드카드가 필요합니다.
EC2 Instance Connect Endpoint로 인스턴스에 연결하는 권한
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 주소예요.10.0.0.1/32같은 단일 IP 주소나10.0.1.0/28같은 CIDR을 통한 IP 범위를 지정할 수 있어요. 이 조건 키를 사용하면 다른 사설 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의 리소스 태그 존재 여부에 따라 사용자에게 인스턴스 연결 권한을 부여할 수도 있어요.
Linux 인스턴스의 경우 ec2-instance-connect:SendSSHPublicKey 작업이 공개 키를 인스턴스에 푸시하는 권한을 부여해요. ec2:osuser 조건은 공개 키를 인스턴스에 푸시할 수 있는 OS(운영 체제) 사용자 이름을 지정해요. 인스턴스 시작에 사용한 AMI의 기본 사용자 이름을 사용하세요.
예제 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.0~10.0.1.1) 내에 있는지, maxTunnelDuration이 3600초 이하인지를 평가해요. 연결은 3600초(1시간) 후 끊깁니다.
{
"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 범위 내에 있는지, maxTunnelDuration이 3600초 이하인지를 평가해요. 연결은 3600초(1시간) 후 끊깁니다.
{
"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 주소 범위에서만 연결하는 권한
다음 예제 IAM 정책은 IAM 프린시펄이 정책에 지정된 IP 주소 범위 내의 IP 주소에서 연결할 때만 인스턴스에 연결할 수 있게 해요. IAM 프린시펄이 이 정책의 예시 IP 주소 범위인 192.0.2.0/24 밖의 IP 주소에서 OpenTunnel을 호출하면 응답은 Access Denied입니다. 자세한 내용은 IAM 사용 설명서의 aws:SourceIp를 참고하세요.
{
"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": "*"
}
]
}
더 알아보기 (Learn more)
- 사설 IP와 EC2 Instance Connect Endpoint로 연결과 보안 그룹 문서를 확인하세요.