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

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

들어가며

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

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

역할 기반 접근 제어

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

{
"name": "roles/testRole",
"title": "Bucket read role",
"includedPermissions": [
"storage.buckets.get",
"storage.buckets.list"
]
}
[예제 1] 역할 정의

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

{
"bindings": [{
"role": "roles/testRole",
"members": [
"user:developer@s-core.co.kr"
]
}]
}
[예제 2] 역할 부여

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

속성 기반 접근 제어

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

{
"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] 속성 기반 접근 제어 적용

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

클라우드 플랫폼에서 속성 기반 접근 제어와 역할 기반 접근 제어를 동시에 사용하면 권한을 더 세밀하게 관리할 수 있습니다.

권한 관리 팁

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

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

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

2) 서비스별 계정 분리

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

3) 최소 권한 부여

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

마치며

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

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


# References
[1] https://en.wikipedia.org/wiki/Role-based_access_control
[2] https://en.wikipedia.org/wiki/Attribute-based_access_control
[3] https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html
[4] https://cloud.google.com/iam/docs
[5] https://docs.microsoft.com/ko-kr/azure/role-based-access-control




▶ 해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 기고자에게 저작권이 있습니다.
▶ 해당 콘텐츠는 사전 동의 없이 2차 가공 및 영리적인 이용을 금하고 있습니다.


공유하기 열기
최재준
최재준 클라우드 전문가

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

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