IAM과 Amazon EC2 문제 해결
IAM과 Amazon EC2 문제 해결
Amazon EC2 인스턴스에서 IAM 역할을 쓰다 보면 "역할이 안 보여요", "자격 증명이 이상해요" 같은 문제를 만날 수 있어요. 이 페이지는 EC2와 IAM을 함께 쓸 때 흔히 겪는 문제들을 하나씩 짚어 주는 트러블슈팅 가이드예요.
출처: 문서
본문
아래 내용은 Amazon EC2에서 IAM을 사용할 때 생기는 문제를 해결하는 데 도움이 돼요.
인스턴스 시작 시 Amazon EC2 콘솔의 IAM Role 목록에 역할이 안 보여요
다음을 확인해 보세요.
- IAM 사용자로 로그인했다면
ListInstanceProfiles를 호출할 권한이 있는지 확인해요. 역할을 다루는 데 필요한 권한은 Amazon EC2에서 역할 사용 시 필요한 권한을 참고하고, 사용자에게 권한을 추가하는 방법은 IAM 정책 관리를 보면 돼요. - 본인 권한을 스스로 바꿀 수 없다면 IAM을 관리할 수 있는 관리자에게 연락해서 권한을 업데이트해 달라고 해야 해요.
IAM CLI나 API로 역할을 만들었다면 다음도 확인해 보세요.
- 인스턴스 프로필을 만들고 그 인스턴스 프로필에 역할을 추가했는지요.
- 역할 이름과 인스턴스 프로필 이름을 똑같이 지었는지요. 역할과 인스턴스 프로필 이름이 다르면 Amazon EC2 콘솔에서 올바른 역할 이름이 보이지 않아요.
- Amazon EC2 콘솔의 IAM Role 목록에는 역할 이름이 아니라 인스턴스 프로필 이름이 표시돼요. 원하는 역할이 들어 있는 인스턴스 프로필 이름을 선택해야 해요. 인스턴스 프로필에 대한 자세한 내용은 인스턴스 프로필 사용을 참고하세요.
Note — IAM 콘솔로 역할을 만들면 인스턴스 프로필을 직접 다룰 필요가 없어요. IAM 콘솔에서 역할을 만들 때마다 역할과 같은 이름의 인스턴스 프로필이 자동으로 만들어지고, 역할이 그 인스턴스 프로필에 자동으로 추가되거든요. 하나의 인스턴스 프로필에는 IAM 역할을 단 하나만 담을 수 있고, 이 한도는 늘릴 수 없어요.
내 인스턴스의 자격 증명이 엉뚱한 역할 것이라고 나와요
인스턴스 프로필의 역할이 최근에 교체됐을 수 있어요. 그렇다면 애플리케이션은 다음에 자동으로 예약된 자격 증명 순환(credential rotation)이 이뤄질 때까지 기다려야 자기 역할의 자격 증명을 받을 수 있어요.
변경을 즉시 적용하려면 인스턴스 프로필을 분리했다가 다시 연결해야 해요. 또는 인스턴스를 중지했다가 다시 시작하는 방법도 있어요.
AddRoleToInstanceProfile 호출 시 AccessDenied 오류가 나요
IAM 사용자로 요청을 보내고 있다면 다음 권한이 있는지 확인해 보세요.
iam:AddRoleToInstanceProfile— 리소스가 인스턴스 프로필 ARN과 일치해야 해요 (예:arn:aws:iam::999999999999:instance-profile/ExampleInstanceProfile).
역할을 다루는 데 필요한 권한에 대한 자세한 내용은 How do I get started?를, 사용자에게 권한을 추가하는 방법은 IAM 정책 관리를 참고하세요.
Amazon EC2: 역할을 넣고 인스턴스를 시작하려다 AccessDenied 오류가 나요
다음을 확인해 보세요.
- 인스턴스 프로필 없이 인스턴스를 시작해 보세요. 그러면 문제가 Amazon EC2 인스턴스용 IAM 역할로 한정되는지 확인할 수 있어요.
- IAM 사용자로 요청하고 있다면 다음 권한이 있는지 확인해요.
ec2:RunInstances— 리소스가 와일드카드("*")여야 해요.iam:PassRole— 리소스가 역할 ARN과 일치해야 해요 (예:arn:aws:iam::999999999999:role/ExampleRoleName).
- IAM
GetInstanceProfile동작을 호출해 유효한 인스턴스 프로필 이름이나 ARN을 쓰고 있는지 확인해요. 자세한 내용은 Amazon EC2 인스턴스에서 IAM 역할 사용을 참고하세요. - IAM
GetInstanceProfile동작을 호출해 인스턴스 프로필에 역할이 실제로 있는지 확인해요. 비어 있는 인스턴스 프로필은AccessDenied오류로 실패해요. 역할 생성에 대한 자세한 내용은 역할 만들기를 참고하세요.
역할을 다루는 데 필요한 권한은 How do I get started?를, 사용자 권한 추가는 IAM 정책 관리를 참고하세요.
EC2 인스턴스의 임시 보안 자격 증명에 접근할 수 없어요
EC2 인스턴스의 임시 보안 자격 증명에 접근하려면 먼저 IAM 콘솔에서 역할을 만든 다음, 그 역할을 쓰는 EC2 인스턴스를 시작하고 실행 중인 인스턴스를 확인해야 해요. 자세한 내용은 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한을 부여하는 IAM 역할 사용의 How Do I Get Started?를 참고하세요.
여전히 임시 보안 자격 증명에 접근할 수 없다면 다음을 확인해 보세요.
-
인스턴스 메타데이터 서비스(IMDS)의 다른 부분에 접근할 수 있는지요. 접근할 수 없다면 IMDS 요청을 막는 방화벽 규칙이 없는지 확인해요.
[ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/hostname; echo -
IMDS의
iam하위 트리가 존재하는지요. 존재하지 않는다면 EC2DescribeInstancesAPI 동작이나aws ec2 describe-instancesCLI 명령으로 인스턴스에 IAM 인스턴스 프로필이 연결돼 있는지 확인해요.[ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/iam; echo -
IAM 하위 트리의
info문서에 오류가 없는지 확인해요. 오류가 있다면 아래 "IAM 하위 트리의 info 문서 오류가 의미하는 것"을 참고하세요.[ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/iam/info; echo
IAM 하위 트리의 info 문서 오류가 의미하는 것
iam/info 문서가 "Code":"InstanceProfileNotFound"를 나타내요
IAM 인스턴스 프로필이 삭제되어 Amazon EC2가 더 이상 인스턴스에 자격 증명을 제공하지 못해요. 유효한 인스턴스 프로필을 Amazon EC2 인스턴스에 연결해야 해요.
그 이름의 인스턴스 프로필이 존재한다면, 기존 프로필이 삭제되고 같은 이름으로 다른 프로필이 만들어지진 않았는지 확인해 보세요.
- IAM
GetInstanceProfile동작을 호출해InstanceProfileId를 가져와요. - Amazon EC2
DescribeInstances동작을 호출해 인스턴스의IamInstanceProfileId를 가져와요. - IAM 동작에서 받은
InstanceProfileId가 Amazon EC2 동작에서 받은IamInstanceProfileId와 일치하는지 확인해요.
ID가 서로 다르면 인스턴스에 연결된 인스턴스 프로필이 더 이상 유효하지 않은 거예요. 유효한 인스턴스 프로필을 인스턴스에 연결해야 해요.
iam/info 문서가 성공이지만 "Message":"Instance Profile does not contain a role..."을 나타내요
IAM RemoveRoleFromInstanceProfile 동작으로 역할이 인스턴스 프로필에서 제거된 상태예요. IAM AddRoleToInstanceProfile 동작으로 역할을 인스턴스 프로필에 다시 연결할 수 있어요. 애플리케이션은 다음에 예약된 새로고침(refresh)까지 기다려야 그 역할의 자격 증명에 접근할 수 있어요.
변경을 즉시 적용하려면 인스턴스 프로필을 분리했다가 다시 연결하거나, 인스턴스를 중지했다가 다시 시작하세요.
iam/security-credentials/[role-name] 문서가 "Code":"AssumeRoleUnauthorizedAccess"를 나타내요
Amazon EC2가 역할을 수임(assume)할 권한이 없어요. 역할 수임 권한은 역할에 연결된 신뢰 정책(trust policy)이 제어해요. 다음 예시처럼요. IAM UpdateAssumeRolePolicy API로 신뢰 정책을 업데이트해 보세요.
{"Version":"2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": ["ec2.amazonaws.com"]},"Action": ["sts:AssumeRole"]}]}
애플리케이션은 다음에 자동으로 예약된 새로고침까지 기다려야 그 역할의 자격 증명에 접근할 수 있어요. 변경을 즉시 적용하려면 인스턴스 프로필을 분리했다가 다시 연결하거나, 인스턴스를 중지했다가 다시 시작하세요.