Amazon Web Services 한국 블로그

AWS 관리 콘솔에서 교차 계정 접근(Cross-Accounts Access) 활용하기

AWS는 클라우드에서 보안을 최우선으로 하며, 다양한 보안 관련 서비스와 기능 및 선택 사항을 제공하고 있습니다. 특히, 사용자 권한 관리는 AWS IAM(Identity and Access Management)이라는 서비스를 통해 구성하고 관리하게 됩니다. IAM은 다양한 기능을 가지고 AWS 리소스를 사용하는데, API 수준의 세부적인(fine-grained) 접근 제어를 지원합니다.

IAM 서비스 및 교차 계정 접근 제어
IAM 기능을 잘 활용할 경우 고객 서비스 운영 중 특정 사용자나 관리자 또는 개발자의 권한을 모두 구분하여 제어할 수 있습니다. 따라서, 잘못된 운영이나 실수를 권한을 제한하여 막을 수 있고, 필요에 따라서 제한적으로 가능하게 할 수 있습니다.

예를 들어 네트워크 관리자에게 데이타베이스에 대한 접근 운영 권한을 주는 것은 좋은 방법이 아닐 것입니다. 이러한 제한은 사고를 방지할 수도 있으며, 경우에 따라 API 권한(credential)을 획득한 악의적인 접근을 IAM을 통해 원천적으로 차단할 수도 있습니다.

IAM은 사용자(User, 이하 User)라는 개념과 역할(Role, 이하 Role)이라는 개념을 동시에 제공합니다. User는 특정 권한을 가진 사용자를 뜻하며, 별도의 URL을 통해 AWS 관리 콘솔에 직접 로그인할 수 있는 사용자(사람)을 의미합니다. 역할의 경우는 특정 권한을 특정 서비스나 사용자에 부여할 수 있으며, 변경도 가능합니다. 뿐만 아니라, Role은 password나 access key가 없어 상대적으로 보다 안전하게 사용이 가능하며, User는 Role의 권한을 받아 AWS 리소스에 편리하고 안전하게 접근이 가능합니다.

다만, 여러 User가 복수 계정에서 서로 다른 Role을 손쉽게 이동하면서 관리해야 할 경우를 위해 지난 해 교차 계정 접근 제어(Cross-Account Access) 기능을 출시하였습니다. 이를 통해 AWS 관리 콘솔에서 Role 전환을 쉽게 할 수 있게 하여, User가 여러 AWS 계정 (또는 여러 Role) 환경에서 효과적으로 일을 더 쉽게 할 수 있게 됩니다.

또한, 관리자가 허용한 특정 User에 대해 다른 사용자 이름과 암호를 입력(혹은 기억하는)없이 다른 계정을 관리하기 위해 역할을 전환할 수 있습니다. 위의 설명한 교차 계정 접근 제어는 API로도 가능하나, 오늘은 AWS 관리 콘솔에서도 어떻게 설정하는지 간단한 예를 들어 설명드리겠습니다.

IAM User와 Role 생성하기
우선 AWS IAM에서 Chulsoo라는 User를 생성합니다. User를 생성하고 해당 User 가 AWS 관리 콘솔에 로그인 하기 위해서는 암호 설정이 필요합니다.

User를 생성한 후에 Chulsoo를 선택하여 암호를 설정합니다.

Chulsoo는 현재 아무런 권한이 없으므로 암호를 설정한 후에 AWS 관리 콘솔에 로그인은 가능하나, 다른 작업을 전혀 할 수 없습니다.

이제 Chulsoo라는 User에게 VPC 관련 설정을 할 수 있는 권한을 주고 싶다면, 권한을 가진 Role을 생성하여 진행 할 수 있습니다. IAM 메뉴에서 Role을 선택하고 Create new Role을 선택합니다.

여기서는 NetworkAdmin 이라는 이름으로 Role을 생성합니다. Role을 생성한 후 해당 Role을 다른 AWS 계정 또는 현재 사용중인 AWS 계정에게 권한을 위임 가능하게 하려면, Role for Cross-Account Access를 선택하여 Provide access between AWS accounts you own을 선택합니다. 즉, 해당 Role을 역서 선택한 Account에게 권한을 위임할 수 있도록 허가하는 것입니다.

위와 같이 선택하여 진행하면 아래와 같이 계정 ID(Account ID)를 입력하는 곳으로 넘어갑니다. 본인의 계정 ID를 안다면 입력하고, 만약 모른다면 Console에서 My Account메뉴에서 본인의 Account ID를 확인할 수 있습니다.

Role과 동일한 Account 인 경우에도 입력이 필요하므로 꼭 입력을 하여 진행합니다. 입력 후 진행하면 이제 해당 Role이 가질 Policy를 선택합니다. 이 예제에서는 NetworkAdmin으로 이름에 맞게 VPC권한을 선택합니다.

Policy 선택 후 진행하면 아래와 같이 설정된 설정한 Role에 대한 정보와 유용하게 사용될 Switch role을 위한 링크가 제공됩니다.

User에 Role 권한 추가하기
다음으로 특정 User 역시 Role을 사용할 수 있도록 권한을 주어야만 합니다. 즉, Chulsoo는 NetworkAdmin Role을 실행할 수 있는(Assume) 권한이 있어야만 합니다. 위 단계에서 생성된 Role ARN을 기억하여 Chulsoo의 권한 설정을 진행합니다.

IAM의 User에서 Chulsoo를 선택하고 Permissions에서 Inline Policies를 선택합니다. IAM Policy 문법을 모른다면 Policy Generator를 선택하면 쉽게 Policy를 구성할 수 있습니다.

Policy Generator를 선택 후 아래와 같이 입력합니다. 풀어 설명하면 권한을 허가(Allow)하는데 해당 허가하는 AWS Security Token Service의 AssumeRole API를 Amazon Resource Name(ARN)에 대해서 허가한다는 정책입니다.

Review Policy에서 구성된 Policy를 확인할 수 있습니다. 아래와 같은 정책이 생성되어 해당 User에 적용됩니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1458698661000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::XXXXXXXXXXXX:role/NetworkAdmin"
            ]
        }
    ]
}

Switch Role 사용하기
이제 User와 Role이 모두 생성되었으니, 해당 User로 AWS 관리 콘솔에 로그인합니다. User로 로그인하기 위해서는 별도 IAM User sign-in 주소를 사용합니다. IAM 대시 보드에서 주소를 확인할 수 있습니다. IAM 사용자들이 기억하기 쉬운 도메인 주소로 재설정한 후, 북마크 해서 사용할 수 있습니다.

웹 브라우저에서 해당 주소를 입력하고 앞에서 생성한 Chulsoo와 지정한 암호를 입력하여 로그인합니다. 로그인을 하였으나, 현재 아무런 권한이 없습니다. 앞에서 생성한 NetworkAdmin을 권한을 등록 사용할 수 있도록 switch role in the console 주소를 이용합니다.

만약 업무에서는 IAM을 관리하는 관리자가 요청된 권한을 가진 Role을 생성하고 switch role을 위한 아래 링크 주소를 User에게 주는 방식으로 쉽게 관리가 가능합니다.

Chulsoo user로 로그인 한 후에 위 주소를 브라우져에 입력하면 아래와 같이 Switch Role 지정 화면으로 이어집니다.

Switch Role 버튼을 누르면 바로 해당 Role로 AWS 관리 콘솔에 로그인이 됩니다. Role로 지정한 색과 이름이 오른쪽 윗 부분에 쉽게 표시됩니다.

VPCFullAccess 권한을 가진 NetworkAdmin Role을 가지고 있으므로, 다른 AWS Service에서는 전혀 작업을 할 수 없으나, VPC 메뉴에서는 모든 관련 작업을 할 수 있습니다.

예를 들어 RDS Instance를 확인하려 할 경우 권한이 없는 에러가 발생합니다.

다른 Role로 전환하기
위에서 NetworkAdmin Role을 만든 것과 동일한 방법으로 RDS만 관리할 수 있는 Role을 생성하여 동일하게 Chulsoo user가 사용할 수 있도록 추가합니다.

여기서는 RDSAdmin Role을 생성하여 구성하였습니다. 동일한 방법으로 Switch Role을 하여 등록하면 아래와 같이 RDSAdmin Role로 변경된 것을 확인할 수 있습니다.

이제 RDS메뉴로 가면 DB를 생성할 수도 있고, RDS instance도 확인이 가능합니다.

위와 같이 구성하면 이제 Chulsoo user를 NetworkAdmin과 RDSAdmin을 자유롭게 변경하면서 작업을 할 수 있습니다. 메뉴에서 원하는 Role을 선택하면 바로 해당 Role로 전환이 됩니다.

이처럼 교차 계정 접근를 통해 Role을 사용하면 동일 AWS 계정내에서는 제한적인 권한으로 안전하게 AWS 서비스를 운영하거나 사용할 수 있고, 다른 Account ID를 통해 다른 사용자에게 권한을 위임할 수도 있습니다. IAM User Credential을 배포하는 방식이 아닌 Role을 배포하는 방식을 활용하면 보다 안전하게 권한 관리를 할 수 있으며, 보안 입장에서도 편리하게 운영이 가능합니다. Dev/Test/Prod 환경에서 위와 같은 User/Role을 이용하여 AWS를 안전하게 사용하시길 권고 드립니다.

더 자세한 정보는 How to Enable Cross-Account Access to the AWS Management Console(영문)이나 도움말 – IAM 역할과 리소스 기반 정책의 차이을 참고하시기 바랍니다.

본 글은 아마존웹서비스 코리아의 솔루션즈 아키텍트가 국내 고객을 위해 전해 드리는 AWS 활용 기술 팁을 보내드리는 코너로서, 이번 글은 김일호 솔루션즈 아키텍트께서 작성해주셨습니다.