안녕하세요! 프로젝트를 진행하다보면 보통 AWS
를 활용하기 마련인데요.
AWS를 잘 모르고 사용했을 때는 AWS 계정 주인의 root 계정을 돌려서 사용하고 하다보니 보안적인 이슈나 협업 효율성에서 많이 손해를 보곤 하였습니다 😂
오늘은 안전하게 팀원들과 협업을 할 수 있도록 AWS IAM에 대해서 알아보는 시간을 갖겠습니다!
IAM은 무엇인가?
AWS Identity and Access Management(IAM)
은 AWS 리소스에 대한 접근을 관리하는 글로벌 서비스입니다.
글로벌 서비스란? 리전(지역)에 구애받지 않고 AWS 인프라에 전역적으로 설정 가능한 서비스!
AWS를 사용하기 위해선 회원가입을 하는데요, 그 과정에서 사용자의 정보와 직접 결제가 이루어지는 계좌 정보를 입력하는 등 직접 AWS와 맞닿아서 결제 관리 등 민감한 개인정보를 저장하고 있게 됩니다. 그러한 사용자 유형을 루트 사용자
라고 하는데요.
이런 루트 사용자의 계정을 통해서 AWS 인프라를 관리하게 된다면, 조직에 있는 개발자나 기획자 등 조직원들이 모두 하나의 계정을 관리해야합니다. 그렇게 되면 해당 계정 정보가 유출되기도 쉬운 환경일 뿐더러 해당 계정은 모든 권한을 갖고 있는 계정이므로 자칫 잘못 사용하면 예기치 못한 비용이 청구되는 등의 문제가 발생할 수도 있습니다.
이럴 때 AWS IAM 서비스로 해결할 수 있습니다. IAM 사용자를 생성하여 조직에 있는 사람들의 권한을 직접 조정하여 AWS 서비스로의 접근 권한을 관리할 수 있습니다. 단일 사용자에게 뿐만 아니라 여러 사용자를 묶어 그룹화하여 해당 그룹의 권한을 조정할 수도 있지요.
그래서 개발자, 기획자, 데브옵스 등 각 포지션에 필요한 접근 권한만 최소한으로 설정하여 보안적인 문제를 해소할 수 있게 됩니다.
IAM 직접 사용해보기
AWS에 회원가입이 되어있다는 가정하에 시작해보겠습니다. (루트 사용자 계정이 없으신 경우 회원가입을 먼저 해주세요!)
AWS 콘솔에 접속해봅시다!
콘솔 상단 검색창에서 IAM을 검색후 IAM 콘솔로 이동해봅시다. 그 이후 좌측 패널에서 Users를 선택하여 사용자 관리 패널에 접속합니다.
이후 우측 상단에 사용자 생성 버튼을 통해 사용자를 생성할 수 있습니다.
사용자 이름을 먼저 작성하고 AWS Management Console
에 대한 접근 권한을 설정합니다. (여기서 AWS Management Console은 아까 루트 사용자로 접속하고 보여진 콘솔 화면입니다)
대부분의 경우 해당 콘솔 접근 권한을 제공하면 됩니다. 이후 사용자 유형을 선택하게 됩니다. 저희는 IAM에 대해서 학습 중이므로, IAM 사용자를 생성하면 됩니다.
이후 사용자의 암호를 설정하고 다음 로그인시 새 암호를 생성할지 선택 후 생성을 하면 됩니다.
*여기서 왜 Identity Center 옵션이 권장되나요?
주제와는 다른 이야기라 이부분은 궁금하신 분만 참고하시면 되겠습니다. AWS Identity Center(AWS SSO)
는 AWS 계정과 리소스에 대한 액세스를 관리하는 서비스입니다. AWS IAM과 흡사한 서비스를 제공하죠. 프로젝트의 규모가 커지면서 AWS IAM에서 발생하는 단점(다수의 사용자를 관리하는데 번거로움)을 해결하고자 하여 제시된 중앙 집중식 관리형 서비스 입니다.
AWS IAM은 소수의 팀 내에서 사용하는 경우 오히려 세밀한 정책과 권한 관리에 유리하기도 하니 IAM으로 먼저 생성하여 학습하고 추후에 SSO에 대해서도 살펴보도록 하겠습니다!
이후 사용자의 권한을 설정하는 데요, 직접 계정의 권한을 추가하거나 혹은 그룹에 사용자를 추가할 수 있습니다.
그룹 생성을 눌러 새로운 그룹을 만들어보겠습니다.
사용자 그룹 생성은 조직 내에 포지션에 따라 권한을 나누는 것이 좋습니다. 기획자, 관리자, 개발자 그 중에서도 프론트엔드, 백엔드 등 포지션에 따라 접근 권한이 달라지게 구성하는 것이 효율적인 경우가 많습니다. 자유롭게 설정하면 되고, 저는 Admin이라는 그룹을 생성하여 AdministratorAccess 권한을 주도록 하겠습니다.
해당 화면에서 제공하는 권한 정책은 여러개의 접근 권한을 정책화 한 것입니다. 기존에 프리셋 처럼 제공하는 AWS 관리형 정책도 있고, 사용자가 필요에 맞추어 커스텀하게 정책을 생성할 수도 있습니다.
이후 사용자를 그룹에 추가한 후 다음으로 넘어가겠습니다.
다음으로 모든 설정을 다시 확인해보는 검토 단계와 실제 사용자를 생성하는 버튼이 있는 단계입니다.
여기서는 구성이 맞는지 확인만 해보면 됩니다. 여기서 태그를 넣을 수 있는데요, 특별한 의미가 있는 것은 아니고 새롭게 생성된 사용자를 식별할 수 있는 메타데이터를 태그 형태로 넣는 곳입니다.
당연히 태그를 통해서 해당 사용자가 누구인지 식별할 수 있게 하는 것이 좋습니다.
이후 사용자 생성 버튼을 누르면, 사용자 생성이 완료됩니다. 이후 다시 사용자 목록을 확인해볼까요?
IAM 유저가 잘 생성된 것을 확인할 수 있습니다. 그럼 바로 IAM 사용자 계정으로 로그인을 해보겠습니다!
IAM 사용자 계정으로 로그인 하기 위해서는 전용 링크를 통해 로그인 해야하는데요,
IAM에 최초 접속할 때 보았던 콘솔 대시보드 화면으로 돌아가면 우측 AWS 계정 정보에서 확인할 수 있습니다.
(이곳에서 계정 별칭 생성을 통해 로그인 URL을 더 보기 좋은 형태로 변경할 수도 있습니다)
스티커로 열심히(?) 가린 저 부분에 있으니 확인하시면 됩니다. 이후 해당 링크에 접속해 로그인을 해볼까요?
아까 제가 생성한 stone_developer 계정으로 로그인이 성공했습니다! 비용 및 사용량에 대한 액세스를 주지 않았으므로 루트 계정과 다르게 권한이 관리되고 작동한다는 사실도 알게 되었죠!
AWS IAM Policies
위에서 IAM 사용자를 직접 생성해봄으로써, IAM 권한 정책에 대해 간단히 알아보았는데요, 사실 더욱 복잡한 설정도 가능합니다.
간단하게 그룹을 하나 생성해서 권한을 추가해보았는데, 사실 사용자는 그룹에 속해있지 않고 해당 사용자에게 직접 권한을 줄 수도 있고,
그룹에 사용자를 추가할 수도 있습니다. 이때 사용자는 여러 그룹에 속할 수도 있죠.
이런 복잡한 설정을 효과적으로 관리하기 위해 IAM 권한 정책을 AWS에서 Json 형태로 관리할 수 있도록 지원합니다. 따라서 코드와의 통합이 수월하게 되는 것이죠(GitOps)
아까 저희가 생성한 Admin 그룹에 주었던 AdministratorAccess 권한을 살펴볼까요?
아래와 같은 Json 구조로 이루어져 있습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
해당 Json 문서에서 어떠한 의미가 있는지 알아볼까요?
- Version: 정책의 버전 번호로 항상 "2012-10-17"이 포함되어 있습니다.
- Id: 정책을 식별하기 위한 고유 번호입니다. (선택 옵션)
- Statement: 정책의 개별 상태를 나타내는 배열입니다 (필수)
- Sid: Statement를 식별하기 위한 고유 번호입니다. (선택 옵션)
- Effect: Statement가 권한을 주고있는지 거부하고있는지에 대한 값 입니다. (Allow, Deny로 구분)
- Principal: 권한이 적용될 계정/사용자/그룹 정보입니다.
- Action: Statement에 의해 접근 권한이 부여되거나 거절되는 행위의 배열입니다.
- Resource: Statement에 의해 접근 권한이 부여되거나 거절되는 자원의 배열입니다.
- Condition: 이 정책이 적용되는 조건입니다. (선택 옵션)
이렇게 직접 Json을 수정함으로써 IAM권한을 수정할 수도 있답니다.
IAM 계정들을 더욱 안전하게 관리하기
IAM 대시보드에 들어가면 신경쓰였던 문구가 있었을 겁니다.
루트 사용자와 사용자 계정에 대한 MFA를 추가해야한다는 것인데요, MFA가 무엇일까요?
AWS를 사용하며 IAM을 통해 여러 계정을 추가하고 관리하면, 해당 계정을 안전하게 관리할 책임은 사용자에게 있습니다. 부주의한 사용으로 비밀번호가 유출이 되고 악의적인 접근으로 인해 피해를 보더라도 AWS측에서 대응해줄 수 있는 방안이 없다는 것이죠.
그래서 보안을 항상 신경써야하는데요, AWS에서는 보안을 높이기 위한 여러 방법을 제공합니다.
첫째로는, 계정의 비밀번호 정책을 설정할 수 있습니다. 아까 저희가 IAM 사용자 생성을 글을 보고 따라하신 분들이라면 아실텐데요, 비밀번호가 몇자 이상에서 특수문자를 포함해야하고 이러한 비밀번호 설정 요구사항이 있었습니다.
이런 비밀번호 정책을 커스텀하게 설정하여 더 안전하게 비밀번호를 관리할 수 있습니다. 예를 들어, 대문자를 포함해야한다던가 하는 것들이요. 게다가 비밀번호 만료시간을 두어 일정 기간마다 비밀번호를 변경하도록 할 수도 있습니다.
하지만 여러 사이트에 여러 계정을 가지고 있는 일반인들에게는 비밀번호가 많아지면 관리의 어려움이 들죠. 그런 문제를 해결하기 위해 MFA를 사용할 수 있습니다.
Multi Factor Authentication(MFA)는 비밀번호로 로그인 하더라도 별도의 보안 장비로 인증을 거쳐 로그인을 하도록 합니다.
그렇게되면 만약 비밀번호가 탈취당하더라도 별도의 2차 인증 과정이 있어서 계정을 안전하게 보호할 수 있게 되는거죠.
다른 서비스에서 이용해보신 분들도 있을텐데, AWS에서 IAM을 통해 계정을 관리할 때는 필수적으로 권장되는 사안입니다.
MFA는 여러 인증 서비스와 통합될 수 있는데요. 대표적으로 휴대폰을 사용해서 Google Authenticator, Authy를 활용한 인증 혹은 정말 높은 수준의 보안이 필요하다면 Yubikey와 같은 물리적 이동식 키 혹은 OTP 기기들로도 가능합니다.
그럼 직접 한번 해보겠습니다!
IAM 암호 정책을 변경해보자
IAM 대시보드에서 좌측 메뉴에서 계정 설정으로 이동하면, 해당 화면을 보실 수 있습니다.
암호 정책을 설정할 수가 있는데요, 현재는 AWS에서 기본으로 제안하는 암호 정책을 사용하고 있습니다.
편집을 눌러 암호 정책을 수정해봅시다.
이곳에서 조직에 합의하에 비밀번호 정책을 세우고 적용할 수 있게 됩니다.
루트 계정에 MFA를 설정해보자
루트 계정으로 들어가 우측 상단 계정명 클릭 -> 보안 자격 증명 옵션으로 접속해봅시다.
이런식으로 루트 사용자에 대한 보안 설정들을 확인할 수 있습니다. 루트 사용자는 가장 높은 수준의 보안이 요구되는 계정입니다. MFA를 적용해서 보안 수준을 높여보겠습니다. MFA 할당을 클릭해볼까요
여기서 생성할 MFA 방식을 선택합니다. 각자에게 원하는 방식으로 해보세요 ㅎㅎ 저는 분실의 염려가 없는 패스키로 한번 해보도록 하겠습니다.
참고로 패스키를 사용하면 Apple 생태계에서 사용되는 지문 인식으로 인증이 가능합니다. 다른 방법도 안내에 따라 설정을 하면 됩니다!
이렇게 되면 MFA가 생성되었음을 확인할 수 있습니다.
그럼 로그인을 새롭게 해볼까요?
비밀번호 이후에도 추가적인 인증을 거치게 되는 것을 확인하였습니다!
결론
오늘은 IAM을 통해 AWS 인프라 내의 IAM계정을 새롭게 생성해보았는데요,
되게 간단하지만 AWS에 대한 무지로 인해... 사이드 프로젝트를 진행하면서 되게 지켜지기 어려웠던 부분이었다고 생각해 글로 남기게 되었습니다.
IAM을 사용할때 중요한 것은 AWS 계정 설정을 제외하고는 루트 계정을 사용하지 않고 각 개인에게 부여된 IAM 계정을 사용하도록 하는 것입니다. 이를 통해 자원을 더욱 안전하게 보호할 수 있죠.
그렇게 하기 위해서 한 사람당 하나의 IAM 계정을 가지도록 구성하는게 좋고 권한은 항상 최소한의 필요로 하는 권한만 주도록 하는 것이 좋습니다. 그리고 보안적인 수준도 비밀번호 정책이나, MFA를 통해서 높여야겠죠!
더욱 안전하고 쉽게 AWS 인프라를 사용할 수 있도록 더욱 노력해야겠습니다 😂
'DevOps > AWS 🛒' 카테고리의 다른 글
AWS EC2 정복하기 (0) | 2024.06.18 |
---|
안녕하세요, 저는 주니어 개발자 박석희 입니다. 언제든 하단 연락처로 연락주세요 😆