아마존 웹 서비스 IAM 사용자의 액세스 키 발급 및 관리

들어가며

아마존 웹 서비스Amazon Web Service, AWS에서는 권한 관리를 위한 AWS IAM 서비스를 제공하고 있습니다. AWS에서 계정을 생성하면 루트 계정이 만들어집니다. 루트 계정은 계정에 속한 모든 리소스에 대한 접근 권한을 가지고 있으며 이를 박탈할 수 없습니다.

따라서 IAM 베스트 프렉티스에서는 루트 계정을 사용하지 않을 것을 권장하고 있습니다. 루트 계정을 직접 사용하는 대신 이에 속한 다수의 사용자User를 생성하고, 각 사용자들에게 서로 다른 권한을 부여할 수 있습니다.*

* 이 때 하나의 IAM 사용자IAM User가 반드시 한 명의 사람이어야하는 것은 아닙니다. 이는 사람과 1:1로 매치되는 개념이라기보다는 권한을 정의하기 위한 하나의 논리적인 단위로 보는 것이 더 적절합니다.

또한 AWS IAM에서는 각 사용자에게 API 호출을 위한 액세스 키를 발급할 수 있습니다. 각 사용자는 웹 콘솔을 사용하지 않더라도 자신에게 부여된 권한에 따라서 AWS 커맨드 라인 인터페이스나 SDK를 사용해 API를 호출할 수 있습니다.

이 글에서는 관리자 권한으로 사용자를 생성하고 액세스 키를 발급하는 방법에 대해서 알아보겠습니다.

44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

사용자(User) 생성

아마존 관리 콘솔에 접속해서 IAM 혹은 내 보안 자격My Security Credentials 페이지로 이동합니다.

My Security Credentials 페이지로 이동합니다
My Security Credentials 페이지로 이동합니다

왼쪽의 메뉴에서 사용자Users를 선택합니다.

사용자 메뉴에서 새로운 사용자를 등록합니다
사용자 메뉴에서 새로운 사용자를 등록합니다

사용자 추가Add user 버튼을 클릭해서 생성을 진행합니다.

사용자 생성 1단계: 사용자 이름과 타입을 지정합니다
사용자 생성 1단계: 사용자 이름과 타입을 지정합니다

첫 번째 단계에서는 사용자 이름을 지정하고 계정의 타입을 선택해야합니다. 계정에는 두 개의 타입이 있습니다.

프로그래밍 방식 액세스Programmatic access: 액세스 키를 발급해서 AWS API를 호출하는 방식으로 사용하기 위한 계정입니다.

AWS 매니지먼트 콘솔 액세스AWS Management Console access: AWS 웹 콘솔을 사용하기 위한 계정입니다. 사용자 이름과 패스워드를 사용해 직접 로그인하는 것이 가능합니다.

이름을 admin으로 지정합니다. 여기서는 프로그래밍 액세스 방식을 선택하겠습니다. 다음: 권한Next: Permission를 클릭합니다.

사용자 생성 2단계: 새로 생성하는 사용자에게 AdministratorAccess 권한을 부여합니다
사용자 생성 2단계: 새로 생성하는 사용자에게 AdministratorAccess 권한을 부여합니다

두 번째 단계에서는 새로 추가하는 계정에 대해 어떤 권한을 부여할 지 결정합니다. 먼저 기존 정책을 직접 추가Attach existing policies directly를 선택하고, 아래 창에서 검색을 통해 AdministratorAccess를 추가합니다. AdministratorAccess는 실질적으로 루트 계정과 같은 권한이라고 할 수 있습니다. 이 권한은 계정에 있는 모든 리소스에 접근, 수정, 삭제가 가능하기 때문에 관리에 각별한 주의가 필요합니다. AWS의 IAM을 권한을 부여할 때는 항상 필요한 최소한의 권한을 부여해야합니다.

사용자 생성 3단계: 리뷰
사용자 생성 3단계: 리뷰

3단계는 단계는 리뷰입니다. 확인 후 사용자 생성Create user를 클릭합니다.

유저가 생성되고, 액세스 키가 발급되었습니다
유저가 생성되고, 액세스 키가 발급되었습니다

이것으로 admin 사용자가 생성되었습니다. 앞서 지정한 대로 admin 사용자는 프로그래밍 방식 액세스Programmatic access를 사용하기 때문에 로그인하는 것은 불가능합니다. 대신에 지금 발급된 키로 API에 접근하는 것이 가능합니다.

API 키는 두 개의 값이 쌍으로 이루어져있습니다. 먼저 첫 번째 키는 액세스 키 IDAccess key ID입니다. 두 번째 키는 시크릿 액세스 키Secret acces key입니다. 액세스 키 ID가 아이디, 시크릿 액세스 키는 비밀번호에 대응한다고 생각해도 무방합니다. 두 개의 키를 모두 알고 있어야 API를 호출할 수 있습니다. 액세스 키 ID는 웹 콘솔에서 노출됩니다. 하지만 시크릿 액세스 키는 발급할 때를 제외하면 다시 확인할 수 없습니다. 따라서 잊어버리지 않도록 주의가 필요합니다. 또한 이 키를 탈취당하면 사용자에게 부여된 권한이 무단으로 사용될 수 있기 때문에 유출되지 않도록 관리해야합니다.

시크릿 액세스 키 값은 ******로 마스킹 되어있습니다. 보기Show를 클릭하면 값을 확인할 수 있습니다. 혹은 .csv로 다운로드Download .csv 버튼을 클릭해 액세스 키 쌍을 파일로 다운받을 수도 있습니다.

이제 사용자 목록에서 admin을 확인할 수 있습니다.

액세스 키 관리

액세스 키 관리는 아무리 강조해도 지나치지 않습니다. 액세스 키는 비밀번호와 달리 텍스트로 관리되는 경우가 많기 때문에 가능하다면 주기적으로 재발급하는 것이 유출의 위험을 줄이는 최선의 방법입니다. 또한 유출이 되었을 가능성이 있는 경우 최대한 빨리 해당 키를 무효화하거나 삭제해야합니다. 그리고 새로운 키를 발급해서 사용해야합니다.

액세스 키 관리도 사용자 페이지에서 이루어집니다. 사용자 목록에서 admin 유저를 클릭하면 상세 페이지로 이동합니다. 상세 페이지에는 권한Permissions, 그룹Groups, 보안 자격Securty credentials, 액세스 어드바이저Access Advisor 네 개의 탭이 있습니다. 보안 자격 탭을 클릭합니다.

보안 자격 탭에서는 사용자 인증과 관련된 옵션들을 수정할 수 있습니다. 아래 쪽에서 현재 발급된 모든 API 키를 확인할 수 있습니다. 상태Status활성Active인 키는 현재 사용할 수 있는 키입니다. 비활성화하기Make inactive를 클릭하면 키를 삭제하지 않고 사용하지 못 하도록 만들 수 있습니다. 일시적으로 비활성화된 키는 다시 활성화하기Make active를 클릭하면 언제든지 다시 활성화할 수 있습니다. 오른쪽 끝의 ❌를 클릭하면 현재 키가 삭제됩니다.

액세스 키 만들기Create access key 버튼을 클릭하면 새로운 키를 생성할 수 있습니다.

처음 사용자를 만들 때와 마찬가지로 액세스 키 ID와 이에 대응하는 시크릿 액세스 키가 발급됩니다. 확인한 후 팝업 창을 닫습니다. 팝업 창을 닫으면 시크릿 액세스 키를 다시 확인하지 못 하니 미리 저장해두어야합니다.

이제 목록에서 확인하면 액세스 키가 2개가 된 것을 알 수 있습니다. 하나의 사용자는 동시에 2개의 액세스 키만을 가질 수 있습니다. 따라서 액세스 키 생성하기 버튼이 비활성화되어있는 것을 확인할 수 있습니다. 새로운 키를 만들려면 기존 키를 삭제해야만 합니다.

웹 콘솔을 사용할 수 있도록 비밀번호 설정

앞서 사용자를 생성할 때, 프로그래밍 방식 액세스 타입이나 AWS 매니지먼트 콘솔 액세스 타입 중에서 하나를 선택해야만 했습니다. 하지만 각 사용자 타입은 상호배제적이지 않습니다. AWS 매니지먼트 콘솔 액세스 타입을 선택하더라도 앞서 살펴본 대로 액세스 키를 추가해주면 프로그래밍 방식 액세스 타입 사용자가 됩니다. 반대로 프로그래밍 방식 액세스 타입을 선택하더라도 비밀번호를 설정해주면 웹 콘솔에서 로그인 가능한 사용자가 됩니다.

이 설정 또한 사용자의 상세 뷰의 보안 자격Securty credentials 탭에서 변경합니다. 프로그래밍 방식 액세스 타입으로 만든 계정은 처음에 콘솔 패스워드Console password가 비활성화Disabled 되어있습니다. 패스워드 관리하기Manage password를 클릭하면 패스워드를 지정하는 팝업이 나옵니다.

콘솔 액세스Console access를 활성Enable로 지정합니다. 여기서는 abcd1234를 패스워드로 지정하고*, 첫 로그인 시 변경하는 옵션에 체크합니다. 적용Apply를 클릭합니다.

* 여기서 지정한 패스워드는 임시 패스워드입니다. 실제로 사용할 때는 훨씬 더 긴 패스워드를 사용할 것을 권장합니다.

콘솔 패스워드 아래에서 콘솔 로그인 링크Console login link 값을 확인할 수 있습니다. 루트 계정과 달리 사용자 계정에 로그인하기 위해서는 이 링크로 이동해야할 필요가 있습니다. 로그인 링크 형식은 다음과 같습니다.

https://<ROOT_ACCOUNT_NAME>.signin.aws.amazon.com/console

링크로 이동해서 로그인하면 해당하는 사용자 계정의 권한으로 웹 콘솔을 사용할 수 있다.

같이 보면 좋은 자료들

44BITS 로고

아마존 웹 서비스(AWS, Amazon Web Serivce)란?

🏷️ 키워드, 2020-01-20 - 아마존 웹 서비스는 아마존의 자회사로 같은 이름으로 퍼블릭 클라우드 컴퓨팅 서비스를 제공하고 있습니다. 대표적인 서비스로는 컴퓨팅 자원을 제공하는 EC2, 오브젝트 스토리지 S3, 프라이빗 클라우드 VPC, 권한 제어 IAM, 컨테이너 오케스트레이션 ECS, EKS 등이 있습니다.
도움이 되셨나요?
RSS 리더 피들리에서 최신 글을 구독할 수 있습니다.
트위터, 페이스북으로 44BITS의 새소식을 전해드립니다.
✔ 44BITS의 다른 활동도 확인해보세요. 다양한 채널에서 만나볼 수 있습니다.
✔ 따뜻한 댓글 하나와 피드백은 큰 힘이 됩니다.

direnv를 사용한 디렉토리(프로젝트) 별 개발환경 구축: 루비, 파이썬, 노드 개발 환경 구축

🗒 기사, 2018-08-13 - direnv는 디렉터리 별로 셸 환경을 구축할 수 있게 해주는 도구입니다. 디렉터리 별 환경 변수 설정 법, 루비(Ruby), 파이썬(Python), 노드(Node) 등 프로그래밍 언어 프로젝트를 셋업하는 법을 소개합니다.

re:Invent 2018 - ALB 타깃그룹의 새로운 타입으로 AWS 람다(AWS Lambda) 추가

🗞 새소식, 2018-12-18 - AWS 람다를 외부에 HTTP(S) 프로토콜로 노출시키기 위해서는 아마존 API 게이트웨이를 사용해야만 했습니다. re:Invent 2018 기간 중에 애플리케이션 로드밸런서 타깃그룹의 새로운 타깃 타입으로 AWS 람다 타입이 발표되었습니다. 이 기능을 사용하면 ALB 리스너로 람다가 연결된 타깃그룹을 사용할 수 있습니다.

GitHub 패키지 레지스트리 발표 및 사용법

🗞 새소식, 2019-05-13 - 5월 10일 깃허브에서는 깃허브 패키지 레지스트리 베타를 발표했습니다. 패키지 레지스트리는 언어 별로 생성된 패키지를 저장 및 배포할 수 있는 서비스입니다. NPM, 메이븐, 누겟, 루비젬, 도커를 지원할 예정입니다. 현재 베타 버전으로 사용하려면 별도의 신청이 필요합니다.