EC2 Instance Connect에 대한 IAM 권한 부여하기
EC2 Instance Connect에 대한 IAM 권한 부여하기
EC2 Instance Connect로 인스턴스에 연결하려면 사용자에게 다음 작업(action)과 조건(condition)에 대한 권한을 부여하는 IAM 정책을 만들어야 해요. 이 절에서 필요한 권한과 예시 정책을 살펴볼게요.
출처: 문서
본문
EC2 Instance Connect로 인스턴스에 연결하려면 사용자에게 다음 작업과 조건에 대한 권한을 부여하는 IAM 정책을 만들어야 해요.
ec2-instance-connect:SendSSHPublicKey작업 – 공개 키를 인스턴스에 푸시할 권한을 부여해요.ec2:osuser조건 – 공개 키를 인스턴스에 푸시할 수 있는 OS 사용자 이름을 지정해요. 인스턴스를 시작할 때 사용한 AMI의 기본 사용자 이름을 사용하세요. AL2023과 Amazon Linux 2의 기본 사용자 이름은ec2-user, Ubuntu는ubuntu예요.ec2:DescribeInstances작업 – EC2 콘솔을 사용할 때 필요해요. 래퍼(wrapper)가 이 작업을 호출하기 때문이에요. 사용자가 다른 정책에서 이미 이 작업에 대한 권한을 가지고 있을 수도 있어요.ec2:DescribeVpcs작업 – IPv6 주소로 연결할 때 필요해요.
특정 EC2 인스턴스로 접근을 제한하는 것을 고려하세요. 그렇지 않으면 ec2-instance-connect:SendSSHPublicKey 작업에 대한 권한이 있는 모든 IAM 프린시펄이 모든 EC2 인스턴스에 연결할 수 있어요. 리소스 ARN을 지정하거나 리소스 태그를 condition keys로 사용해 접근을 제한할 수 있어요.
자세한 내용은 Actions, resources, and condition keys for Amazon EC2 Instance Connect을 참고하세요.
IAM 정책을 만드는 방법은 IAM User Guide의 Creating IAM policies을 참고하세요.
사용자가 특정 인스턴스에 연결하도록 허용하기
다음 IAM 정책은 리소스 ARN으로 식별되는 특정 인스턴스에 연결할 권한을 부여해요.
다음 예시 IAM 정책에는 다음 작업과 조건이 지정돼 있어요.
ec2-instance-connect:SendSSHPublicKey작업은 리소스 ARN으로 지정된 두 인스턴스에 연결할 권한을 부여해요. 모든 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": "*"
}
]
}
특정 태그가 있는 인스턴스에 연결하도록 사용자 허용하기
ABAC(Attribute-based access control)는 사용자와 AWS 리소스에 연결할 수 있는 태그를 기반으로 권한을 정의하는 인가 전략이에요. 리소스 태그를 사용해 인스턴스에 대한 접근을 제어할 수 있어요. 태그로 AWS 리소스에 대한 접근을 제어하는 방법은 IAM User Guide의 Controlling access to AWS resources를 참고하세요.
다음 예시 IAM 정책에서 ec2-instance-connect:SendSSHPublicKey 작업은 리소스 ARN의 * 와일드카드로 표시된 모든 인스턴스에, 인스턴스에 key=tag-key이고 value=tag-value인 리소스 태그가 있는 경우에만 연결할 권한을 부여해요.
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": "*"
}
]
}