리소스에 부여 가능한 역할 보기

리소스와 관련하여 Identity and Access Management(IAM) 역할을 사용자에게 부여하기 전에 특정 리소스에 대해 부여할 수 있는 역할에 대해 알아두는 것이 좋습니다.

시작하기 전에

  • IAM API 사용 설정

    API 사용 설정

  • 인증을 설정합니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

    다음 개발 환경 중 하나에서 이 페이지의 gcloud CLI 샘플을 사용할 수 있습니다.

    • Cloud Shell: gcloud CLI가 이미 설정된 온라인 터미널을 사용하려면 Cloud Shell을 활성화하세요.

      이 페이지 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

    • 로컬 셸: 로컬 개발 환경에서 gcloud CLI를 사용하려면 gcloud CLI를 설치하고 초기화합니다.

    C++

    로컬 개발 환경에서 이 페이지의 C++ 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    C#

    로컬 개발 환경에서 이 페이지의 .NET 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    Go

    로컬 개발 환경에서 이 페이지의 Go 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    Java

    로컬 개발 환경에서 이 페이지의 Java 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    Python

    로컬 개발 환경에서 이 페이지의 Python 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 Google Cloud 인증 문서의 로컬 개발 환경 인증 설정을 참조하세요.

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init

필요한 역할

부여 가능한 역할을 나열하는 데 필요한 권한을 얻으려면 관리자에게 부여 가능한 역할을 나열할 리소스에 대한 보안 검토자(roles/iam.securityReviewer) IAM 역할을 부여해 달라고 관리자에게 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

이 사전 정의된 역할에는 모든 리소스 유형에 대한 getIamPolicy 권한이 포함되어 있습니다. 부여 가능한 역할을 나열하려면 부여 가능한 역할을 나열하려는 리소스에 대해 getIamPolicy 권한이 필요합니다. 예를 들어 프로젝트에 대해 부여 가능한 역할을 나열하려면 resourcemanager.projects.getIamPolicy 권한이 필요합니다.

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

부여 가능한 역할 알아보기

역할에 특정 리소스 유형에 대한 권한이 포함되어 있으면 해당 리소스에 대해 또는 해당 리소스 범위를 넘어 역할을 부여할 수 있습니다. 예를 들어 storage.admin 역할은 storage.buckets.getstorage.objects.get API에 대한 권한을 부여하므로 스토리지 버킷스토리지 객체 리소스 유형에 대해서도 역할을 부여할 수 있습니다.

또한 권한이 정의된 리소스 유형 범위를 '넘어' 역할이 부여될 수도 있습니다. 즉, Google Cloud 리소스 계층 구조에서 하위 수준의 리소스에 대해 부여된 역할이 이보다 높은 수준의 리소스에 대해서도 부여될 수 있습니다. 예를 들어 storage.admin 역할을 스토리지 버킷뿐만 아니라 프로젝트 수준 또는 조직 수준에서도 부여할 수 있습니다.

역할을 통해 부여된 권한은 특정 수준 또는 그 이하의 리소스에만 적용됩니다. 즉, 상위 수준 또는 같은 수준의 리소스에는 영향을 주지 않습니다. 또한 리소스에 대해 역할이 부여되면 역할의 이름, 설명, 역할에 포함된 다른 권한과 관계없이 해당 리소스에 적용될 수 있는 권한만 부여됩니다. 예를 들어 프로젝트 수준에서 사용자에게 resourcemanager.organizationAdmin 역할을 부여(resourcemanager.projects.list 권한을 부여)하면 사용자는 특정 프로젝트에 대한 권한만 부여받습니다. 조직의 모든 프로젝트를 나열하거나 관리하는 권한은 부여되지 않습니다. 마찬가지로 특정 Compute Engine 인스턴스에 compute.admin 역할을 할당하면 권한은 해당 인스턴스에 대해서만 부여되며 프로젝트의 다른 인스턴스에 대해서는 부여되지 않습니다.

부여 가능한 역할 나열

Google Cloud 콘솔, Google Cloud CLI, IAM API, IAM 클라이언트 라이브러리를 사용하여 부여 가능한 역할을 나열할 수 있습니다.

Google Cloud 콘솔에 표시 중인 리소스에 대해 부여할 수 있는 모든 역할이 항상 나열됩니다. Google Cloud CLI, IAM API, 클라이언트 라이브러리에는 사용 설정된 API에 부여할 수 있는 역할만 나열됩니다.

콘솔

프로젝트, 폴더, 조직에 부여 가능한 역할을 보려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  2. 페이지 상단에서 프로젝트 선택을 클릭합니다.

  3. 부여 가능한 역할을 확인할 프로젝트, 폴더, 조직을 선택합니다.

  4. 액세스 권한 부여를 클릭합니다.

  5. 역할 선택을 클릭합니다. 이 메뉴에는 이 리소스에 대해 부여할 수 있는 커스텀 역할을 포함한 모든 역할이 표시됩니다.

다른 리소스 유형에 대해 부여 가능한 역할을 보려면 다음을 수행하세요.

  1. Google Cloud 콘솔에서 부여 가능한 역할을 확인할 리소스가 나열된 페이지로 이동합니다.

    예를 들어 Compute Engine 인스턴스에 대해 액세스를 관리하려면 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 부여 가능한 역할을 보려는 리소스 옆에 있는 체크박스를 선택합니다.

  3. 정보 패널이 표시되었는지 확인합니다. 표시되지 않았으면 정보 패널 표시를 클릭합니다.

  4. 주 구성원 추가를 클릭합니다.

  5. 역할 선택을 클릭합니다. 이 메뉴에는 이 리소스에 대해 부여할 수 있는 커스텀 역할을 포함한 모든 역할이 표시됩니다.

gcloud

특정 리소스에 적용되는 모든 역할의 목록을 반환하려면 gcloud iam list-grantable-roles 명령어를 사용합니다.

gcloud iam list-grantable-roles full-resource-name

원하는 리소스에 따라 매우 많은 역할이 반환될 수 있습니다. 결과를 제한하려면 필터 표현식을 지정합니다.

출력은 다음과 같습니다.

description: Full control of all Compute Engine resources.
name: roles/compute.admin
title: Compute Admin
---
description: Full control of Compute Engine instance resources.
name: roles/compute.instanceAdmin
title: Compute Instance Admin

# Additional results here...

C++

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM C++ API 참고 문서를 참조하세요.

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& resource) {
  iam::IAMClient client(iam::MakeIAMConnection());
  int count = 0;
  for (auto& role : client.QueryGrantableRoles(resource)) {
    if (!role) throw std::move(role).status();
    std::cout << "Role successfully retrieved: " << role->name() << "\n";
    ++count;
  }
  if (count == 0) {
    std::cout << "No grantable roles found in resource: " << resource << "\n";
  }
}

C#

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM C# API 참고 문서를 참조하세요.

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static IList<Role> ViewGrantableRoles(string fullResourceName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var request = new QueryGrantableRolesRequest
        {
            FullResourceName = fullResourceName
        };
        var response = service.Roles.QueryGrantableRoles(request).Execute();
        foreach (var role in response.Roles)
        {
            Console.WriteLine("Title: " + role.Title);
            Console.WriteLine("Name: " + role.Name);
            Console.WriteLine("Description: " + role.Description);
            Console.WriteLine();
        }
        return response.Roles;
    }
}

Go

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM Go API 참고 문서를 참조하세요.

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

import (
	"context"
	"fmt"
	"io"

	iam "google.golang.org/api/iam/v1"
)

// viewGrantableRoles lists roles grantable on a resource.
func viewGrantableRoles(w io.Writer, fullResourceName string) ([]*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	request := &iam.QueryGrantableRolesRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Roles.QueryGrantableRoles(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.QueryGrantableRoles: %w", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Found grantable role: %v\n", role.Name)
	}
	return response.Roles, err
}

Java

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM Java API 참고 문서를 참조하세요.

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

QueryGrantableRolesRequest request = new QueryGrantableRolesRequest();
request.setFullResourceName(fullResourceName);

QueryGrantableRolesResponse response = service.roles().queryGrantableRoles(request).execute();

for (Role role : response.getRoles()) {
  System.out.println("Title: " + role.getTitle());
  System.out.println("Name: " + role.getName());
  System.out.println("Description: " + role.getDescription());
  System.out.println();
}

Python

IAM용 클라이언트 라이브러리를 설치하고 사용하는 방법은 IAM 클라이언트 라이브러리를 참조하세요. 자세한 내용은 IAM Python API 참고 문서를 참조하세요.

IAM에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 시작하기 전에를 참조하세요.

def view_grantable_roles(full_resource_name: str) -> None:
    roles = (
        service.roles()
        .queryGrantableRoles(body={"fullResourceName": full_resource_name})
        .execute()
    )

    for role in roles["roles"]:
        if "title" in role:
            print("Title: " + role["title"])
        print("Name: " + role["name"])
        if "description" in role:
            print("Description: " + role["description"])
        print(" ")

REST

roles.queryGrantableRoles 메서드는 리소스에 부여 가능한 모든 역할의 목록을 반환합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • FULL_RESOURCE_NAME: 서비스 이름과 리소스 경로로 구성된 URI입니다. 예시는 전체 리소스 이름을 참조하세요.

HTTP 메서드 및 URL:

POST https://iam.googleapis.com/v1/roles:queryGrantableRoles

JSON 요청 본문:

{
  "fullResourceName": "FULL_RESOURCE_NAME"
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "roles": [
    {
      "name": "roles/compute.admin",
      "title": "Compute Admin",
      "description": "Full control of all Compute Engine resources."
    },
    {
      "name": "roles/compute.instanceAdmin",
      "title": "Compute Instance Admin (beta)",
      "description": "Full control of Compute Engine instance resources."
    }
  ]
}

위의 예에서 전체 리소스 이름은 스키마가 따로 정의되지 않은 URI로서 DNS 호환 API 서비스와 리소스 경로로 구성됩니다.

예를 들어 프로젝트에 대해 부여 가능한 모든 역할을 반환하려면 다음을 사용합니다.

//cloudresourcemanager.googleapis.com/projects/project-id

하위 수준의 리소스는 보다 세부적인 완전히 정규화된 이름을 갖습니다. 예를 들어 Compute Engine 인스턴스에 대해 부여 가능한 모든 역할을 반환하려면 다음을 사용합니다.

//compute.googleapis.com/projects/project-id/zones/zone-name/instances/instance-id

다음 단계