개요

이 페이지에서는 Cloud Identity and Access Management(Cloud IAM)의 기본 개념을 설명합니다.

Cloud IAM을 사용하면 특정 Google Cloud 리소스에 대한 세부적인 액세스 권한을 부여하고 다른 리소스에 대한 액세스를 방지할 수 있습니다. 또한 Cloud IAM은 최소 권한의 보안 원칙을 적용하여 특정 리소스에 액세스하는 데 필요한 권한만 부여할 수 있게 해줍니다.

Cloud IAM의 작동 방식

Cloud IAM을 사용하면 누구(ID)에게 무슨 리소스에 대한 어떤 액세스 권한(역할)이 있는지 정의하여 액세스 제어를 관리할 수 있습니다. 예를 들어 Compute Engine 가상 머신 인스턴스, Google Kubernetes Engine(GKE) 클러스터, Cloud Storage 버킷은 모두 Google Cloud 리소스입니다. 리소스를 구성하는 데 사용하는 조직, 폴더, 프로젝트도 리소스입니다.

Cloud IAM에서 리소스 액세스 권한은 최종 사용자에게 직접 부여되지 않습니다. 대신 권한이 역할로 그룹화되고, 역할은 인증된 구성원에게 부여됩니다. Cloud IAM 정책은 어떤 역할이 어떤 구성원에게 부여되는지 정의하고 적용하며 이 정책은 리소스에 연결됩니다. 인증된 구성원이 리소스에 액세스하려 하면 Cloud IAM은 리소스의 정책을 확인하여 작업 허용 여부를 결정합니다.

다음 다이어그램은 Cloud IAM의 권한 관리를 나타낸 것입니다.

Cloud IAM 아키텍처.

이 액세스 관리 모델에는 세 개의 주요 부분이 있습니다.

  • 구성원. 구성원이란 Google 계정(최종 사용자의 경우), 서비스 계정(앱 및 가상 머신의 경우), Google 그룹, 리소스에 액세스할 수 있는 G Suite 또는 Cloud ID 도메인일 수 있습니다. 구성원의 ID는 사용자, 서비스 계정 또는 Google 그룹과 연결된 이메일 주소이거나 G Suite 또는 Cloud ID 도메인과 연결된 도메인 이름입니다.
  • 역할. 역할이란 권한의 모음입니다. 권한은 리소스에 대해 허용되는 작업을 결정합니다. 구성원에게 역할을 부여하면 역할에 포함된 모든 권한을 부여하게 됩니다.
  • 정책. Cloud IAM 정책은 하나 이상의 구성원을 역할에 바인딩합니다. 리소스에 대해 누구(구성원)에게 어떤 액세스 권한(역할)이 있는지 정의하려면 정책을 만들고 리소스에 연결합니다.

예를 들어 앞의 다이어그램에서 Cloud IAM 정책은 userid@gmail.com으로 식별된 최종 사용자를 App Engine 관리자 역할(roles/appengine.appAdmin)에 바인딩합니다. 정책이 프로젝트에 연결된 경우 사용자 userid@gmail.com은 해당 프로젝트 내에서 App Engine 관리자 역할을 갖습니다. 이 경우 사용자는 App Engine의 모든 프로젝트 수준 앱 구성 및 설정을 보고 만들고 업데이트할 수 있습니다.

이 페이지의 나머지 부분에서는 이러한 개념을 더 자세히 설명합니다.

Cloud IAM에서는 구성원에 액세스 권한을 제공합니다. 구성원은 다음 유형 중 하나일 수 있습니다.

  • Google 계정
  • 서비스 계정
  • Google 그룹
  • G Suite 도메인
  • Cloud ID 도메인

Google 계정

Google 계정은 개발자, 관리자, Google Cloud와 상호작용하는 다른 모든 사람을 나타냅니다. Google 계정과 연결된 모든 이메일 주소는 ID가 될 수 있고, gmail.com 및 기타 도메인을 사용할 수 있습니다. 신규 사용자는 Google 계정 가입 페이지에서 Google 계정에 가입할 수 있습니다.

서비스 계정

서비스 계정은 개별 최종 사용자가 아닌 애플리케이션의 계정입니다. Google Cloud에서 호스팅되는 코드를 실행하면 코드가 지정한 계정으로 실행됩니다. 애플리케이션의 다양한 논리적 구성요소를 나타내는 데 필요한 개수대로 서비스 계정을 생성할 수 있습니다. 애플리케이션에서 서비스 계정을 사용하는 방법은 인증 시작하기를 참조하세요.

Google 그룹

Google 그룹은 여러 Google 계정과 서비스 계정을 모아 이름을 붙인 계정 컬렉션입니다. 모든 Google 그룹에는 그룹과 연결된 고유한 이메일 주소가 있습니다. 모든 Google 그룹의 홈페이지에서 정보를 클릭하면 Google 그룹과 연결된 이메일 주소를 찾을 수 있습니다. Google 그룹에 대한 자세한 내용은 Google 그룹스 홈페이지를 참조하세요.

Google 그룹스를 사용하면 여러 사용자의 컬렉션에 액세스 정책을 편리하게 적용할 수 있습니다. 개별 사용자 또는 서비스 계정에 대해 한 번에 하나씩 액세스 제어 권한을 부여하거나 변경하는 대신 전체 그룹에 대해 액세스 제어 권한을 한꺼번에 부여하고 변경할 수 있습니다. 또한 사용자를 추가하거나 삭제하도록 Cloud IAM 정책을 업데이트하는 대신 Google 그룹에서 구성원을 쉽게 추가하거나 삭제할 수 있습니다.

Google 그룹스에는 로그인 사용자 인증 정보가 없으므로 Google 그룹스로 ID를 설정하여 리소스에 대한 액세스를 요청할 수는 없습니다.

G Suite 도메인

G Suite 도메인은 조직의 G Suite 계정에서 생성된 모든 Google 계정으로 구성된 가상 그룹을 나타냅니다. G Suite 도메인은 조직의 인터넷 도메인 이름(예: example.com)을 나타냅니다. G Suite 도메인에 사용자를 추가하면 이 가상 그룹 내에 있는 사용자의 Google 계정이 새로 만들어집니다(예: username@example.com).

Google 그룹스처럼 G Suite 도메인은 ID 설정에 사용할 수 없지만 권한을 편리하게 관리할 수 있습니다.

Cloud ID 도메인

Cloud ID 도메인은 조직의 모든 Google 계정으로 구성된 가상 그룹을 나타낸다는 의미에서 G Suite 도메인과 유사합니다. 하지만, Cloud ID 도메인 사용자는 G Suite 애플리케이션과 기능에 액세스할 수 없습니다. 자세한 내용은 Cloud ID 정보에서 확인하세요.

allAuthenticatedUsers

allAuthenticatedUsers 값은 Google 계정으로 인증된 모든 서비스 계정과 인터넷 상의 모든 사용자를 나타내는 특수 식별자입니다. 이 식별자에는 개인 Gmail 계정과 같이 G Suite 또는 Cloud ID 도메인에 연결되지 않은 계정이 포함됩니다. 익명 방문자와 같은 인증되지 않은 사용자는 포함되지 않습니다.

allUsers

allUsers 값은 인증 사용자와 미인증 사용자를 포함하여 인터넷 상의 모든 사용자를 나타내는 특수 식별자입니다.

인증된 구성원이 리소스에 액세스하려 하면 Cloud IAM은 리소스의 Cloud IAM 정책을 확인하여 작업 허용 여부를 결정합니다.

이 섹션에서는 승인 프로세스와 관련된 항목과 개념을 설명합니다.

리소스

사용자가 특정 Google Cloud 리소스에 액세스해야 하면 해당 리소스에 대한 역할을 사용자에게 부여할 수 있습니다. 프로젝트, Compute Engine 인스턴스, Cloud Storage 버킷이 리소스의 예시에 해당됩니다.

일부 서비스는 프로젝트 수준보다 세분화된 Cloud IAM 권한 부여를 지원합니다. 예를 들어 특정 Cloud Storage 버킷의 사용자에게 스토리지 관리자 역할(roles/storage.admin)을 부여하거나 특정 Compute Engine 인스턴스의 사용자에게 Compute 인스턴스 관리자 역할(roles/compute.instanceAdmin)을 부여할 수 있습니다.

다른 경우에는 프로젝트 수준에서 Cloud IAM 권한을 부여할 수 있습니다. 권한은 프로젝트의 모든 리소스에 상속됩니다. 예를 들어 프로젝트의 모든 Cloud Storage 버킷에 대한 액세스 권한을 부여하려면 각 개별 버킷이 아닌 프로젝트에 대한 액세스 권한을 부여합니다. 또는 프로젝트의 모든 Compute Engine 인스턴스에 대한 액세스 권한을 부여하려면 각 개별 인스턴스가 아닌 프로젝트에 대한 액세스 권한을 부여합니다.

리소스별로 부여할 수 있는 역할에 대한 자세한 내용은 역할 이해와 주어진 역할의 최하위 리소스 열을 참조하세요.

권한

권한은 리소스에 대해 허용되는 작업을 결정합니다. Cloud IAM 환경에서 권한은 <service>.<resource>.<verb> 형식으로 표시됩니다(예: pubsub.subscriptions.consume).

권한은 종종 REST API 메서드와 일대일 대응합니다. 다시 말해, 각 Google Cloud 서비스에는 노출하는 REST API 메서드마다 연결된 권한이 있습니다. 해당 메서드의 호출자는 해당 메서드를 호출할 수 있는 권한이 필요합니다. 예를 들어 Pub/Sub를 사용하는 경우 topics.publish() 메서드를 호출하려면 해당 주제에 대한 pubsub.topics.publish 권한이 있어야 합니다.

사용자에게 직접 권한을 부여하지는 않습니다. 대신 적절한 권한이 포함된 역할을 식별한 다음 해당 역할을 사용자에게 부여합니다.

역할

역할이란 권한의 모음입니다. 사용자에게 직접 권한을 부여할 수 없습니다. 대신 역할을 부여합니다. 사용자에게 역할을 부여하면 역할에 포함된 모든 권한이 부여됩니다.

역할 매핑 권한

Cloud IAM에는 다음과 같은 세 가지의 역할이 있습니다.

  • 기본 역할: 이전부터 Google Cloud Console에서 사용할 수 있는 역할입니다. 이러한 역할은 소유자, 편집자, 뷰어입니다. 이러한 역할에는 모든 Google Cloud 서비스에 대한 광범위한 권한이 포함되므로 가능하면 이러한 역할을 사용하지 마세요.

  • 사전 정의된 역할: 기본 역할보다 더욱 세부적인 액세스 제어를 부여하는 역할입니다. 예를 들어 사전 정의된 역할 Pub/Sub 게시자(roles/pubsub.publisher)는 Pub/Sub 주제에 메시지를 게시할 수 있는 액세스 권한 제공합니다.

  • 커스텀 역할: 사전 정의된 역할로 조직의 니즈를 충족할 수 없는 경우 니즈에 맞게 생성하는 커스텀 역할입니다.

사용자에게 역할을 부여하는 방법은 액세스 권한 부여, 변경, 취소를 참조하세요. 사용 가능한 Cloud IAM 사전 정의된 역할에 대한 자세한 내용은 역할 이해를 참조하세요. 커스텀 역할에 대한 자세한 내용은 커스텀 역할 이해커스텀 역할 만들기 및 관리를 참조하세요.

Cloud IAM 정책

사용자에게 부여되는 액세스 권한의 유형을 정의하는 여러 구문으로 구성된 Cloud IAM 정책을 생성해 사용자에게 역할을 부여할 수 있습니다. 정책은 리소스에 연결되며 리소스에 액세스할 때마다 액세스 제어를 적용하는 데 사용됩니다.

Cloud IAM 정책.

Cloud IAM 정책은 Cloud IAM Policy 객체로 표현됩니다. Cloud IAM Policy 객체는 바인딩 목록으로 구성됩니다. Bindingmembers 목록을 role에 바인딩합니다.

  • role: 구성원에게 부여할 역할입니다. roleroles/service.roleName 형식으로 지정됩니다. 예를 들어 Cloud Storage는 roles/storage.objectAdmin, roles/storage.objectCreator, roles/storage.objectViewer 등의 역할을 제공합니다.

  • members: 이 문서의 ID와 관련된 개념 섹션에서 설명한 한 개 이상의 ID 목록입니다. 각 구성원 유형은 Google 계정(user:), 서비스 계정(serviceAccount:), Google 그룹(group:), G Suite 도메인, Cloud ID 도메인(domain:) 같은 프리픽스로 식별됩니다. 다음 예시 코드 스니펫에서 storage.objectAdmin 역할은 적절한 프리픽스(user:alice@example.com, serviceAccount:my-other-app@appspot.gserviceaccount.com, group:admins@example.com, domain:google.com)를 사용하여 다음 구성원에게 부여됩니다. objectViewer 역할은 user:bob@example.com에 부여됩니다.

다음 코드 스니펫은 Cloud IAM 정책의 구조를 보여줍니다.

{
      "bindings": [
        {
          "role": "roles/storage.objectAdmin",
           "members": [
             "user:alice@example.com",
             "serviceAccount:my-other-app@appspot.gserviceaccount.com",
             "group:admins@example.com",
             "domain:google.com"
           ]
        },
        {
          "role": "roles/storage.objectViewer",
          "members": [
            "user:bob@example.com"
          ]
        }
      ]
    }
    

Cloud IAM 및 정책 API

Cloud IAM은 Google Cloud 리소스에 대한 액세스 제어 정책을 만들고 관리하는 데 사용할 수 있는 일련의 메서드를 제공합니다. 이 메서드는 Cloud IAM을 지원하는 서비스에서 노출됩니다. 예를 들어 Cloud IAM 메서드는 Resource Manager, Pub/Sub, Cloud Life Sciences API 등에서 노출됩니다.

Cloud IAM 메서드는 다음과 같습니다.

  • setIamPolicy(): 리소스에 대한 정책을 설정합니다.
  • getIamPolicy(): 이전에 설정된 정책을 가져옵니다.
  • testIamPermissions(): 호출자에게 리소스에 대해 지정된 권한이 있는지 여부를 테스트합니다.

Cloud IAM을 지원하는 각 서비스의 문서에서 메서드에 관한 API 참조 주제를 찾을 수 있습니다.

정책 계층구조

Google Cloud 리소스는 계층적으로 구성됩니다.

  • 조직은 계층 구조의 루트 노드입니다.
  • 폴더는 조직의 하위 요소입니다.
  • 프로젝트는 조직 또는 폴더의 하위 요소입니다.
  • 각 서비스의 리소스는 프로젝트의 하위 요소입니다.

각 리소스는 단 하나의 상위 항목만 가집니다. 자세한 내용은 Resource Manager 리소스 계층 구조를 참조하세요.

다음 다이어그램은 Google Cloud 리소스 계층 구조의 예시입니다.

Cloud IAM 리소스의 계층 구조.

Cloud IAM 정책은 조직 수준, 폴더 수준, 프로젝트 수준, 리소스 수준 등 리소스 계층 구조의 모든 수준에 설정할 수 있습니다. 리소스는 상위 리소스의 정책을 상속합니다. 조직 수준에서 정책을 정의하면 자동으로 모든 하위 프로젝트로 정책이 상속되며 프로젝트 수준에서 정책을 설정하면 모든 하위 리소스로 정책이 상속됩니다. 리소스의 효과적인 정책은 해당 리소스에서 설정하는 정책 통합과 계층 구조의 상위에서 상속된 정책입니다.

정책 상속은 하위 수준으로 전이됩니다. 즉, 리소스는 프로젝트에서 정책을 상속하고, 프로젝트는 폴더에서 정책을 상속하며, 폴더는 조직에서 정책을 상속합니다. 따라서 조직 수준 정책도 리소스 레벨에 적용됩니다.

예를 들어 이전 다이어그램에서 topic_a는 프로젝트 example-prod에 속하는 Pub/Sub 리소스입니다. micah@example.com에게는 example-prod에 대한 편집자 역할을 부여하고 song@example.com에게는 topic_a에 대한 게시자 역할을 부여하면 micah@example.com은 topic_a에 대한 편집자 역할을, song@gmail.com은 게시자 역할을 부여받게 됩니다.

Cloud IAM 정책 계층 구조는 Google Cloud 리소스 계층 구조와 동일한 경로를 따릅니다. 리소스 계층 구조를 변경하면 정책 계층 구조도 변경됩니다. 예를 들어 프로젝트를 조직으로 이동하면 프로젝트의 Cloud IAM 정책이 해당 조직의 Cloud IAM 정책을 상속하도록 업데이트됩니다.

하위 정책은 상위 수준에서 허용된 액세스 권한을 제한할 수 없습니다. 예를 들어 사용자에게 프로젝트의 편집자 역할을 부여하고 동일한 사용자에게 하위 리소스의 뷰어 역할을 부여하는 경우, 사용자는 하위 리소스에 부여된 편집자 역할을 계속 갖게 됩니다.

Google Cloud 서비스의 Cloud IAM 지원

Cloud IAM을 사용하면 모든 Google Cloud 서비스의 모든 API 메서드에서 API 요청을 하는 계정에 리소스를 사용하는 데 필요한 적절한 권한이 있어야 합니다.

Cloud IAM이 도입되기 전까지는 소유자, 편집자, 뷰어 역할만 부여할 수 있었습니다. 이 역할은 프로젝트에서 매우 광범위한 액세스를 제공하며 권한의 세부적인 분할을 허용하지 않습니다. 이제 Google Cloud 서비스는 소유자, 편집자, 뷰어 역할보다 더욱 세분화된 액세스를 제공하는 사전 정의된 역할을 추가로 제공합니다. 예를 들어 Compute Engine은 인스턴스 관리자 및 네트워크 관리자와 같은 역할을 제공하고 App Engine은 앱 관리자 및 서비스 관리자와 같은 역할을 제공합니다. 기존 소유자, 편집자, 뷰어 역할 외에도 이러한 사전 정의된 역할이 제공됩니다.

대부분의 Google Cloud 서비스에는 사전 정의된 역할을 사용할 수 있습니다. 자세한 내용은 사전 정의된 전체 역할 목록을 참조하세요. 권한을 더욱 세분화하여 제어해야 하는 경우에는 커스텀 역할을 만드는 것이 좋습니다.

프로젝트 수준보다 더욱 세밀하게 리소스에 액세스할 수 있는 특정 역할을 사용자에게 부여할 수 있습니다. 예를 들어 특정 Pub/Sub 주제에 대한 구독자 역할을 부여하는 Cloud IAM 액세스 제어 정책을 만들 수 있습니다. 사전 정의된 전체 역할 목록에는 각 역할을 허용하는 가장 낮은 수준 또는 가장 세분화된 리소스 유형이 표시됩니다.

다음 단계