Amazon Web Services 한국 블로그

AWS IAM, 구성원의 업무 속성 기반 권한 관리 기능 출시

다양한 애플리케이션 권한 관리를할 때, 주로 Role-based Access Control(역할 기반 액세스 제어, RBAC)를 사용하는 경우가 많습니다. RBAC를 사용할 때에는 리소스에 대한 액세스 권한을 정의하고 이러한 권한을 정책으로 그룹화하고, 정책을 역할에 할당하고, 역할을 사람, 그룹, 서버 또는 애플리케이션 등의 주체에 할당합니다. 많은 AWS 고객들이 회사내에서 유사한 비즈니스 기능을 공유하는 사용자와 같은 관련 주체에게 액세스 권한을 부여하는 작업을 간소화하기 위해서 이렇게 하고 있다고 말합니다.

예를 들어, 재무 데이터베이스 관리자에 대한 역할을 생성하고, 이 역할에 재무 업무에 필요한 테이블 및 컴퓨팅 리소스에 대한 액세스를 부여할 수 있습니다. 데이터베이스 관리자인 홍길동님이 이 부서에 합류하면 홍길동님에게는 재무 데이터베이스 관리자 역할을 할당합니다.

AWS에서는 AWS Identity and Access Management(IAM) 권한 정책IAM 역할을 사용하여 RBAC 전략을 구현해 왔습니다. 다만, 제공하는 자원이 급증하는 추세에서 새 자원이 시스템에 추가되면 시스템 관리자는 권한을 모든 관련 정책에 추가해야 합니다. 이를 수천 개의 리소스와 수천 개의 정책으로 확대하거나,  권한 정책 변경 사항이 사용자 또는 애플리케이션에 불필요한 권한을 부여하지 않는지 확인하기가 어렵습니다.

속성 기반 액세스 제어 기능 추가
클라우드 자원이 계속 증가하는 상황에서 권한 관리를 간소화하기 위해, Attribute-based Access Control(속성 기반 액세스 제어, APAC)라는 새로운 패러다임이 등장했습니다. ABAC를 사용할 때에는 일치하는 속성을 기반으로 권한을 정의합니다. 정책에는 사용자 속성, 리소스 속성, 환경 속성 등 어떤 유형의 속성이라도 사용할 수 있습니다. 정책은 IF … THEN 귳틱입니다. 예를 들어, IF 사용자 속성 role == manager THEN 해당 사용자는 속성이 sensitivity == confidential인 파일 리소스에 액세스할 수 있습니다.

ABAC 권한 제어를 사용하면, 리소스를 추가할 때 더 이상 정책을 업데이트하지 않아도 되므로 권한 시스템의 규모를 조정할 수 있습니다. ABAC에서는 정책을 업데이트하는 대신 리소스에 올바른 속성이 연결되어 있도록 합니다. ABAC를 사용하면 직무 역할별로 정책을 생성할 필요가 없으므로 더 적은 수의 정책을 관리할 수 있습니다.

AWS에서는 속성을 태그라고 부릅니다. 태그는 Amazon Elastic Compute Cloud(EC2) 인스턴스, Amazon Elastic Block Store(EBS) 볼륨, AWS Identity and Access Management(IAM) 사용자 등과 같은 다양한 리소스에 연결할 수 있습니다. 리소스에 태그를 지정하는 기능과 태그에 권한 조건을 정의할 수 있는 기능의 조합은 결국 AWS 리소스에 대한 액세스를 제어하기 위해 ABAC 패러다임을 도입할 수 있게 해 줍니다.

AWS에서 ABAC 권한을 사용하는 방법에 대한 자세한 내용은 설명서의 새로운 ABAC 섹션 또는 자습서를 확인하거나 re:Inforce에서 Brigid의 세션을 시청하십시오.

이는 큰 단계였지만 사용자 속성이 AWS에 저장된 경우에만 기능했습니다. 많은 AWS 고객들은 ID(및 해당 속성)을 다른 리소스에서 관리하고 연동을 사용하여 사용자의 AWS 액세스를 관리합니다.

연동된 사용자를 위한 속성 전달
이제 사용자가 AWS에 연동할 때 표준 기반 SAML을 사용하여 AWS 세션에 사용자 속성을 전달할 수 있게 되었습니다. 이제 외부 ID 시스템에 정의된 속성을 AWS 내의 속성 기반 액세스 제어 결정의 일부로 사용할 수 있습니다. 외부 ID 시스템의 관리자는 사용자 속성을 관리하고 연동 중 전달할 속성을 정의합니다. 이렇게 전달되는 속성을 “세션 태그”라고 합니다. 세션 태그는 일시적인 태그로서 연동된 세션 기간 동안만 유효합니다.

ABAC를 사용하여 클라우드 리소스에 액세스 권한을 부여하는 방식에는 몇 가지 장점이 있습니다. 그 중 하나는 관리할 역할 수가 더 적다는 것입니다. 예를 들어, 밥과 앨리스가 동일한 직무를 공유하지만 서로 다른 비용 센터에 소속되어 있으며, 각 사용자의 비용 센터에 해당되는 리소스에만 액세스 권한을 부여하고자 하는 경우를 가정해 보겠습니다. 두 개의 역할이 필요한 RBAC와 달리 ABAC에서는 하나의 역할만 필요합니다. 앨리스와 밥은 동일한 역할을 가집니다. 정책은 비용 센터 태그 값이 리소스 센터 태그 값과 일치하는 리소스에 대한 액세스 권한을 부여합니다. 이제 20개의 비용 센터에 걸쳐 1,000명의 사용자가 있다고 가정해 보십시오. ABAC는 비용 센터 역할을 20개에서 1개로 줄일 수 있습니다.

다른 예를 살펴 보겠습니다. 개발자가 IAM 역할을 사용하여 AWS에 연동할 때 시스템 엔지니어가 외부 ID 시스템에 세션 태그로 CostCenter가 포함되도록 구성한다고 가정해 보겠습니다. 연동된 세션 및 리소스에 포함된 CostCenter 태그를 기반으로 권한이 적용되므로 모든 연동된 개발자는 동일한 역할을 가지지만 해당 비용 센터에 속하는 AWS 리소스에 대해서만 액세스 권한이 부여됩니다.

아래 다이어그램을 통해 이 예를 살펴 보겠습니다.


위 그림에서 파란색, 노란색 및 녹색은 해당 사용자들이 연결된 세 개의 비용 센터를 나타냅니다. ABAC를 설정하려면, 먼저 모든 프로젝트 리소스에 해당 CostCenter 태그를 지정하고 외부 ID 시스템이 개발자 세션에 CostCenter 태그를 포함하도록 구성합니다. 이 시나리오에서 IAM 역할은 CostCenter 태그를 기반으로 프로젝트 리소스에 대한 액세스 권한을 부여합니다. IAM 권한은 다음과 같은 모양을 가집니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [ "ec2:DescribeInstances"],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": ["ec2:StartInstances","ec2:StopInstances"],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/CostCenter": "${aws:PrincipalTag/CostCenter}"
                }
            }
        }
    ]
}

액세스 권한은 조건이 일치할 때, 즉 리소스의 CostCenter 태그가 주체의 CostCenter 태그와 일치할 때에만 부여(Allow)됩니다. 이제, 사용자들이 이 역할을 사용하여 AWS에 연동할 때마다 연동 세션에 포함된 CostCenter 태그를 기반으로 해당 비용 센터에 속하는 리소스에 대한 액세스 권한만 부여됩니다.

사용자가 비용 센터를 녹색에서 파란색로 전환하는 경우, 시스템 관리자가 외부 ID 시스템을 CostCenter = blue로 업데이트하면 AWS에서 권한을 업데이트하지 않아도 AWS의 권한이 자동으로 파란색 비용 센터 AWS 리소스에 대한 액세스 권한을 허용하도록 적용됩니다. 비슷한 방식으로, 시스템 관리자가 새 사용자를 외부 ID 시스템에 추가하면 이 사용자에게 해당 비용 센터에 속하는 AWS 리소스에 대한 액세스 권한이 즉각적으로 부여됩니다.

AWS는 Auth0, ForgeRock, IBM, Okta, OneLogin, Ping IdentityRSA와의 협력을 통해 해당 시스템에 정의된 속성이 AWS 세션에 올바르게 전파될 수 있도록 했습니다. 자세한 내용은 해당 공급자가 게시한 AWS를 위해 세션을 구성하는 방법에 대한 지침을 참조하십시오. 다른 ID 공급자를 사용하는 경우에도 해당 공급자가 산업 표준인 SAML 2.0 또는 OIDC(OpenID Connect)를 지원한다면 세션 태그를 구성할 수 있을 것입니다. AWS는 더 많은 ID 공급자와 협력하여 더 많은 ID 솔루션이 세션 태그를 인증할 수 있도록 작업하고 있습니다.

세션 태그는 현재 추가 비용 없이 모든 리전에서 사용할 수 있습니다. ABAC 기반 권한 시스템을 구성하기 위한 단계별 지침은 AWS의 새로운 세션 태그 설명서 페이지를 참조하십시오.

— seb