개발놀이터

AWS IAM 본문

배포/AWS

AWS IAM

마늘냄새폴폴 2023. 8. 14. 16:43

프로젝트를 진행하면서 AWS에 접근하기 위해서 IAM이라는 것을 설정해본 기억이 한번쯤 있으실 것입니다. IAM은 별 내용이 없어서 지나치기 쉽지만 꽤 심오한 내용을 담고 있었습니다. 

 

이번 포스팅에선 AWS의 권한 책임자 IAM에 대해서 알아보고 직접 만들어보기까지 해보도록 하겠습니다. 

 

IAM

AWS IAM은 Identity and Access Management의 약자로 IAM은 AWS의 서비스나 자원을 안전하게 접근하도록 관리해주는 서비스입니다. 

 

IAM을 사용하면 AWS 유저나 그룹을 생성하고 관리할 수 있으며 AWS 자원에 접근하거나 제한하는 권한을 사용할 수 있습니다. 

 

즉, 인가와 비슷하다고 볼 수 있는데요. 어떤 유저에게는 어떤 서비스는 이용할 수 있고, 어떤 서비스는 이용할 수 없도록 막는 인가와 비슷합니다. 

 

하지만 AWS에선 단순히 우리가 스프링 시큐리티같은 것으로 인가를 구현하는 것보다 더 세세하게 구현해놨습니다. 

 

Authentication vs Authorization (인증과 인가)

인증은 신원을 확인하는 것을 말합니다. AWS에서 IAM 유저의 Access KeySecret Key를 이용해서 접근하면 인증이 됩니다. 

 

인가는 권한에 대한 것입니다. 우리가 어떤 것을 할 수 있는지를 정하고 우리가 한번 인증을 하면 IAM 정책은 AWS 자원을 이용하거나 이용할 수 없는 행동인지를 결정합니다. 

 

그나저나 자꾸 IAM 유저 IAM 유저 하는데 IAM 유저가 뭔지 잠깐 짚고 넘어가도록 하겠습니다. 

 

IAM 유저?

한명의 IAM 유저는 AWS와 상호작용하는 서비스를 나타내는 엔티티에 가깝습니다. AWS 안에서 한명의 유저는 AWS에 접근할 수 있는 credential과 연관되어있는 식별자라고 할 수 있죠. 

 

IAM 유저는 Access Key나 Secret Key를 가질 수 있고, AWS 서비스들과 프로그래밍적으로 상호작용할 수 있습니다. IAM 유저들은 패스워드를 가지고 AWS를 관리하는 콘솔에 접근할 수 있습니다. 

 

여기서 말하는 AWS를 관리하는 콘솔이란 AWS 사이트가 될 수도 있고, Linux에서 사용하는 CLI가 될 수도 있고, 애플리케이션에서 사용하는 라이브러리가 될 수도 있습니다. 

 

 

이제 한번 IAM 유저를 만들어보도록 하겠습니다. 

 

실전

먼저 AWS에서 IAM을 검색해서 들어간 첫 화면에서 사용자 > 사용자 추가를 선택합니다. 

 

사용자 이름을 입력하고 다음을 누릅니다. 

 

디폴트 값은 "그룹에 사용자 추가" 입니다. 우리는 직접 정책을 연결할겁니다. 

 

그리고 검색창에 자신이 사용할 AWS 시스템을 적으면 되는데요. EC2와 S3 정도를 선택해보겠습니다. 

 

ec2를 검색하고 아래 나오는 것 중에 AmazonEC2FullAccess 를 선택! 체크박스 체크하고 다시 검색창으로 돌아와서 s3를 검색합니다. 

 

 

체크까지 진행하고 "다음"을 클릭합니다. 

 

아무 이상 없는지 확인하고 "사용자 생성" 클릭

 

이렇게 잘 생성된 것을 볼 수 있습니다. 

 

우리가 만든 정책들을 한번 확인해보겠습니다. 

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "*"
        }
    ]
}

이건 우리가 선택한 S3의 정책입니다. IAM에서 권한은 정책에 의해 정의됩니다. 정책들은 특정한 일련의 행동, 자원, 효과들을 나타내는 JSON 문서이죠. 우리가 유저, 그룹, 역할들의 정책에 접근할 때 AWS는 이 정책에 근거하여 행동을 허락할지 제한할지를 결정합니다. 

 

그래서 이 정책들을 커스터마이징할 수 있는데요. 자신이 원하는대로 정책을 커스터마이징해서 원하는 행동, 원하는 자원, 원하는 효과를 선택할 수 있습니다. 

 

그래서 S3와 같은 AWS 서비스들은 그들만의 고유하고 세밀한 정책들을 만들기위한 일련의 행동, 자원, 컨디션 키들을 가지고 있습니다. 

 

이 말은 예를 들어서 우리가 특정 S3 버킷안에서 객체들을 저장할 수 있는 유저의 정책을 가지고 있다면, 그 객체들을 저장은 할 수 있지만 삭제는 불가능하도록 설정할 수 있다는 말입니다. 

 

이런 IAM은 인가처럼 특정 권한들을 정책이라는 이름으로 특권을 부여해주는 역할인 것 처럼 보안상으로도 꽤 훌륭합니다. 그리고 이런 상황에서 더 보안적으로 뛰어나게 관리할 수 있죠. 

 

보안상 최고의 행동강령

  1. 항상 최소한의 특권(권한)만을 가지고 있어야합니다. 유저들이나 애플리케이션이 작동하기위해 필요한 최소한의 권한만 부여해야합니다. 
  2. Access Key나 Secret Key와 같은 credential을 주기적으로 교환해야 합니다. 
  3. 아마존 EC2 인스턴스에서 돌아가는 애플리케이션을 위한 IAM role들을 사용해야합니다. 
  4. 보안을 위해 MFA(Multi Factor Authentication)를 추가해야합니다. 

 

마치며

이렇게 IAM에 대해서 알아봤습니다. 만약 프로젝트를 개발한다고 하면 이 IAM이 생각보다 많이 쓰이는 것을 알 수 있는데요. 

 

프로젝트에서 AWS 라이브러리를 끌어다 사용할 때도 필요하고, AWS CLI를 이용해 리눅스 운영체제에서 AWS 자원에 접근해야 할 때도 그렇습니다. 

 

하지만 저처럼 헬로월드 수준에서는 그냥 root 사용자를 만들어서 돌려쓰기 하면 되겠지만 실전에서는 꽤 중요하게 다뤄질 것 같습니다. 

 

긴 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~

'배포 > AWS' 카테고리의 다른 글

EC2 인스턴스 스토리지 (EBS, EFS)  (2) 2023.10.10
AWS S3  (0) 2023.08.14
AWS EC2 용량 부족할 때 대처법  (0) 2023.06.16
리눅스 기본적인 명령어  (0) 2023.06.09
AWS ECR에 docker image push하기  (0) 2023.06.09