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

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

부여할 수 있는 역할 알아보기

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

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

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

부여 가능한 역할 나열

부여 가능한 역할을 나열하기 전에 프로젝트에 서비스가 사용 설정되어 있는지 확인하세요. 서비스가 사용 설정되어 있지 않으면 역할이 반환되지 않습니다.

Console

  1. Cloud Console에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  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...

REST API

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."
    }
  ]
}

C#

이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 IAM C# API 참조 문서를 확인하세요.


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 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 IAM Go API 참조 문서를 확인하세요.

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: %v", err)
	}

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

자바

이 샘플을 사용해 보기 전에 IAM 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 IAM 자바 API 참조 문서를 확인하세요.

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 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 IAM Python API 참조 문서를 확인하세요.

def view_grantable_roles(full_resource_name):
    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(' ')

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

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

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

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

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

다음 단계