프로젝트, 폴더, 조직에 대한 액세스 관리

이 페이지에서는 프로젝트, 폴더, 조직에 대해 액세스를 부여, 변경, 취소하는 방법을 설명합니다. 다른 리소스에 대한 액세스 관리 방법을 알아보려면 다음 가이드를 참조하세요.

Identity and Access Management(IAM)에서 액세스는 IAM 정책으로도 알려진 허용 정책을 통해 부여됩니다. 허용 정책은 Google Cloud 리소스에 연결됩니다. 허용 정책마다 사용자 또는 서비스 계정과 같은 주 구성원 하나 이상을 IAM 역할과 연결하는 역할 바인딩 컬렉션이 포함되어 있습니다. 이러한 역할 바인딩은 허용 정책이 연결된 리소스와 리소스의 모든 하위 요소 모두에서 지정된 역할을 주 구성원에 부여합니다. 허용 정책에 대한 자세한 내용은 허용 정책 이해를 참조하세요.

Google Cloud 콘솔, Google Cloud CLI, REST API 또는 Resource Manager 클라이언트 라이브러리를 사용하여 프로젝트, 폴더, 조직에 대한 액세스를 관리할 수 있습니다.

시작하기 전에

  • Resource Manager API 사용 설정

    API 사용 설정

  • 인증을 설정합니다.

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

    콘솔

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

    gcloud

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

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

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

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

    C#

    로컬 개발 환경에서 이 페이지의 .NET 샘플을 사용하려면 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

필요한 역할

프로젝트, 폴더, 조직을 만들 때 해당 리소스에 대한 액세스를 관리할 수 있는 역할이 자동으로 부여됩니다. 자세한 내용은 기본 정책을 참조하세요.

프로젝트, 폴더 또는 조직을 만들지 않은 경우 해당 리소스에 대한 액세스를 관리하는 데 필요한 역할이 있는지 확인합니다.

프로젝트, 폴더 또는 조직에 대한 액세스를 관리하는 데 필요한 권한을 얻으려면 관리자에게 (프로젝트, 폴더 또는 조직의) 액세스를 관리할 리소스에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

  • 프로젝트에 대한 액세스 관리: 프로젝트 IAM 관리자(roles/resourcemanager.projectIamAdmin)
  • 폴더에 대한 액세스 관리: 폴더 관리자(roles/resourcemanager.folderAdmin)
  • 프로젝트, 폴더, 조직에 대한 액세스 관리: 조직 관리자(roles/resourcemanager.organizationAdmin)
  • 거의 모든 Google Cloud 리소스에 대한 액세스 관리: 보안 관리자(roles/iam.securityAdmin)

이러한 사전 정의된 역할에는 프로젝트, 폴더 또는 조직에 대한 액세스를 관리하는 데 필요한 권한이 포함되어 있습니다. 필요한 권한을 정확하게 확인하려면 필수 권한 섹션을 확장하세요.

필수 권한

프로젝트, 폴더, 조직에 대해 액세스를 관리하려면 다음 권한이 필요합니다.

  • 프로젝트에 대한 액세스 권한 관리:
    • resourcemanager.projects.getIamPolicy
    • resourcemanager.projects.setIamPolicy
  • 폴더에 대한 액세스 관리:
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
  • 조직에 대한 액세스 권한 관리:
    • resourcemanager.organizations.getIamPolicy
    • resourcemanager.organizations.setIamPolicy

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

현재 액세스 보기

Google Cloud 콘솔, gcloud CLI, REST API 또는 Resource Manager 클라이언트 라이브러리를 사용하여 프로젝트, 폴더 또는 조직에 대한 액세스 권한이 있는 사용자를 볼 수 있습니다.

콘솔

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

    IAM으로 이동

  2. 프로젝트, 폴더, 조직을 선택합니다.

    Google Cloud 콘솔에 프로젝트, 폴더 또는 조직에 대해 역할이 부여된 모든 주 구성원이 나열됩니다. 이 목록에는 상위 리소스로부터 리소스에 대한 역할을 상속한 주 구성원이 포함됩니다. 정책 상속에 대한 자세한 내용은 정책 상속 및 리소스 계층을 참조하세요.

  3. 선택사항: Google 관리형 서비스 계정에 대한 역할 부여를 보려면 Google 제공 역할 부여 포함 체크박스를 선택합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 프로젝트, 폴더, 조직에 액세스할 수 있는 사용자를 보려면 리소스에 대해 허용 정책을 가져옵니다. 허용 정책을 해석하는 방법을 알아보려면 허용 정책 이해를 참조하세요.

    리소스의 허용 정책을 가져오려면 리소스에 대해 get-iam-policy 명령어를 실행합니다.

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    다음 값을 제공합니다.

    • RESOURCE_TYPE: 액세스를 보려는 리소스의 유형. projects, resource-manager folders, organizations 값 중 하나를 사용합니다.

    • RESOURCE_ID: Google Cloud 프로젝트, 폴더 또는 조직 ID. 프로젝트 ID는 my-project와 같은 영숫자입니다. 폴더 및 조직 ID는 123456789012와 같은 숫자입니다.

    • FORMAT: 정책에 사용하려는 형식. json 또는 yaml을 사용합니다.

    • PATH: 정책에 대한 새 출력 파일의 경로

    예를 들어 다음 명령어는 my-project 프로젝트의 정책을 가져오고 이를 JSON 형식으로 홈 디렉터리에 저장합니다.

    gcloud projects get-iam-policy my-project --format=json > ~/policy.json

C#

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

프로젝트, 폴더, 조직에 액세스할 수 있는 사용자를 보려면 리소스에 대해 허용 정책을 가져옵니다. 허용 정책을 해석하는 방법을 알아보려면 허용 정책 이해를 참조하세요.

다음 예시에서는 프로젝트의 허용 정책을 가져오는 방법을 보여줍니다. 폴더 또는 조직의 허용 정책을 가져오는 방법은 프로그래밍 언어의 Resource Manager 클라이언트 라이브러리 문서를 참조하세요.


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy GetPolicy(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
            projectId).Execute();
        return policy;
    }
}

Java

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

프로젝트, 폴더, 조직에 액세스할 수 있는 사용자를 보려면 리소스에 대해 허용 정책을 가져옵니다. 허용 정책을 해석하는 방법을 알아보려면 허용 정책 이해를 참조하세요.

다음 예시에서는 프로젝트의 허용 정책을 가져오는 방법을 보여줍니다. 폴더 또는 조직의 허용 정책을 가져오는 방법은 프로그래밍 언어의 Resource Manager 클라이언트 라이브러리 문서를 참조하세요.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class GetPolicy {

  // Gets a project's policy.
  public static Policy getPolicy(String projectId) {
    // projectId = "my-project-id"

    Policy policy = null;

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return policy;
    }

    try {
      GetIamPolicyRequest request = new GetIamPolicyRequest();
      policy = service.projects().getIamPolicy(projectId, request).execute();
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    } catch (IOException e) {
      System.out.println("Unable to get policy: \n" + e.toString());
      return policy;
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

프로젝트, 폴더, 조직에 액세스할 수 있는 사용자를 보려면 리소스에 대해 허용 정책을 가져옵니다. 허용 정책을 해석하는 방법을 알아보려면 허용 정책 이해를 참조하세요.

다음 예시에서는 프로젝트의 허용 정책을 가져오는 방법을 보여줍니다. 폴더 또는 조직의 허용 정책을 가져오는 방법은 프로그래밍 언어의 Resource Manager 클라이언트 라이브러리 문서를 참조하세요.

def get_policy(project_id: str, version: int = 1) -> dict:
    """Gets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )
    policy = (
        service.projects()
        .getIamPolicy(
            resource=project_id,
            body={"options": {"requestedPolicyVersion": version}},
        )
        .execute()
    )
    print(policy)
    return policy

REST

프로젝트, 폴더, 조직에 액세스할 수 있는 사용자를 보려면 리소스에 대해 허용 정책을 가져옵니다. 허용 정책을 해석하는 방법을 알아보려면 허용 정책 이해를 참조하세요.

Resource Manager API의 getIamPolicy 메서드는 프로젝트, 폴더, 조직의 허용 정책을 가져옵니다.

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

  • API_VERSION: 사용할 API 버전입니다. 프로젝트 및 조직에 v1을 사용합니다. 폴더에는 v2를 사용합니다.
  • RESOURCE_TYPE: 정책을 관리할 리소스 유형. projects, folders 또는 organizations 값을 사용합니다.
  • RESOURCE_ID: Google Cloud 프로젝트, 조직, 폴더 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다. 폴더 및 조직 ID는 123456789012와 같은 숫자입니다.
  • POLICY_VERSION: 반환할 정책 버전입니다. 요청에는 정책 버전 3인 최신 정책 버전이 지정되어야 합니다. 자세한 내용은 정책을 가져올 때 정책 버전 지정을 참조하세요.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

JSON 요청 본문:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

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

응답에는 리소스의 허용 정책이 포함됩니다. 예를 들면 다음과 같습니다.

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:owner@example.com"
      ]
    }
  ]
}

단일 역할 부여 또는 취소

리소스의 허용 정책을 직접 수정하지 않고도 Google Cloud 콘솔 및 gcloud CLI를 사용하여 단일 주 구성원에 대한 단일 역할을 빠르게 부여하거나 취소할 수 있습니다. 일반적인 주 구성원 유형에는 Google 계정, 서비스 계정, Google 그룹스, 도메인이 포함됩니다. 모든 주 구성원 유형 목록은 ID 관련 개념을 참조하세요.

가장 적절한 사전 정의된 역할을 찾는 데 도움이 필요하면 사전 정의된 역할 선택을 참조하세요.

단일 역할 부여

주 구성원에 단일 역할을 부여하려면 다음을 수행합니다.

콘솔

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

    IAM으로 이동

  2. 프로젝트, 폴더, 조직을 선택합니다.

  3. 역할을 부여할 주 구성원을 선택합니다.

    • 리소스에 대해 이미 다른 역할이 있는 주 구성원에게 역할을 부여하려면 주 구성원이 포함된 행을 찾아 해당 행에서 주 구성원 수정을 클릭하고 다른 역할 추가를 클릭합니다.

      Google 관리형 서비스 계정에 역할을 부여하려면 Google 제공 역할 부여 포함 체크박스를 선택하여 이메일 주소를 확인합니다.

    • 리소스에 대한 기존 역할이 없는 주 구성원에게 역할을 부여하려면 액세스 권한 부여를 클릭한 후 주 구성원의 이메일 주소 또는 다른 식별자를 입력합니다.

  4. 드롭다운 목록에서 부여할 역할을 선택합니다. 보안 권장사항에 따라 주 구성원에게 필요한 권한만 포함된 역할을 선택합니다.

  5. 선택사항: 역할에 조건을 추가합니다.

  6. 저장을 클릭합니다. 주 구성원에게 리소스에 대해 역할이 부여됩니다.

2개 이상의 프로젝트, 폴더, 조직에서 주 구성원에게 역할을 부여하는 방법은 다음과 같습니다.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 권한을 부여할 대상 리소스를 모두 선택합니다.

  3. 정보 패널이 표시되지 않았으면 정보 패널 표시를 클릭합니다. 그런 후 권한을 클릭합니다.

  4. 역할을 부여할 주 구성원을 선택합니다.

    • 이미 다른 역할이 있는 주 구성원에게 역할을 부여하려면 주 구성원이 포함된 행을 찾아 해당 행에서 주 구성원 수정을 클릭하고 다른 역할 추가를 클릭합니다.

    • 다른 역할이 없는 주 구성원에게 역할을 부여하려면 주 구성원 추가를 클릭한 다음 주 구성원의 이메일 주소 또는 다른 식별자를 입력합니다.

  5. 드롭다운 목록에서 부여할 역할을 선택합니다.

  6. 선택사항: 역할에 조건을 추가합니다.

  7. 저장을 클릭합니다. 선택한 각 리소스에서 주 구성원에게 선택한 역할이 부여됩니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. add-iam-policy-binding 명령어를 사용하면 주 구성원에 역할을 빠르게 부여할 수 있습니다.

    아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

    • RESOURCE_TYPE: 액세스를 관리할 리소스 유형입니다. projects, resource-manager folders, 또는 organizations를 사용합니다.

    • RESOURCE_ID: Google Cloud 프로젝트, 폴더 또는 조직 ID입니다. 프로젝트 ID는 my-project와 같은 영숫자입니다. 폴더 및 조직 ID는 123456789012와 같은 숫자입니다.

    • PRINCIPAL: 주 구성원이나 구성원의 식별자로, 대개 PRINCIPAL_TYPE:ID 형식을 따릅니다. 예를 들면 user:my-user@example.com입니다. PRINCIPAL이 가질 수 있는 값의 전체 목록은 정책 바인딩 참조를 확인하세요.

      주 구성원 유형 user의 경우 식별자의 도메인 이름은 Google Workspace 도메인이나 Cloud ID 도메인이어야 합니다. Cloud ID 도메인을 설정하는 방법은 Cloud ID 개요를 참조하세요.

    • ROLE_NAME: 취소할 역할의 이름입니다. 다음 형식 중 하나를 사용하세요.

      • 사전 정의된 역할: roles/SERVICE.IDENTIFIER
      • 프로젝트 수준 커스텀 역할: projects/PROJECT_ID/roles/IDENTIFIER
      • 조직 수준 커스텀 역할: organizations/ORG_ID/roles/IDENTIFIER

      사전 정의된 역할의 목록은 역할 이해를 참조하세요.

    • CONDITION: 역할 바인딩에 추가할 조건입니다. 조건을 추가하지 않으려면 None 값을 사용하세요. 조건에 대한 자세한 내용은 조건 개요를 참조하세요.

    다음 명령어를 실행합니다.

    Linux, macOS 또는 Cloud Shell

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL --role=ROLE_NAME \
        --condition=CONDITION
    

    Windows(PowerShell)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID `
        --member=PRINCIPAL --role=ROLE_NAME `
        --condition=CONDITION
    

    Windows(cmd.exe)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID ^
        --member=PRINCIPAL --role=ROLE_NAME ^
        --condition=CONDITION
    

    응답에는 업데이트된 IAM 정책이 포함됩니다.

단일 역할 취소

주 구성원의 단일 역할을 취소하려면 다음을 수행합니다.

콘솔

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

    IAM으로 이동

  2. 프로젝트, 폴더, 조직을 선택합니다.

  3. 액세스 권한을 취소하려는 주 구성원이 포함된 행을 찾으세요. 그런 다음 이 행에서 주 구성원 수정을 클릭합니다.

  4. 취소할 역할의 삭제 버튼을 클릭한 다음 저장을 클릭합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 사용자에게서 역할을 빠르게 취소하려면 remove-iam-policy-binding 명령어를 실행합니다.

    gcloud RESOURCE_TYPE remove-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL --role=ROLE_NAME

    다음 값을 제공합니다.

    • RESOURCE_TYPE: 액세스를 관리할 리소스 유형입니다. projects, resource-manager folders 또는 organizations를 사용합니다.

    • RESOURCE_ID: Google Cloud 프로젝트, 폴더 또는 조직 ID. 프로젝트 ID는 my-project와 같은 영숫자입니다. 폴더 및 조직 ID는 123456789012와 같은 숫자입니다.

    • PRINCIPAL: 주 구성원이나 구성원의 식별자로, 대개 PRINCIPAL_TYPE:ID 형식을 따릅니다. 예를 들면 user:my-user@example.com입니다. PRINCIPAL이 가질 수 있는 값의 전체 목록은 정책 바인딩 참조를 확인하세요.

      주 구성원 유형 user의 경우 식별자의 도메인 이름은 Google Workspace 도메인이나 Cloud ID 도메인이어야 합니다. Cloud ID 도메인을 설정하는 방법은 Cloud ID 개요를 참조하세요.

    • ROLE_NAME: 취소할 역할의 이름입니다. 다음 형식 중 하나를 사용하세요.

      • 사전 정의된 역할: roles/SERVICE.IDENTIFIER
      • 프로젝트 수준 커스텀 역할: projects/PROJECT_ID/roles/IDENTIFIER
      • 조직 수준 커스텀 역할: organizations/ORG_ID/roles/IDENTIFIER

      사전 정의된 역할의 목록은 역할 이해를 참조하세요.

    예를 들어 my-project 프로젝트에 대해 my-user@example.com 사용자에게서 프로젝트 생성자 역할을 취소하려면 다음을 실행합니다.

    gcloud projects remove-iam-policy-binding my-project \
        --member=user:my-user@example.com --role=roles/resourcemanager.projectCreator

필요한 역할을 취소하지 않도록 보장하기 위해 변경 위험 권장사항을 사용 설정할 수 있습니다. 변경 위험 권장사항은 Google Cloud에서 중요하다고 판단한 프로젝트 수준 역할을 취소하려고 시도할 때 경고를 생성합니다.

Google Cloud 콘솔을 사용하여 여러 역할 부여 또는 취소

Google Cloud 콘솔을 사용하여 단일 주 구성원에 대한 여러 역할을 부여하고 취소할 수 있습니다.

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

    IAM으로 이동

  2. 프로젝트, 폴더, 조직을 선택합니다.

  3. 역할을 수정할 주 구성원을 선택합니다.

    • 이미 리소스에 대한 역할이 있는 주 구성원의 역할을 수정하려면 주 구성원이 포함된 행을 찾아 해당 행에서 주 구성원 수정를 클릭하고 다른 역할 추가를 클릭합니다.

      Google 관리형 서비스 계정의 역할을 수정하려면 Google 제공 역할 부여 포함 체크박스를 선택하여 이메일 주소를 확인합니다.

    • 리소스에 대한 역할이 없는 주 구성원에게 역할을 부여하려면 액세스 권한 부여를 클릭한 후 주 구성원의 이메일 주소 또는 다른 식별자를 입력합니다.

  4. 주 구성원의 역할을 수정합니다.

    • 리소스에 대한 기존 역할이 없는 주 구성원에게 역할을 부여하려면 역할 선택을 클릭한 후 드롭다운 목록에서 부여할 역할을 선택합니다.
    • 주 구성원에 추가 역할을 부여하려면 다른 역할 추가를 클릭한 후 드롭다운 목록에서 부여할 역할을 선택합니다.
    • 주 구성원의 역할 중 하나를 다른 역할로 바꾸려면 기존 역할을 클릭한 후 드롭다운 목록에서 부여할 다른 역할을 선택합니다.
    • 주 구성원의 역할 중 하나를 취소하려면 취소할 각 역할의 삭제 버튼을 클릭합니다.

    역할에 조건을 추가하거나 역할 조건을 수정하거나 역할 조건을 삭제할 수 있습니다.

  5. 저장을 클릭합니다.

프로그래매틱 방식으로 여러 역할 부여 또는 취소

여러 주 구성원에 대한 여러 역할의 부여 및 취소가 포함된 대규모 액세스 변경을 수행하려면 읽기-수정-쓰기 패턴을 사용하여 리소스의 허용 정책을 업데이트합니다.

  1. getIamPolicy()를 호출하여 현재 허용 정책을 읽습니다.
  2. 텍스트 편집기를 사용하거나 프로그래매틱 방식으로 허용 정책을 수정하여 주 구성원 또는 역할 바인딩을 추가하거나 삭제합니다.
  3. setIamPolicy()를 호출하여 업데이트된 허용 정책을 작성합니다.

gcloud CLI, REST API 또는 Resource Manager 클라이언트 라이브러리를 사용하여 허용 정책을 업데이트할 수 있습니다.

현재 허용 정책 가져오기

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 리소스의 허용 정책을 가져오려면 리소스에 대해 get-iam-policy 명령어를 실행합니다.

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    다음 값을 제공합니다.

    • RESOURCE_TYPE: 허용 정책을 가져오려는 리소스의 유형입니다. projects, resource-manager folders, organizations 중 한 가지 값을 사용합니다.

    • RESOURCE_ID: Google Cloud 프로젝트, 폴더 또는 조직 ID. 프로젝트 ID는 my-project와 같은 영숫자입니다. 폴더 및 조직 ID는 123456789012와 같은 숫자입니다.

    • FORMAT: 허용 정책에 사용하려는 형식입니다. json 또는 yaml을 사용합니다.

    • PATH: 허용 정책에 대한 새 출력 파일의 경로입니다.

    예를 들어 다음 명령어는 my-project 프로젝트의 허용 정책을 가져오고 이를 JSON 형식으로 홈 디렉터리에 저장합니다.

    gcloud projects get-iam-policy my-project --format json > ~/policy.json

C#

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

다음 예시에서는 프로젝트의 허용 정책을 가져오는 방법을 보여줍니다. 폴더 또는 조직의 허용 정책을 가져오는 방법은 프로그래밍 언어의 Resource Manager 클라이언트 라이브러리 문서를 참조하세요.


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy GetPolicy(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
            projectId).Execute();
        return policy;
    }
}

Java

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

다음 예시에서는 프로젝트의 허용 정책을 가져오는 방법을 보여줍니다. 폴더 또는 조직의 허용 정책을 가져오는 방법은 프로그래밍 언어의 Resource Manager 클라이언트 라이브러리 문서를 참조하세요.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class GetPolicy {

  // Gets a project's policy.
  public static Policy getPolicy(String projectId) {
    // projectId = "my-project-id"

    Policy policy = null;

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return policy;
    }

    try {
      GetIamPolicyRequest request = new GetIamPolicyRequest();
      policy = service.projects().getIamPolicy(projectId, request).execute();
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    } catch (IOException e) {
      System.out.println("Unable to get policy: \n" + e.toString());
      return policy;
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

다음 예시에서는 프로젝트의 허용 정책을 가져오는 방법을 보여줍니다. 폴더 또는 조직의 허용 정책을 가져오는 방법은 프로그래밍 언어의 Resource Manager 클라이언트 라이브러리 문서를 참조하세요.

def get_policy(project_id: str, version: int = 1) -> dict:
    """Gets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )
    policy = (
        service.projects()
        .getIamPolicy(
            resource=project_id,
            body={"options": {"requestedPolicyVersion": version}},
        )
        .execute()
    )
    print(policy)
    return policy

REST

Resource Manager API의 getIamPolicy 메서드는 프로젝트, 폴더, 조직의 허용 정책을 가져옵니다.

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

  • API_VERSION: 사용할 API 버전입니다. 프로젝트 및 조직에 v1을 사용합니다. 폴더에는 v2를 사용합니다.
  • RESOURCE_TYPE: 정책을 관리할 리소스 유형. projects, folders 또는 organizations 값을 사용합니다.
  • RESOURCE_ID: Google Cloud 프로젝트, 조직, 폴더 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다. 폴더 및 조직 ID는 123456789012와 같은 숫자입니다.
  • POLICY_VERSION: 반환할 정책 버전입니다. 요청에는 정책 버전 3인 최신 정책 버전이 지정되어야 합니다. 자세한 내용은 정책을 가져올 때 정책 버전 지정을 참조하세요.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

JSON 요청 본문:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

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

응답에는 리소스의 허용 정책이 포함됩니다. 예를 들면 다음과 같습니다.

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:owner@example.com"
      ]
    }
  ]
}

적절한 유형의 파일로 응답을 저장합니다(json 또는 yaml).

허용 정책 수정

특정 사용자에게 역할을 부여하거나 이 사용자의 역할을 취소하려면 프로그래매틱 방식으로 또는 텍스트 편집기를 사용하여 리소스 허용 정책의 로컬 복사본을 수정합니다.

다른 변경사항을 덮어쓰지 않도록 하려면 허용 정책의 etag 필드를 수정하거나 삭제하지 마세요. etag 필드는 허용 정책의 현재 상태를 식별합니다. 업데이트된 허용 정책을 설정하면 IAM은 요청에 있는 etag 값을 기존 etag와 비교하고 값이 일치하는 경우에만 허용 정책에 기록합니다.

허용 정책이 부여하는 역할을 수정하려면 허용 정책에서 역할 바인딩을 수정해야 합니다. 역할 바인딩의 형식은 다음과 같습니다.

{
  "role": "ROLE_NAME",
  "members": [
    "PRINCIPAL_1",
    "PRINCIPAL_2",
    ...
    "PRINCIPAL_N"
  ],
  "conditions:" {
    CONDITIONS
  }
}

자리표시자의 값은 다음과 같습니다.

  • ROLE_NAME: 부여할 역할의 이름입니다. 다음 형식 중 하나를 사용하세요.

    • 사전 정의된 역할: roles/SERVICE.IDENTIFIER
    • 프로젝트 수준 커스텀 역할: projects/PROJECT_ID/roles/IDENTIFIER
    • 조직 수준 커스텀 역할: organizations/ORG_ID/roles/IDENTIFIER

    사전 정의된 역할의 목록은 역할 이해를 참조하세요.

  • PRINCIPAL_1, PRINCIPAL_2, ...PRINCIPAL_N: 역할을 부여할 주 구성원의 식별자입니다.

    주 구성원 식별자는 일반적으로 PRINCIPAL-TYPE:ID 형식입니다. 예를 들면 user:my-user@example.com입니다. PRINCIPAL가 가질 수 있는 값의 전체 목록은 정책 binding 참조를 확인하세요.

    주 구성원 유형 user의 경우 식별자의 도메인 이름은 Google Workspace 도메인이나 Cloud ID 도메인이어야 합니다. Cloud ID 도메인을 설정하는 방법은 Cloud ID 개요를 참조하세요.

  • CONDITIONS: 선택사항. 액세스 권한이 부여되는 시점을 지정하는 모든 조건입니다.

역할 부여

주 구성원에게 역할을 부여하려면 허용 정책에서 역할 바인딩을 수정합니다. 부여할 수 있는 역할에 대해 알아보려면 역할 이해 또는 리소스에 대한 부여 가능한 역할 보기를 참조하세요. 가장 적합한 사전 정의된 역할을 식별하는 데 도움이 필요하면 사전 정의된 역할 선택을 참조하세요.

필요에 따라 조건을 사용하여 특정 요구사항이 충족될 때만 역할을 부여할 수 있습니다.

이미 허용 정책에 포함된 역할을 부여하려면 주 구성원을 기존 역할 바인딩에 추가합니다.

gcloud

주 구성원을 기존 역할 바인딩에 추가하여 반환된 허용 정책을 수정합니다. 업데이트된 허용 정책을 설정해야만 이 변경사항이 적용됩니다.

예를 들어 허용 정책에 다음 역할 바인딩이 포함된다고 가정해보세요. 이 역할 바인딩은 보안 검토자 역할(roles/iam.securityReviewer)을 kai@example.com에 부여합니다.

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com"
  ]
}

역할 바인딩을 raha@example.com에 부여하려면 raha@example.com을 기존 역할 바인딩에 추가합니다.

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

C#

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddMember(Policy policy, string role, string member)
    {
        var binding = policy.Bindings.First(x => x.Role == role);
        binding.Members.Add(member);
        return policy;
    }
}

Go

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

import (
	"fmt"
	"io"

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

// addMember adds a member to a role binding.
func addMember(w io.Writer, policy *iam.Policy, role, member string) {
	for _, binding := range policy.Bindings {
		if binding.Role != role {
			continue
		}
		for _, m := range binding.Members {
			if m != member {
				continue
			}
			fmt.Fprintf(w, "Role %q found. Member already exists.\n", role)
			return
		}
		binding.Members = append(binding.Members, member)
		fmt.Fprintf(w, "Role %q found. Member added.\n", role)
		return
	}
	fmt.Fprintf(w, "Role %q not found. Member not added.\n", role)
}

Java

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import java.util.List;

public class AddMember {

  // Adds a member to a preexisting role.
  public static void addMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-add@example.com";

    List<Binding> bindings = policy.getBindings();

    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        b.getMembers().add(member);
        System.out.println("Member " + member + " added to role " + role);
        return;
      }
    }

    System.out.println("Role not found in policy; member not added");
  }
}

Python

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

def modify_policy_add_member(policy: dict, role: str, member: str) -> dict:
    """Adds a new member to a role binding."""

    binding = next(b for b in policy["bindings"] if b["role"] == role)
    binding["members"].append(member)
    print(binding)
    return policy

REST

주 구성원을 기존 역할 바인딩에 추가하여 반환된 허용 정책을 수정합니다. 업데이트된 허용 정책을 설정해야만 이 변경사항이 적용됩니다.

예를 들어 허용 정책에 다음 역할 바인딩이 포함된다고 가정해보세요. 이 역할 바인딩은 보안 검토자 역할(roles/iam.securityReviewer)을 kai@example.com에 부여합니다.

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com"
  ]
}

역할 바인딩을 raha@example.com에 부여하려면 raha@example.com을 기존 역할 바인딩에 추가합니다.

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

정책에 아직 포함되지 않은 역할을 부여하려면 새 역할 바인딩을 추가합니다.

gcloud

주 구성원에 역할을 부여하는 새 역할 바인딩을 추가하여 허용 정책을 수정합니다. 업데이트된 허용 정책을 설정해야만 이 변경사항이 적용됩니다.

예를 들어 Compute 스토리지 관리자 역할(roles/compute.storageAdmin)을 raha@example.com에 부여하려면 다음 역할 바인딩을 해당 허용 정책의 bindings 배열에 추가합니다.

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

C#

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

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

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.


using System.Collections.Generic;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddBinding(Policy policy, string role, string member)
    {
        var binding = new Binding
        {
            Role = role,
            Members = new List<string> { member }
        };
        policy.Bindings.Add(binding);
        return policy;
    }
}

Java

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

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

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import java.util.ArrayList;
import java.util.List;

public class AddBinding {

  // Adds a member to a role with no previous members.
  public static void addBinding(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/role-to-add";
    List<String> members = new ArrayList<>();
    members.add("user:member-to-add@example.com");

    Binding binding = new Binding();
    binding.setRole(role);
    binding.setMembers(members);

    policy.getBindings().add(binding);
    System.out.println("Added binding: " + binding.toString());
  }
}

Python

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

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

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

def modify_policy_add_role(policy: dict, role: str, member: str) -> dict:
    """Adds a new role binding to a policy."""

    binding = {"role": role, "members": [member]}
    policy["bindings"].append(binding)
    print(policy)
    return policy

REST

주 구성원에 역할을 부여하는 새 역할 바인딩을 추가하여 허용 정책을 수정합니다. 업데이트된 허용 정책을 설정해야만 이 변경사항이 적용됩니다.

예를 들어 Compute 스토리지 관리자 역할(roles/compute.storageAdmin)을 raha@example.com에 부여하려면 다음 역할 바인딩을 해당 허용 정책의 bindings 배열에 추가합니다.

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

활성화된 API 서비스와 관련된 역할만 부여할 수 있습니다. Compute Engine과 같은 서비스가 활성화되어 있지 않은 경우 Compute Engine에만 관련된 역할은 부여할 수 없습니다. 자세한 내용은 API 사용 및 사용 중지를 참조하세요.

프로젝트에 권한을 부여할 때, 특히 소유자(roles/owner) 역할을 부여할 때 고유한 제약조건이 있습니다. 자세한 내용은 projects.setIamPolicy() 참조 문서를 확인하세요.

역할 취소

역할을 취소하려면 역할 바인딩에서 주 구성원을 삭제합니다. 역할 바인딩에 다른 주 구성원이 없으면 전체 역할 바인딩을 삭제합니다.

gcloud

get-iam-policy 명령어에서 반환된 JSON 또는 YAML 허용 정책을 수정해 역할을 취소합니다. 업데이트된 허용 정책을 설정해야만 이 변경사항이 적용됩니다.

주 구성원의 역할을 취소하려면 허용 정책의 bindings 배열에서 원하는 주 구성원 또는 결합을 삭제합니다.

C#

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

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

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy RemoveMember(Policy policy, string role, string member)
    {
        try
        {
            var binding = policy.Bindings.First(x => x.Role == role);
            if (binding.Members.Count != 0 && binding.Members.Contains(member))
            {
                binding.Members.Remove(member);
            }
            if (binding.Members.Count == 0)
            {
                policy.Bindings.Remove(binding);
            }
            return policy;
        }
        catch (System.InvalidOperationException e)
        {
            System.Diagnostics.Debug.WriteLine("Role does not exist in policy: \n" + e.ToString());
            return policy;
        }
    }
}

Go

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

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

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

import (
	"fmt"
	"io"

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

// removeMember removes a member from a role binding.
func removeMember(w io.Writer, policy *iam.Policy, role, member string) {
	bindings := policy.Bindings
	bindingIndex, memberIndex := -1, -1
	for bIdx := range bindings {
		if bindings[bIdx].Role != role {
			continue
		}
		bindingIndex = bIdx
		for mIdx := range bindings[bindingIndex].Members {
			if bindings[bindingIndex].Members[mIdx] != member {
				continue
			}
			memberIndex = mIdx
			break
		}
	}
	if bindingIndex == -1 {
		fmt.Fprintf(w, "Role %q not found. Member not removed.\n", role)
		return
	}
	if memberIndex == -1 {
		fmt.Fprintf(w, "Role %q found. Member not found.\n", role)
		return
	}

	members := removeIdx(bindings[bindingIndex].Members, memberIndex)
	bindings[bindingIndex].Members = members
	if len(members) == 0 {
		bindings = removeIdx(bindings, bindingIndex)
		policy.Bindings = bindings
	}
	fmt.Fprintf(w, "Role %q found. Member removed.\n", role)
}

// removeIdx removes arr[idx] from arr.
func removeIdx[T any](arr []T, idx int) []T {
	return append(arr[:idx], arr[idx+1:]...)
}

Java

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

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

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import java.util.List;

public class RemoveMember {

  // Removes member from a role; removes binding if binding contains 0 members.
  public static void removeMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-remove@example.com";

    List<Binding> bindings = policy.getBindings();
    Binding binding = null;
    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        binding = b;
      }
    }
    if (binding != null && binding.getMembers().contains(member)) {
      binding.getMembers().remove(member);
      System.out.println("Member " + member + " removed from " + role);
      if (binding.getMembers().isEmpty()) {
        policy.getBindings().remove(binding);
      }
      return;
    }

    System.out.println("Role not found in policy; member not removed");
    return;
  }
}

Python

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

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

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

def modify_policy_remove_member(policy: dict, role: str, member: str) -> dict:
    """Removes a  member from a role binding."""
    binding = next(b for b in policy["bindings"] if b["role"] == role)
    if "members" in binding and member in binding["members"]:
        binding["members"].remove(member)
    print(binding)
    return policy

REST

get-iam-policy 명령어에서 반환된 JSON 또는 YAML 허용 정책을 수정해 역할을 취소합니다. 업데이트된 허용 정책을 설정해야만 이 변경사항이 적용됩니다.

주 구성원의 역할을 취소하려면 허용 정책의 bindings 배열에서 원하는 주 구성원 또는 결합을 삭제합니다.

허용 정책 설정

원하는 역할을 부여하고 취소하도록 허용 정책을 수정한 다음에는 setIamPolicy()를 호출하여 업데이트를 수행합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 리소스의 허용 정책을 설정하려면 리소스에 대해 set-iam-policy 명령어를 실행합니다.

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    다음 값을 제공합니다.

    • RESOURCE_TYPE: 허용 정책을 설정하려는 리소스 유형입니다. projects, resource-manager folders, organizations 중 한 가지 값을 사용합니다.

    • RESOURCE_ID: Google Cloud 프로젝트, 폴더 또는 조직 ID. 프로젝트 ID는 my-project와 같은 영숫자입니다. 폴더 및 조직 ID는 123456789012와 같은 숫자입니다.

    • PATH: 새 허용 정책이 포함된 파일의 경로입니다.

    응답에는 업데이트된 허용 정책이 포함됩니다.

    예를 들어 다음 명령어는 policy.json에 저장된 허용 정책을 my-project 프로젝트의 허용 정책으로 설정합니다.

    gcloud projects set-iam-policy my-project ~/policy.json

C#


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy SetPolicy(string projectId, Policy policy)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        return service.Projects.SetIamPolicy(new SetIamPolicyRequest
        {
            Policy = policy
        }, projectId).Execute();
    }
}

Java

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

다음 예시에서는 프로젝트에 대해 허용 정책을 설정하는 방법을 보여줍니다. 폴더 또는 조직의 허용 정책을 설정하는 방법은 프로그래밍 언어의 Resource Manager 클라이언트 라이브러리 문서를 참조하세요.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.cloudresourcemanager.v3.model.SetIamPolicyRequest;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class SetPolicy {

  // Sets a project's policy.
  public static void setPolicy(Policy policy, String projectId) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();
    // projectId = "my-project-id"

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return;
    }

    try {
      SetIamPolicyRequest request = new SetIamPolicyRequest();
      request.setPolicy(policy);
      Policy response = service.projects().setIamPolicy(projectId, request).execute();
      System.out.println("Policy set: " + response.toString());
    } catch (IOException e) {
      System.out.println("Unable to set policy: \n" + e.toString());
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

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

Resource Manager에 대해 클라이언트 라이브러리를 설치하고 사용하는 방법은 Resource Manager 클라이언트 라이브러리를 참조하세요.

다음 예시에서는 프로젝트에 대해 허용 정책을 설정하는 방법을 보여줍니다. 폴더 또는 조직의 허용 정책을 설정하는 방법은 프로그래밍 언어의 Resource Manager 클라이언트 라이브러리 문서를 참조하세요.

def set_policy(project_id: str, policy: dict) -> dict:
    """Sets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )

    policy = (
        service.projects()
        .setIamPolicy(resource=project_id, body={"policy": policy})
        .execute()
    )
    print(policy)
    return policy

REST

Resource Manager API의 setIamPolicy 메서드는 요청의 정책을 프로젝트, 폴더, 조직의 새 허용 정책으로 설정합니다.

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

  • API_VERSION: 사용할 API 버전입니다. 프로젝트 및 조직에 v1을 사용합니다. 폴더에는 v2를 사용합니다.
  • RESOURCE_TYPE: 정책을 관리할 리소스 유형. projects, folders 또는 organizations 값을 사용합니다.
  • RESOURCE_ID: Google Cloud 프로젝트, 조직, 폴더 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다. 폴더 및 조직 ID는 123456789012와 같은 숫자입니다.
  • POLICY: 설정하려는 정책의 JSON 표현입니다. 정책 형식에 대한 자세한 내용은 정책 참조를 확인하세요.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

JSON 요청 본문:

{
  "policy": POLICY
}

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

응답에는 업데이트된 허용 정책이 포함됩니다.

다음 단계

직접 사용해 보기

Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.

무료로 시작하기