역할 부여 한도 설정

대규모 조직에서는 팀의 리소스에 대한 허용 정책을 팀에서 개별적으로 관리하도록 하는 것이 유용합니다. 하지만 주 구성원이 모든 IAM 역할을 부여하거나 취소할 수 있게 하면 보안 위험이 크게 증가할 수 있습니다.

Identity and Access Management(IAM) 조건 및 iam.googleapis.com/modifiedGrantsByRole API 속성을 사용하여 주 구성원이 부여하고 취소할 수 있는 역할에 제한을 설정할 수 있습니다. 이러한 제한을 통해 제한된 IAM 관리자를 만들어 팀의 허용 정책을 관리할 수 있지만 설정한 경계 내에서만 관리할 수 있습니다.

시작하기 전에

필수 권한

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

  • 프로젝트의 제한된 IAM 관리자를 만들려는 경우: 프로젝트 IAM 관리자(roles/resourcemanager.projectIamAdmin)
  • 폴더의 제한된 IAM 관리자를 만들려는 경우: 폴더 관리자(roles/resourcemanager.folderAdmin)
  • 프로젝트, 폴더 또는 조직의 제한된 IAM 관리자를 만들려는 경우: 조직 관리자(roles/resourcemanager.organizationAdmin)

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 프로젝트, 폴더 또는 조직의 제한된 IAM 관리자를 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

프로젝트, 폴더 또는 조직의 제한된 IAM 관리자를 만들려면 다음 권한이 필요합니다.

  • 프로젝트에 대한 제한된 IAM 관리자를 만들려면 다음 안내를 따르세요.
    • resourcemanager.projects.getIamPolicy
    • resourcemanager.projects.setIamPolicy
  • 폴더에 대한 제한된 IAM 관리자를 만들려면 다음 안내를 따르세요.
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
  • 조직에 대한 제한된 IAM 관리자를 만들려면 다음 안내를 따르세요.
    • resourcemanager.organizations.getIamPolicy
    • resourcemanager.organizations.setIamPolicy

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

일반 사용 사례

다음 섹션에서는 제한된 역할 부여를 사용해서 허용 정책의 셀프서비스 관리를 사용 설정하는 방법을 설명합니다.

제한된 IAM 관리자 만들기

사용자 Finn(finn@example.com)이 프로젝트의 제한된 IAM 관리자 역할을 수행할 수 있는 시나리오를 생각해 보겠습니다. Finn은 프로젝트의 App Engine 관리자(roles/appengine.appAdmin) 및 App Engine 뷰어(roles/appengine.appViewer) 역할만 부여 및 취소할 수 있어야 합니다.

이 제한된 권한을 부여하려면 Finn에게 프로젝트 IAM 관리자 역할(roles/resourcemanager.projectIamAdmin)을 조건부로 부여합니다. 프로젝트 IAM 관리자 역할을 통해 Finn은 IAM 역할을 부여 및 취소할 수 있고, 조건에 따라 Finn이 부여 및 취소할 수 있는 역할이 제한됩니다.

{
  "version": 3,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "members": [
        "user:owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "finn@example.com"
      ],
      "role": "roles/resourcemanager.projectIamAdmin",
      "condition": {
        "title": "only_appengine_admin_viewer_roles",
        "description": "Only allows changes to role bindings with the App Engine Admin or Viewer roles",
        "expression":
          "api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/appengine.appAdmin', 'roles/appengine.appViewer'])"
      }
    }
  ]
}

이 조건부 역할 결합을 사용하면 Finn이 다음을 수행할 수 있습니다.

  • 프로젝트의 App Engine 관리자 및 App Engine 뷰어 역할을 부여합니다.
  • 프로젝트의 App Engine 관리자 및 App Engine 뷰어 역할을 취소합니다.
  • App Engine 관리자 및 App Engine 뷰어 역할을 부여하는 프로젝트 수준 역할 결합의 조건을 추가, 삭제 또는 수정합니다.
  • 프로젝트 허용 정책을 수정하지 않고 프로젝트 IAM 관리자 역할에서 다른 허용 작업을 수행합니다. 예를 들어 Finn은 projects.getIamPolicy 메서드를 사용하여 프로젝트의 허용 정책을 가져올 수 있습니다.

이 조건부 역할 결합으로 인해 Finn은 다음 작업을 할 수 없습니다.

  • 프로젝트 이외의 리소스에 대한 허용 정책을 수정합니다.
  • App Engine 관리자 또는 App Engine 뷰어 역할이 아닌 역할을 부여합니다.
  • App Engine 관리자 또는 App Engine 뷰어 역할이 아닌 역할을 취소합니다.
  • App Engine 관리자 역할이나 App Engine 뷰어 역할을 부여하지 않는 역할 바인딩의 조건을 추가, 삭제 또는 수정합니다.

사용자가 제한된 IAM 관리자를 관리하도록 허용

사용자 Lila를 팀의 제한된 IAM 관리자로 지정하려는 경우를 가정해 보겠습니다. Lila가 프로젝트의 Compute 관리자 역할(roles/compute.admin)만 부여하고 취소할수 있도록 하려고 합니다. 하지만 Lila가 다른 사용자를 제한된 IAM 관리자 역할을 하도록 선택할 수도 있게 하려고 합니다. 즉, Lila가 다른 사용자에게 Compute 관리자 역할만 부여하고 취소할 수 있도록 하려고 합니다.

Lila에게 프로젝트 IAM 관리자 역할(roles/resourcemanager.projectIamAdmin)을 부여한 후 다른 사용자에게 이 역할을 부여하거나 취소할 수 있는 권한을 제공할 수 있습니다. 하지만 Lila에게 프로젝트 IAM 관리자 역할을 부여하면 Lila는 자신의 역할에서 조건을 삭제하고 스스로 IAM 역할을 부여하거나 취소할 수 있습니다.

이 권한 에스컬레이션을 방지하려면 프로젝트의 제한된 IAM 관리자를 위해 Google 그룹iam-compute-admins@example.com을 대신 만듭니다. 그런 다음 그룹에 Lila를 추가하고 그룹 관리자로 지정합니다.

그룹을 만든 후에는 그룹에 프로젝트 IAM 관리자 역할(roles/resourcemanager.projectIamAdmin)을 조건부로 부여합니다. 프로젝트 IAM 관리자 역할은 그룹 구성원에게 IAM 역할을 부여 및 취소할 수 있도록 하고 조건은 어떤 역할을 부여하고 취소할 수 있는지 제한할 수 있습니다.

{
  "version": 3,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "members": [
        "user:owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "iam-compute-admins@example.com"
      ],
      "role": "roles/resourcemanager.projectIamAdmin",
      "condition": {
        "title": "only_compute_admin_role",
        "description": "Only allows changes to role bindings for the Compute Admin role",
        "expression":
          "api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/compute.admin'])"
      }
    }
  ]
}

Lila는 iam-compute-admins@example.com 그룹의 구성원으로서 다음을 수행할 수 있습니다.

  • 역할의 새 결합을 추가하거나 역할의 기존 결합에 주 구성원을 추가하여 프로젝트의 Compute 관리자 역할을 부여합니다.
  • 역할의 기존 결합을 삭제하거나 역할의 기존 결합에서 주 구성원을 삭제하여 Compute 관리자 역할을 취소합니다.
  • 역할의 결합에 연결된 조건을 추가, 삭제 또는 수정하여 Compute 관리자 역할의 권한 부여를 수정합니다.
  • 프로젝트 허용 정책을 수정하지 않고 프로젝트 IAM 관리자 역할에서 다른 허용 작업을 수행합니다. 예를 들어 projects.getIamPolicy 메서드를 사용하여 프로젝트의 허용 정책을 가져올 수 있습니다.

iam-compute-admins@example.com 그룹의 관리자인 Lila는 다른 사용자를 iam-compute-admins@example.com 그룹에 추가하여 Compute 관리자 역할을 부여하거나 취소할 수 있습니다.

Lila는 다음 작업을 할 수 없습니다.

  • 다른 역할을 부여하거나 취소할 수 있는 권한을 자신에게 부여합니다.
  • 프로젝트 이외의 리소스에 대한 허용 정책을 수정합니다.
  • Compute 관리자 역할 이외의 역할을 부여합니다.
  • Compute 관리자 역할 이외의 역할을 취소합니다.
  • Compute 관리자 역할을 부여하지 않는 역할 바인딩의 조건을 추가, 삭제 또는 수정합니다.

역할 부여 제한

다음 섹션에서는 주 구성원이 특정 역할만 부여하거나 취소할 수 있는 방법을 설명합니다.

역할 부여를 제한하는 조건 표현식 작성

주 구성원의 역할 부여 권한을 제한하려면 주 구성원이 부여하거나 취소할 수 있는 역할을 지정하는 조건 표현식을 작성합니다.

조건 표현식에는 다음 형식을 사용합니다.

api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(roles)

이 표현식은 다음을 수행합니다.

  • api.getAttribute() 함수를 사용하여 API 속성 iam.googleapis.com/modifiedGrantsByRole을 가져옵니다.

    리소스의 허용 정책을 설정하기 위한 요청의 경우 이 속성에는 요청이 수정하는 결합의 역할 이름이 포함됩니다. 다른 유형의 요청에서는 이 속성이 정의되지 않습니다. 이러한 경우 함수는 기본값([])을 반환합니다.

  • hasOnly() CEL(Common Expression Language) 함수를 사용하여 주 구성원에게 부여 또는 취소할 수 있는 역할을 정의하고 적용합니다.

    hasOnly() 함수의 입력은 주 구성원이 부여하거나 취소할 수 있는 역할의 목록입니다. iam.googleapis.com/modifiedGrantsByRole 속성의 역할이 이 목록에 포함된 경우 함수가 true를 반환합니다. 포함되지 않으면 함수가 false를 반환합니다.

    iam.googleapis.com/modifiedGrantsByRole 속성에 기본값([])이 포함된 경우 []에는 목록에 포함되지 않은 역할이 포함되어 있지 않으므로 함수는 true를 반환합니다.

이 표현식을 맞춤설정하려면 roles를 주 구성원이 부여하거나 취소할 수 있는 역할 목록으로 바꿉니다. 예를 들어 주 구성원이 Pub/Sub 편집자(roles/pubsub.editor) 또는 Pub/Sub 게시자(roles/pubsub.publisher) 역할만 부여하거나 취소할 수 있도록 하려면 ['roles/pubsub.editor', 'roles/pubsub.publisher']를 사용합니다.

허용된 역할 목록에 최대 10개의 값을 포함할 수 있습니다. 이러한 값은 모두 문자열 상수여야 합니다.

hasOnly() 문에 대한 논리 연산자

단일 조건에서 여러 hasOnly() 문을 조인하기 위해 && 또는 || 연산자를 사용하지 마세요. 사용하면 주 구성원이 이러한 역할을 개별적으로 부여하거나 취소할 수 있더라도 여러 역할을 부여 또는 취소하는 요청이 실패할 수 있습니다.

예를 들어 다음 조건을 고려해 보세요.

api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
    .hasOnly(['roles/pubsub.editor']) ||
api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
    .hasOnly(['roles/pubsub.publisher'])

이 조건은 요청에서 roles/pubsub.editor 역할 또는 roles/pubsub.publisher 역할 중 하나를 부여하면 true로 평가되지만 요청에서 roles/pubsub.editor 역할 및 roles/pubsub.publisher 역할을 모두 부여하면 false로 평가됩니다.

조건부 역할 결합을 사용하여 역할 부여 제한

주 구성원이 특정 역할만 부여하거나 취소할 수 있게 하려면 이전 섹션의 조건 표현식을 사용하여 조건부 역할 결합을 만듭니다. 그런 다음 리소스의 허용 정책에 조건부 역할 결합을 추가합니다.

  1. 주 구성원에게 역할을 부여하고 취소할 범위를 나타내는 리소스를 선택합니다.

    • 주 구성원이 조직 내 모든 리소스에 특정 역할을 부여하고 취소할 수 있게 하려면 조직을 선택합니다.
    • 주 구성원이 폴더 내 모든 리소스에 특정 역할을 부여하고 취소할 수 있게 하려면 폴더를 선택합니다.
    • 주 구성원이 프로젝트 내 모든 리소스에 특정 역할을 부여하고 취소할 수 있게 하려면 프로젝트를 선택합니다.
  2. 선택한 리소스 유형(프로젝트, 폴더 또는 조직)에 대해 주 구성원이 허용 정책을 설정할 수 있는 역할을 선택합니다. 최소 권한의 원칙을 따르려면 다음 사전 정의된 역할 중 하나를 선택하세요.

    • 프로젝트: 프로젝트 IAM 관리자(roles/resourcemanager.projectIamAdmin)
    • 폴더: 폴더 IAM 관리자(roles/resourcemanager.folderIamAdmin)
    • 조직: 조직 관리자(roles/resourcemanager.organizationAdmin)

    또는 resourcemanager.resource-type.setIamPolicyresourcemanager.resource-type.getIamPolicy 권한이 포함된 커스텀 역할을 선택합니다. 여기서 resource-typeproject, folder 또는 organization입니다.

  3. 주 구성원에게 프로젝트, 폴더 또는 조직에서 선택한 역할을 조건부로 부여합니다.

    새 허용 정책이 적용되고 주 구성원은 허용한 역할의 결합만 수정할 수 있습니다.

    콘솔

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

      IAM 페이지로 이동

    2. 프로젝트, 폴더 또는 조직의 이름이 페이지 상단의 리소스 선택기에 표시되는지 확인합니다. 리소스 선택기는 현재 작업 중인 프로젝트, 폴더 또는 조직을 알려줍니다.

      리소스 이름이 표시되지 않으면 리소스 선택기를 클릭한 다음 리소스를 선택합니다.

    3. 주 구성원 목록에서 역할을 부여 및 취소할 주 구성원을 찾고 버튼을 클릭합니다.

    4. 권한 수정 패널에서 이전에 선택한 역할을 선택합니다. 그런 다음 IAM 조건(선택사항)에서 IAM 조건 추가를 클릭합니다.

    5. 조건 수정 패널에서 조건의 제목 및 설명(선택사항)을 입력합니다.

    6. 조건 편집기 탭을 클릭하고 역할 부여를 제한하는 조건 표현식 작성에서 작성한 표현식을 입력합니다. 이 표현식은 주 구성원이 부여하거나 취소할 수 있는 역할을 제한합니다.

      예를 들어 다음 조건 표현식은 주 구성원이 Pub/Sub 편집자(roles/pubsub.editor) 및 Pub/Sub 게시자(roles/pubsub.publisher) 역할을 부여하고 취소할 수 있도록 제한합니다.

      api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])

      경고: 허용된 역할 목록에 다음 유형의 역할을 포함하지 마세요.

      • IAM 역할을 부여하고 취소할 권한이 있는 역할(즉, setIamPolicy로 끝나는 권한 이름이 있는 역할)
      • 제한된 IAM 관리자가 수정할 수 있는 커스텀 역할. 예를 들어 제한된 IAM 관리자에게 프로젝트에 대한 역할 관리자 역할(roles/iam.roleAdmin)도 있는 경우 프로젝트 수준의 커스텀 역할을 부여하거나 취소할 수 없도록 합니다.

      이러한 유형의 역할을 부여하고 취소할 수 있는 제한된 IAM 관리자는 자신에게 모든 IAM 역할을 부여하고 취소할 수 있는 권한을 줄 수 있습니다. 자세한 내용은 역할 부여를 제한하는 조건 표현식 작성을 참조하세요.

    7. 저장을 클릭하여 조건을 적용합니다.

    8. 조건 수정 패널이 닫히면 권한 수정 패널에서 저장을 클릭하여 허용 정책을 업데이트합니다.

    gcloud

    허용 정책은 읽기-수정-쓰기 패턴을 통해 설정됩니다.

    먼저 리소스의 허용 정책을 읽습니다.

    get-iam-policy 명령어를 실행합니다. 이 명령어는 리소스의 현재 허용 정책을 가져옵니다.

    명령어:

    gcloud resource-type get-iam-policy resource-id --format=json > path

    다음 값을 바꿉니다.

    • resource-type: 주 구성원이 역할을 부여하거나 취소할 수 있는 리소스 유형입니다. projects, resource-manager folders, organizations 중 하나를 사용합니다.
    • resource-id: Google Cloud 프로젝트, 폴더 또는 조직 ID입니다.
    • path: 허용 정책을 다운로드할 파일의 경로입니다.

    허용 정책은 JSON 형식으로 저장됩니다. 예를 들면 다음과 같습니다.

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

    그런 다음 허용 정책을 수정합니다.

    주 구성원이 특정 역할의 결합만 수정할 수 있도록 하려면 강조표시된 조건부 역할 결합을 추가합니다.

    {
      "bindings": [
        {
          "members": [
            "user:owner@example.com"
          ],
          "role": "roles/owner"
        },
        {
          "members": [
            "principal"
          ],
          "role": "role",
          "condition": {
            "title": "title",
            "description": "description",
            "expression":
              "expression"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

    다음 값을 바꿉니다.

    • principal: 특정 역할을 부여하거나 취소할 주 구성원입니다. 예를 들면 user:my-user@example.com입니다. 각 주 구성원 유형의 형식을 보려면 Binding 참조를 확인하세요.
    • role: 이전 단계에서 선택한 역할입니다. 이 역할에는 선택한 리소스 유형의 setIamPolicy 권한이 포함되어야 합니다.
    • title: 조건을 간단히 설명하는 문자열입니다. 예를 들면 only_pubsub_roles입니다.
    • description: 선택사항. 조건에 대한 추가 설명입니다. 예를 들면 Only allows granting/revoking the Pub/Sub editor and publisher roles입니다.
    • expression: 역할 부여를 제한하는 조건 표현식 작성에서 작성한 표현식입니다. 이 표현식은 주 구성원이 부여하거나 취소할 수 있는 역할을 제한합니다.

      예를 들어 다음 조건 표현식은 주 구성원이 Pub/Sub 편집자(roles/pubsub.editor) 및 Pub/Sub 게시자(roles/pubsub.publisher) 역할을 부여하고 취소할 수 있도록 제한합니다.

      api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])

      경고: 허용된 역할 목록에 다음 유형의 역할을 포함하지 마세요.

      • IAM 역할을 부여하고 취소할 권한이 있는 역할(즉, setIamPolicy로 끝나는 권한 이름이 있는 역할)
      • 제한된 IAM 관리자가 수정할 수 있는 커스텀 역할. 예를 들어 제한된 IAM 관리자에게 프로젝트에 대한 역할 관리자 역할(roles/iam.roleAdmin)도 있는 경우 프로젝트 수준의 커스텀 역할을 부여하거나 취소할 수 없도록 합니다.

      이러한 유형의 역할을 부여하고 취소할 수 있는 제한된 IAM 관리자는 자신에게 모든 IAM 역할을 부여하고 취소할 수 있는 권한을 줄 수 있습니다. 자세한 내용은 역할 부여를 제한하는 조건 표현식 작성을 참조하세요.

    마지막으로 업데이트된 허용 정책을 작성합니다.

    리소스에 대한 set-iam-policy 명령어를 실행하여 새 허용 정책을 설정합니다.

    gcloud resource-type set-iam-policy resource-id path

    다음 값을 바꿉니다.

    • resource-type: 주 구성원이 역할을 부여하거나 취소할 수 있는 리소스 유형입니다. projects, resource-manager folders, organizations 중 하나를 사용합니다.
    • resource-id: Google Cloud 프로젝트, 폴더 또는 조직 ID입니다.
    • path: 업데이트된 허용 정책이 포함된 파일의 경로입니다.

    새 허용 정책이 적용되고 주 구성원은 허용한 역할의 결합만 수정할 수 있습니다.

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

    그런 다음 허용 정책을 수정합니다.

    주 구성원이 특정 역할만 부여하고 취소할 수 있게 해주는 조건부 역할 결합을 추가합니다. version 필드를 3 값으로 변경합니다.

    {
      "version": 3,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "members": [
            "user:owner@example.com"
          ],
          "role": "roles/owner"
        },
        {
          "members": [
            "PRINCIPAL"
          ],
          "role": "ROLE",
          "condition": {
            "title": "TITLE",
            "description": "DESCRIPTION",
            "expression":
              "EXPRESSION"
          }
        }
      ]
    }
    • PRINCIPAL: 특정 역할을 부여하거나 취소할 주 구성원입니다. 예를 들면 user:my-user@example.com입니다. 각 주 구성원 유형의 형식을 보려면 Binding 참조를 확인하세요.
    • ROLE: 이전 단계에서 선택한 역할입니다. 이 역할에는 선택한 리소스 유형의 setIamPolicy 권한이 포함되어야 합니다.
    • TITLE: 조건을 간단히 설명하는 문자열입니다. 예를 들면 only_pubsub_roles입니다.
    • DESCRIPTION: 선택사항. 조건에 대한 추가 설명입니다. 예를 들면 Only allows granting/revoking the Pub/Sub editor and publisher roles입니다.
    • EXPRESSION: 역할 부여를 제한하는 조건 표현식 작성에서 작성한 표현식입니다. 이 표현식은 주 구성원이 부여하거나 취소할 수 있는 역할을 제한합니다.

      예를 들어 다음 조건 표현식은 주 구성원이 Pub/Sub 편집자(roles/pubsub.editor) 및 Pub/Sub 게시자(roles/pubsub.publisher) 역할을 부여하고 취소할 수 있도록 제한합니다.

      api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])

      경고: 허용된 역할 목록에 다음 유형의 역할을 포함하지 마세요.

      • IAM 역할을 부여하고 취소할 권한이 있는 역할(즉, setIamPolicy로 끝나는 권한 이름이 있는 역할)
      • 제한된 IAM 관리자가 수정할 수 있는 커스텀 역할. 예를 들어 제한된 IAM 관리자에게 프로젝트에 대한 역할 관리자 역할(roles/iam.roleAdmin)도 있는 경우 프로젝트 수준의 커스텀 역할을 부여하거나 취소할 수 없도록 합니다.

      이러한 유형의 역할을 부여하고 취소할 수 있는 제한된 IAM 관리자는 자신에게 모든 IAM 역할을 부여하고 취소할 수 있는 권한을 줄 수 있습니다. 자세한 내용은 역할 부여를 제한하는 조건 표현식 작성을 참조하세요.

    마지막으로 업데이트된 허용 정책을 작성합니다.

    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 표현입니다. 정책 형식에 대한 자세한 내용은 정책 참조를 확인하세요.

      예를 들어 이전 단계에 표시된 정책을 설정하려면 POLICY를 다음으로 바꿉니다.

      {
        "version": 3,
        "etag": "BwWKmjvelug=",
        "bindings": [
          {
            "members": [
              "user:owner@example.com"
            ],
            "role": "roles/owner"
          },
          {
            "members": [
              "principal"
            ],
            "role": "role",
            "condition": {
              "title": "title",
              "description": "description",
              "expression":
                "expression"
            }
          }
        ]
      }

    HTTP 메서드 및 URL:

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

    JSON 요청 본문:

    {
      "policy": POLICY
    }
    

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

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

다음 단계