IAM으로 폴더 액세스 제어

Google Cloud에서는 Identity and Access Management(IAM)를 제공하므로 특정 Google Cloud 리소스에 더욱 세분화된 액세스 권한을 부여하고 다른 리소스에 대한 무단 액세스를 방지할 수 있습니다. IAM은 최소 권한의 원칙을 채택하여 리소스에 대해 필요한 액세스 권한만 부여할 수 있게 해줍니다.

IAM을 사용하면 IAM 정책을 설정하여 어떠한 리소스에 대해 누구(사용자)에게 어떠한 액세스 권한(역할)이 있는지 제어할 수 있습니다. IAM 정책은 사용자에게 구체적인 역할을 부여하여 특정 권한을 줍니다.

이 페이지에서는 폴더 수준에서 사용할 수 있는 IAM 역할과 Cloud Resource Manager API를 사용하여 폴더에 대한 IAM 정책을 만들고 관리하는 방법에 대해 설명합니다. IAM에 대한 자세한 내용은 IAM 문서를 참조하세요. 특히 액세스 권한 부여, 변경, 취소를 확인하시기 바랍니다.

폴더에 대한 IAM 역할 개요

IAM 역할을 구성하는 데 도움이 되도록 다음 사항이 아래 표에 나와 있습니다.

  • 사용 설정할 작업 유형
  • 해당 작업을 수행하는 데 필요한 역할
  • 해당 역할을 적용해야 하는 리소스 수준
작업 유형 필요 역할 리소스 수준
조직 리소스에서 폴더 관리 폴더 관리자 조직 리소스
폴더와 폴더에 포함된 모든 프로젝트 및 폴더 관리 폴더 관리자 특정 폴더
폴더 IAM 정책에 액세스 및 관리 폴더 IAM 관리자 특정 폴더
새 폴더 만들기 폴더 생성자 새 폴더 위치의 상위 리소스
폴더 및 프로젝트 이동 폴더 이동자 원래 폴더 위치와 새 폴더 위치 모두의 상위 리소스
새 폴더로 프로젝트 이동 프로젝트 편집자 또는 프로젝트 소유자 원래 프로젝트 위치와 새 프로젝트 위치 모두의 상위 리소스
폴더 삭제 폴더 편집자 또는 폴더 관리자 특정 폴더

폴더와 함께 IAM 역할 및 권한 사용 시의 권장 사항

폴더에 사용할 IAM 역할 및 권한을 할당할 때 다음 사항에 유의하세요.

  • 가능하면 그룹을 사용하여 주 구성원을 관리합니다.
  • 소유자, 편집자, 뷰어 같은 기본 역할의 사용을 최소화합니다. 대신 최소 권한 원칙에 사전 정의된 역할을 사용합니다.
  • 폴더 전체 관리를 위해 폴더 수준에서 권한을 할당하고 프로젝트가 해당 권한을 자동으로 상속하도록 합니다. 예를 들어 부서 관리자 그룹에 폴더에 대한 폴더 관리자 역할을 할당할 수 있습니다. 부서 전체 권한이 필요한 네트워크 관리자에게 폴더에 대한 네트워크 관리자 역할을 부여할 수 있습니다.
  • 리소스를 폴더 외부로 이동하기 전에 변경될 수 있는 권한을 신중하게 고려합니다. 그렇지 않으면 해당 리소스에 대한 권한이 필요한 기존 앱 또는 워크플로가 중단될 위험이 있습니다.
  • 폴더 아래의 프로덕션 프로젝트를 이동하기 전에 리소스 계층 구조를 신중하게 계획하고 테스트합니다. 이를 위해서는 조직 리소스 아래 테스트 폴더를 만들고 계획한 계층 구조의 프로토타입을 미리 만들어야 합니다.
  • 폴더 수준에서 사용자에게 역할을 부여하면 해당 폴더 아래의 모든 리소스에 대한 역할도 함께 부여됩니다. 예를 들어 폴더에서 사용자에게 Compute Admin 역할(roles/compute.admin)을 부여하면 사용자는 해당 폴더의 모든 프로젝트에서 Compute Engine 리소스를 완전히 제어할 수 있습니다.

폴더 역할 및 권한 이해하기

기본 역할

폴더를 만들 때 생성자로서 완벽하게 제어할 수 있도록 폴더에 대해 폴더 관리자 또는 폴더 편집자 역할을 부여받게 됩니다. 아래에서 이러한 역할이 제공하는 권한을 자세히 알아보세요. 이러한 기본 역할은 IAM 정책에서 정상적으로 변경될 수 있습니다.

사전 정의된 역할 사용

역할 권한

(roles/resourcemanager.folderAdmin)

폴더 작업을 위해 사용 가능한 모든 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 폴더

essentialcontacts.*

  • essentialcontacts.contacts.create
  • essentialcontacts.contacts.delete
  • essentialcontacts.contacts.get
  • essentialcontacts.contacts.list
  • essentialcontacts.contacts.send
  • essentialcontacts.contacts.update

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.*

  • resourcemanager.folders.create
  • resourcemanager.folders.delete
  • resourcemanager.folders.get
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.folders.list
  • resourcemanager.folders.move
  • resourcemanager.folders.setIamPolicy
  • resourcemanager.folders.undelete
  • resourcemanager.folders.update

resourcemanager.hierarchyNodes.*

  • resourcemanager.hierarchyNodes.createTagBinding
  • resourcemanager.hierarchyNodes.deleteTagBinding
  • resourcemanager.hierarchyNodes.listEffectiveTags
  • resourcemanager.hierarchyNodes.listTagBindings

resourcemanager.projects.get

resourcemanager.projects.getIamPolicy

resourcemanager.projects.list

resourcemanager.projects.move

resourcemanager.projects.setIamPolicy

(roles/resourcemanager.folderIamAdmin)

폴더 수준에서 허용 정책을 관리할 수 있는 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 폴더

resourcemanager.folders.get

resourcemanager.folders.getIamPolicy

resourcemanager.folders.setIamPolicy

(roles/resourcemanager.folderCreator)

계층 구조를 찾아보고 폴더를 생성하는 데 필요한 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 폴더

essentialcontacts.contacts.get

essentialcontacts.contacts.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.create

resourcemanager.folders.get

resourcemanager.folders.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/resourcemanager.folderEditor)

폴더를 수정하고 폴더의 허용 정책을 볼 수 있는 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 폴더

essentialcontacts.contacts.get

essentialcontacts.contacts.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.delete

resourcemanager.folders.get

resourcemanager.folders.getIamPolicy

resourcemanager.folders.list

resourcemanager.folders.undelete

resourcemanager.folders.update

resourcemanager.projects.get

resourcemanager.projects.list

(roles/resourcemanager.folderMover)

프로젝트와 폴더를 상위 조직 또는 폴더 안팎으로 이동할 수 있는 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 폴더

resourcemanager.folders.move

resourcemanager.projects.move

(roles/resourcemanager.folderViewer)

리소스에 속한 폴더를 가져오고 폴더와 프로젝트를 나열할 수 있는 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 폴더

essentialcontacts.contacts.get

essentialcontacts.contacts.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.get

resourcemanager.folders.list

resourcemanager.projects.get

resourcemanager.projects.list

커스텀 역할 만들기

이 항목에서 설명하는 사전 정의된 역할 외에, 요구사항에 맞게 조정하는 권한 컬렉션인 커스텀 역할을 만들 수도 있습니다. Resource Manager에 사용할 커스텀 역할을 만들 때 다음 사항에 유의하세요.
  • resourcemanager.projects.get/list 같은 List 및 get 권한은 항상 쌍으로 부여해야 합니다.
  • 커스텀 역할에 folders.listfolders.get 권한이 있는 경우 projects.listprojects.get 권한도 있어야 합니다.
  • 조직, 폴더, 프로젝트 리소스에 대한 setIamPolicy 권한이 있는 사용자는 기타 모든 권한을 부여할 수 있으므로 주의해서 할당해야 합니다.

폴더 찾아보기를 사용 설정할 수 있는 역할 부여

나열하기 권한은 폴더 찾아보기를 사용 설정합니다. 일반적으로 부여해야 하는 두 가지 유형의 나열하기 권한은 사용자가 리소스에 속한 폴더를 나열할 수 있는 resourcemanager.folders.list와 사용자가 조직 리소스 또는 폴더에 속한 프로젝트를 찾아볼 수 있는 resourcemanager.projects.list입니다. 조직 관리자는 이러한 두 가지 권한으로 초기화됩니다. 조직 관리자 역할을 부여받지 않은 사용자의 경우 다음 사항에 유의하세요.

  • resourcemanager.folders.list폴더 뷰어폴더 편집자 역할을 통해 부여됩니다.
  • resourcemanager.projects.list뷰어 또는 브라우저 역할을 통해 부여됩니다.

조직 리소스 주 구성원이 전체 조직 리소스 계층 구조를 찾아보려면 조직 리소스 수준에서 목록 권한을 부여해야 합니다.

폴더 생성을 사용 설정할 수 있는 역할 부여

폴더를 만들어야 하는 사용자에게는 계층 구조에서 폴더가 생성되는 수준 상위의 리소스에 대해 폴더 생성자 역할을 부여해야 합니다. 폴더 생성 권한과 함께 찾아보기 권한을 부여하면 사용자가 계층 구조에서 폴더가 생성되는 위치로 효과적으로 이동할 수 있습니다. 찾아보기 권한에 대한 자세한 내용은 위 섹션을 참조하세요.

폴더 생성자는 사용자에게 폴더를 삭제할 수 있는 권한을 부여하지 않습니다. 그러나 사용자가 폴더를 만들 때 해당 사용자에게 폴더 편집자 역할이 자동으로 부여됩니다. 폴더 편집자 역할은 폴더 삭제를 사용 설정합니다.

폴더 이동을 사용 설정할 수 있는 역할 부여

폴더를 상위 리소스에서 다른 상위 리소스로 이동하려면 이전 상위 리소스와 새 상위 리소스 모두 또는 공통된 상위 리소스에 대해 폴더 이동자 역할이 있어야 합니다.

프로젝트 이동을 사용 설정할 수 있는 역할 부여

프로젝트를 폴더로 이동하려면 프로젝트에 대한 프로젝트 편집자 또는 프로젝트 소유자 역할과 소스 및 대상 상위 리소스에 대한 프로젝트 이동자 역할이 있어야 합니다.

이는 조직 소유가 아닌 프로젝트를 조직 리소스로 이동하기 위한 요구사항, 즉 프로젝트에 대한 프로젝트 편집자 또는 프로젝트 소유자 역할과 조직 리소스에 대한 프로젝트 생성자 역할이 있어야 한다는 요구사항과는 약간 다릅니다.

폴더 생성을 사용 설정할 수 있는 폴더별 역할 부여

프로젝트를 만들려면 프로젝트 생성자 역할이 있어야 합니다. 그러나 조직 전체에서 프로젝트 생성 권한을 부여하는 대신 지정된 폴더의 프로젝트만 보고 만들 수 있도록 사용자를 제한하는 것이 도움이 될 수 있습니다.

조직별 권한을 부여하는 방법은 다음과 같습니다.

  1. 조직 노드 수준에서 사용자에게 조직 뷰어 역할을 부여합니다(예: domain.com).
  2. 새 폴더를 만듭니다.
  3. 사용자를 폴더 수준에서 IAM에 추가하고 폴더 뷰어프로젝트 생성자 역할을 부여합니다.

이렇게 하면 사용자가 더 큰 조직 리소스의 모든 프로젝트에 대한 가시성을 부여받지 않고도 폴더에서 프로젝트를 만들 수 있습니다.