인사이트

인사이트

새로운 관점으로 깊이 있는 통찰을 제시합니다.

클라우드 플랫폼

클라우드 플랫폼 권한 관리, 어떻게 해야 할까?

2021.08.06최재준
다운로드

들어가며

클라우드 환경의 컴퓨팅 자원은 보안이 중요하기 때문에 권한을 가진 사용자에게만 접근을 허용해야 한다. 하지만 점점 더 많은 시스템과 애플리케이션이 클라우드로 옮겨지면서 권한 관리가 어려워지고 있다. 본 아티클에서는 클라우드 플랫폼에서 권한 관리를 어떻게 해야 하는지 알아보겠다.

권한은 누가 무엇을 할 수 있는지 제어한다. 대부분의 상용 클라우드 플랫폼은 IAM(Identity and Access Management, 신원 및 접근 관리) 서비스를 통해 자원에 대한 권한을 관리한다. 이를 위해 IAM 서비스는 주체 관리뿐 아니라 주체가 가질 수 있는 권한에 대한 관리 기능을 동시에 제공한다. 여기서는 권한 관리에 초점을 맞춰 설명하겠다.

 

 

역할 기반 접근 제어

역할 기반 접근 제어(Resource-Based Access Control, RBAC)는 이름 그대로 역할에 따라 클라우드 자원에 대한 접근을 제어한다. 대부분의 상용 클라우드 플랫폼이 지원하는 권한 관리 체계로 권한 영역에 역할이라는 개념을 도입해 표현력을 확장했다. 역할은 권한들의 모임이며 역할 기반 접근 제어는 여러 권한을 모아 하나의 역할을 만들어 낸다. [예제 1]은 구글 클라우드에서 역할을 표현한 것이다.

 

예제1 구글 클라우드에서 역할을 정의하는 코드. { "name": "roles/testRole", "title": "Bucket read role", "includedPermissions": [ "storage.buckets.get", "storage.buckets.list" ] }

 

역할 정의에서 name은 역할의 이름이고 includedPermissions는 역할이 가질 권한을 나열한 것이다. 이 역할은 roles/testRole이라는 이름을 가지고 있다. 나중에 이 값을 주체에 할당해 역할에 딸린 권한을 부여할 수 있다. 이렇게 역할을 정의하면 이 역할을 특정한 주체에 부여할 수 있다.

 

예제2 구글 클라우드에서 역할 부여 소스 코드. { "bindings": [{ "role": "roles/testRole", "members": [ "user:develpoer@s-core.co.kr" ] }] }

 

[예제 2]를 보자. 이전에 정의한 roles/testRole이라는 역할을 user:developer@s-core.co.kr이라는 사용자에게 부여하면 이 사용자는 역할에 딸린 권한을 획득하게 된다.

 

 

속성 기반 접근 제어

속성 기반 접근 제어(Attribute-Based Access Control, ABAC)는 주체, 자원 또는 환경의 속성을 기반으로 접근을 제어하는 방식이다. 속성은 주체 이름, 자원 유형, 현재 시간 등 다양하게 존재하며 지원하는 속성의 종류는 각 클라우드 플랫폼마다 상이하다. 일반적으로 속성 기반 접근 제어는 역할 기반 접근 제어와 동시에 사용해 권한을 더 세밀하게 관리할 수 있도록 한다.

 

예제3 속성기반 접근 제어 허용 소스 코드. { "bindings": [{ "role": "roles/testRole", "members": [ "user:developer@s-core.co.kr" ], "condition": { "title": "DateTime Expires", "description": "Expires at noon on 2021-12-31 UTC", "expression": "request.time < timestamp('2021-12-31T12:00:00Z')" } }] }

 

[예제 3]은 역할을 부여할 때 condition 항목을 추가하여 속성 기반 접근 제어를 적용한 것이다. 추가된 속성 조건으로 인해 2021년 12월 31일 12시가 넘지 않았을 때에만 권한을 획득할 수 있도록 한다.

 

 

권한 관리 팁

잘못된 권한 관리는 보안상의 문제를 발생시킬 수 있기 때문에 항상 유의해야 하며 권한이 과도하게 부여되지 않도록 관리해야 한다.

 

1) 미리 제공되는 역할 사용

권한 관리에 익숙하지 않은 경우 각 클라우드 플랫폼이 미리 준비해 놓은 역할을 사용하는 게 좋다. 이러한 사전 정의 역할은 해당 클라우드 플랫폼이 제공하는 모든 상품의 사용성에 맞도록 준비 및 관리되고 있기 때문에 대부분의 상황에서 유용하며 안전하다. 이후 권한 관리가 익숙해지면 이러한 사전 정의 역할을 본인 여건에 맞춰 일부 수정해 사용하면 된다.

 

2) 서비스별 계정 분리

클라우드 자원을 이용해 다양한 서비스를 제공하는 경우 각 서비스별로 계정을 나누어 관리하는 것이 좋다. 하나의 계정으로 여러 자원에 접근하는 경우 많은 권한이 필요하게 되고 이는 결국 단일 취약점이 되어 보안 문제를 일으킬 수 있기 때문이다. 시중의 클라우드 플랫폼은 대부분 계정 간 임시 권한 부여 기능을 지원한다. 이를 통해 계정 사이의 권한 경계를 만들고 다른 계정의 자원에 접근할 때에는 임시 권한만 부여함으로써 안전성을 담보할 수 있다.

 

3) 최소 권한 부여

클라우드 플랫폼 권한 관리 체계에서는 모든 권한을 의미하는 ‘ * ‘ 또는 ‘ / ‘와 같은 표현을 허용하는 경우가 많다. 모든 권한을 허용하면 사용하기에는 편리하지만 보안 문제가 생길 수 있다. 따라서 각 주체에는 반드시 필요한 만큼 최소한의 권한만 부여해야 하며 이 때 권한의 개수뿐만 아니라 기간도 고려해야 한다. 영구적으로 권한을 가질 필요가 없다면 속성 조건을 추가하여 지정한 기간 동안에만 권한이 유지되도록 하면 된다.

 

 

마치며

지금까지 클라우드 플랫폼이 지원하는 접근 제어의 개요와 관리 방안을 살펴보았다. 플랫폼에 따라 지원 수준과 표현법은 다르지만 역할 기반 및 속성 기반 접근 제어는 권한 관리의 기본이기 때문에 조금 복잡하더라도 한 번만 제대로 익혀두면 다양한 서비스에 적용할 수 있다.

권한 관리의 허점을 파고든 클라우드 보안 사고의 발생 가능성은 항상 존재한다. 특히 클라우드가 기업 IT 전략 방향의 중심에 위치하면서 시스템, 애플리케이션 및 데이터에 대한 접근 권한 관리에 많은 신경을 써야 한다. 이 아티클을 읽는 소프트웨어 개발자와 시스템 관리자는 권한 관리의 중요성을 필히 인식하여 클라우드 플랫폼을 안전하게 활용·운영하기를 바란다.

# References

- https://en.wikipedia.org/wiki/Role-based_access_control
- https://en.wikipedia.org/wiki/Attribute-based_access_control
- https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html
- https://cloud.google.com/iam/docs
- https://docs.microsoft.com/ko-kr/azure/role-based-access-control

최재준 프로

최재준 프로

에스코어㈜ 소프트웨어사업부 클라우드플랫폼그룹

클라우드 플랫폼의 Open API 및 권한관리 시스템을 설계하고 있고 백엔드 서비스를 개발하고 있습니다.