회사에서 c# dotnet core 를 사용하고 있는데, c# aws sdk 를 사용해 aws api call 을 하는 경우 ec2에 적용된 iam role 이 자동으로 적용되는 것이 신기하여 어떤 원리로 가능한 것인지 조사해 보았다.
Overview
aws sdk 는 ec2 인스턴스 메타데이터 서비스라는 것을 통해 ec2에 부여된 iam 역할의 임시자격증명을 발급하고 이를 api 호출에 사용한다. 여기서 ec2 인스턴스 멘타데이터 서비스란 ec2인스턴스 내에서 실행중인 애플리케이션이 현재 인스턴스 관련 정보를 얻을 수 있도록 하는 서비스를 의미한다. 인스턴스 관련 정보엔 iam 역할이름 및 인스턴스 id 등이 있고 인스턴스 정보조회 말고도 ec2에 부여된 iam role역할의 임시 자격증명 발급또한 가능하다.
자격증명을 가져오는 과정
- http://169.254.169.254/latest/meta-data/iam/security-credentials GET method 로 호출시 현재 ec2에 연결된 role name 을 알 수 있다.
- curl http://169.254.169.254/latest/meta-data/iam/security-credentials/{1번에서 알아낸 role name} Get method 호출시 해당 role 의 임시자격증명을 발급할 수 있다. 아래 호출결과를 보면 AccessKeyId, SecretAccessKey, Expiration, Token 이 발급된것을 확인할 수 있다.
- 2번에서 발급한 임시 자격증명으로 aws api 를 호출한다
AWS Ec2 도큐먼트에서 위 내용에 대한 설명을 찾아볼 수 있다
인스턴스에서 실행되는 애플리케이션, AWS CLI 및 Tools for Windows PowerShell 명령의 경우, 임시 보안 자격 증명을 명시적으로 받지 않아도 됩니다. AWS SDK, AWS CLI 및 Tools for Windows PowerShell이 EC2 인스턴스 메타데이터 서비스에서 자동으로 자격 증명을 받아 사용하기 때문입니다. 임시 보안 자격 증명을 사용하여 인스턴스 외부로 호출하려면(예: IAM 정책 테스트) 액세스 키, 보안 키 및 세션 토큰을 제공해야 합니다. link
- 참고로 imds 는 v1,v2로 나누어져 있으며 v2의 경우 토큰을 발급한후 imds서비스를 이용하는 방식이다. imds v1은 보안적으로 문제가 될 수 있다.
참고
인스턴스 메타데이터에서 보안 자격 증명 검색
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/WindowsGuide/iam-roles-for-amazon-ec2.html#instance-metadata-security-credentials
'tech > 보안&인증' 카테고리의 다른 글
[보안&인증] openID와 SSO 비교 정리 (0) | 2024.06.23 |
---|---|
ssh(secure shell) 이해하기 (0) | 2024.04.10 |