아마존 웹 서비스 IAM 사용자의 액세스 키 발급 및 관리
들어가며
아마존 웹 서비스Amazon Web Service, AWS에서는 권한 관리를 위한 AWS IAM 서비스를 제공하고 있습니다. AWS에서 계정을 생성하면 루트 계정이 만들어집니다. 루트 계정은 계정에 속한 모든 리소스에 대한 접근 권한을 가지고 있으며 이를 박탈할 수 없습니다.
따라서 IAM 베스트 프렉티스에서는 루트 계정을 사용하지 않을 것을 권장하고 있습니다. 루트 계정을 직접 사용하는 대신 이에 속한 다수의 사용자User를 생성하고, 각 사용자들에게 서로 다른 권한을 부여할 수 있습니다.*
* 이 때 하나의 IAM 사용자IAM User가 반드시 한 명의 사람이어야하는 것은 아닙니다. 이는 사람과 1:1로 매치되는 개념이라기보다는 권한을 정의하기 위한 하나의 논리적인 단위로 보는 것이 더 적절합니다.
또한 AWS IAM에서는 각 사용자에게 API 호출을 위한 액세스 키를 발급할 수 있습니다. 각 사용자는 웹 콘솔을 사용하지 않더라도 자신에게 부여된 권한에 따라서 AWS 커맨드 라인 인터페이스나 SDK를 사용해 API를 호출할 수 있습니다.
이 글에서는 관리자 권한으로 사용자를 생성하고 액세스 키를 발급하는 방법에 대해서 알아보겠습니다.
사용자(User) 생성
아마존 관리 콘솔에 접속해서 IAM 혹은 내 보안 자격My Security Credentials 페이지로 이동합니다.
왼쪽의 메뉴에서 사용자Users를 선택합니다.
사용자 추가Add user 버튼을 클릭해서 생성을 진행합니다.
첫 번째 단계에서는 사용자 이름을 지정하고 계정의 타입을 선택해야합니다. 계정에는 두 개의 타입이 있습니다.
프로그래밍 방식 액세스Programmatic access: 액세스 키를 발급해서 AWS API를 호출하는 방식으로 사용하기 위한 계정입니다.
AWS 매니지먼트 콘솔 액세스AWS Management Console access: AWS 웹 콘솔을 사용하기 위한 계정입니다. 사용자 이름과 패스워드를 사용해 직접 로그인하는 것이 가능합니다.
이름을 admin으로 지정합니다. 여기서는 프로그래밍 액세스 방식을 선택하겠습니다. 다음: 권한Next: Permission를 클릭합니다.
두 번째 단계에서는 새로 추가하는 계정에 대해 어떤 권한을 부여할 지 결정합니다. 먼저 기존 정책을 직접 추가Attach existing policies directly를 선택하고, 아래 창에서 검색을 통해 AdministratorAccess
를 추가합니다. AdministratorAccess
는 실질적으로 루트 계정과 같은 권한이라고 할 수 있습니다. 이 권한은 계정에 있는 모든 리소스에 접근, 수정, 삭제가 가능하기 때문에 관리에 각별한 주의가 필요합니다. AWS의 IAM을 권한을 부여할 때는 항상 필요한 최소한의 권한을 부여해야합니다.
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
링크로 이동해서 로그인하면 해당하는 사용자 계정의 권한으로 웹 콘솔을 사용할 수 있다.
같이 보면 좋은 자료들
- AWS 공식 문서 - IAM 사용자의 액세스 키 관리