조건부 역할 결합 관리

이 주제에서는 Identity and Access Management(IAM) 허용 정책에서 조건부 역할 결합을 추가, 수정, 삭제하는 방법을 설명합니다.

시작하기 전에

  • Enable the IAM API.

    Enable the API

  • IAM 조건부 역할 결합의 기본 사항을 이해하려면 IAM 조건 개요를 읽어보세요.

  • 표현식에 사용할 수 있는 여러 조건 속성을 알아보려면 속성 참조를 검토하세요.

필요한 역할

리소스의 허용 정책에서 조건부 역할 결합을 관리하려면 리소스를 가져오고 리소스에 대한 허용 정책을 가져오고 설정할 권한이 필요합니다. 이러한 권한의 형식은 다음과 같습니다. 여기에서 SERVICE는 리소스를 소유하는 서비스의 이름이고 RESOURCE_TYPE은 액세스를 관리하려는 리소스 유형의 이름입니다.

  • SERVICE.RESOURCE_TYPE.get
  • SERVICE.RESOURCE_TYPE.getIamPolicy
  • SERVICE.RESOURCE_TYPE.setIamPolicy

예를 들어 프로젝트의 허용 정책에서 조건부 역할 결합을 관리하려면 다음 권한이 필요합니다.

  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.setIamPolicy

필요한 권한을 얻으려면 권한이 포함된 미리 정의된 역할 또는 커스텀 역할을 부여하도록 관리자에게 요청하세요. 예를 들어 관리자는 모든 Google Cloud 리소스를 가져오고 허용 정책을 관리할 수 있는 권한이 포함된 보안 관리자 역할(roles/iam.securityAdmin)을 사용자에게 부여할 수 있습니다.

정책에 조건부 역할 결합 추가

조건부 역할 결합을 신규 또는 기존 허용 정책에 추가하여 Google Cloud 리소스에 대한 액세스를 추가로 제어할 수 있습니다. 이 섹션에서는 Google Cloud Console, Google Cloud CLI, REST API를 사용하여 기존 허용 정책에 간단한 시간 기반 조건을 추가하는 방법을 보여줍니다.

기존 허용 정책에 조건부 역할 바인딩을 추가하려면 다음 안내를 따르세요.

콘솔

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

    IAM 페이지로 이동

  2. 주 구성원 목록에서 원하는 주 구성원을 찾고 버튼을 클릭합니다.

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

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

  5. 조건 빌더 또는 조건 편집기를 사용하여 조건 표현식을 추가할 수 있습니다. 조건 빌더에서는 표현식에 대해 원하는 조건 유형, 연산자, 기타 적용 가능한 세부정보를 선택할 수 있는 대화형 인터페이스를 제공합니다. 조건 편집기에서는 CEL 구문을 사용하여 표현식을 수동으로 입력하는 텍스트 기반 인터페이스를 제공합니다.

    조건 빌더:

    1. 조건 유형 드롭다운에서 만료되는 액세스를 선택합니다.
    2. 연산자 드롭다운에서 기한을 선택합니다.
    3. 시간 드롭다운에서 버튼을 클릭하여 날짜 및 시간 범위를 선택합니다.
    4. 저장을 클릭하여 조건을 적용합니다.
    5. 조건 수정 패널이 닫히면 권한 수정 패널에서 저장을 다시 클릭하여 허용 정책을 업데이트합니다.

    조건 편집기:

    1. 조건 편집기 탭을 클릭하고 타임스탬프를 직접 바꿔 다음 표현식을 입력합니다.

      request.time < timestamp("2019-12-31T12:00:00.000Z")
    2. 표현식을 입력한 후 오른쪽 상단 텍스트 상자 위에 있는 린터 실행을 클릭하여 CEL 구문 유효성을 검사할 수도 있습니다.

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

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

gcloud

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

gcloud projects get-iam-policy 명령어를 실행하여 프로젝트의 현재 허용 정책을 가져옵니다. 다음 예시에서는 허용 정책의 JSON 버전이 디스크의 경로로 다운로드됩니다.

명령어:

gcloud projects get-iam-policy project-id --format json > file-path

허용 정책의 JSON 형식이 다운로드됩니다.

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

허용 정책의 현재 version1입니다. 만료되는 액세스 권한이 있는 허용 정책을 구성하려면 타임스탬프를 직접 바꿔 다음 강조표시된 조건 표현식을 추가합니다. gcloud CLI에서 버전을 자동으로 업데이트합니다.

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer",
      "condition": {
          "title": "Expires_2019",
          "description": "Expires at noon on 2019-12-31",
          "expression":
            "request.time < timestamp('2019-12-31T12:00:00Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

다음으로 gcloud projects set-iam-policy 명령어를 실행하여 새 허용 정책을 설정합니다.

gcloud projects set-iam-policy project-id file-path

새 허용 정책이 적용되고 travis@example.com의 역할 바인딩이 지정된 시간에 만료됩니다.

REST

읽기-쓰기-수정 패턴을 사용하여 특정 시간까지 액세스를 허용합니다.

먼저 프로젝트의 허용 정책을 읽습니다.

Resource Manager API의 projects.getIamPolicy 메서드가 프로젝트의 허용 정책을 가져옵니다.

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

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • POLICY_VERSION: 반환할 정책 버전입니다. 요청에는 정책 버전 3인 최신 정책 버전이 지정되어야 합니다. 자세한 내용은 정책을 가져올 때 정책 버전 지정을 참조하세요.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

JSON 요청 본문:

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

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

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

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

허용 정책의 현재 version1입니다.

그런 다음 특정 시간까지 액세스를 허용하도록 허용 정책을 수정합니다. version 필드를 3 값으로 변경합니다.

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "condition": {
        "title": "Expires_2019",
        "description": "Expires at noon on 2019-12-31",
        "expression": "request.time < timestamp('2019-12-31T12:00:00Z')"
      },
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

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

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

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

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

JSON 요청 본문:

{
  "policy": {
    "version": 3,
    "etag": "BwWKmjvelug=",
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "user:travis@example.com"
        ],
        "condition": {
          "title": "Expires_July_1_2020",
          "description": "Expires on July 1, 2020",
          "expression":
            "request.time < timestamp('2020-07-01T00:00:00.000Z')"
        }
      }
    ]
  }
}

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

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


기존 조건부 역할 결합 수정

조건부 역할 결합을 만든 후에는 언제든지 조건 표현식을 변경할 수 있습니다. 이 섹션에서는 Google Cloud Console, Google Cloud CLI, REST API를 사용하여 기존 허용 정책에서 시간 기반 조건을 업데이트하는 방법을 설명합니다.

기존 허용 정책에서 조건부 역할 결합을 수정하려면 다음 안내를 따르세요.

콘솔

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

    IAM 페이지로 이동

  2. 주 구성원 목록에서 원하는 주 구성원을 찾고 버튼을 클릭합니다.

  3. 권한 수정 패널에서 조건을 구성할 역할을 찾습니다. 그런 다음 IAM 조건(선택사항)에서 수정할 기존 조건의 이름을 클릭합니다.

  4. 조건 수정 패널에서 조건의 기존 제목과 설명을 유지하거나 업데이트할 수 있습니다.

  5. 조건 빌더 또는 조건 편집기를 사용하여 기존 조건 표현식을 수정하거나 새 조건 표현식을 추가할 수 있습니다. 조건 빌더에서는 표현식에 대해 원하는 조건 유형, 연산자, 기타 적용 가능한 세부정보를 선택할 수 있는 대화형 인터페이스를 제공합니다. 조건 편집기에서는 CEL 구문을 사용하여 표현식을 수동으로 입력하는 텍스트 기반 인터페이스를 제공합니다.

    조건 빌더:

    1. 새 조건 표현식을 추가하거나 기존 조건 표현식을 수정합니다.
    2. 저장을 클릭하여 조건을 적용합니다.
    3. 조건 수정 패널이 닫히면 권한 수정 패널에서 저장을 다시 클릭하여 허용 정책을 업데이트합니다.

    조건 편집기:

    1. 조건 편집기 탭을 클릭하고 새 조건 표현식을 추가하거나 기존 조건 표현식을 수정합니다.
    2. 표현식을 입력한 후 오른쪽 상단 텍스트 상자 위에 있는 린터 실행을 클릭하여 CEL 구문 유효성을 검사할 수도 있습니다.
    3. 저장을 클릭하여 조건을 적용합니다.
    4. 조건 수정 패널이 닫히면 권한 수정 패널에서 저장을 다시 클릭하여 허용 정책을 업데이트합니다.

gcloud

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

gcloud projects get-iam-policy 명령어를 실행하여 프로젝트의 현재 허용 정책을 가져옵니다. 다음 예시에서는 허용 정책의 JSON 버전이 디스크의 경로로 다운로드됩니다.

명령어:

gcloud projects get-iam-policy project-id --format json > file-path

허용 정책의 JSON 형식이 다운로드됩니다.

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

이 예시에서는 표현식의 title, description, 타임스탬프 값을 업데이트하여 예약된 액세스 조건의 지속 시간을 변경합니다. 값을 직접 대체하여 다음의 강조표시된 조건 부분을 업데이트합니다.

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

다음으로 gcloud projects set-iam-policy 명령어를 실행하여 새 허용 정책을 설정합니다.

gcloud projects set-iam-policy project-id file-path

업데이트된 허용 정책이 적용되고 fatima@example.com의 역할 바인딩이 새로 설정된 시간에 만료됩니다.

REST

read-modify-write 패턴을 사용하여 조건부 역할 바인딩을 수정합니다.

먼저 프로젝트의 허용 정책을 읽습니다.

Resource Manager API의 projects.getIamPolicy 메서드가 프로젝트의 허용 정책을 가져옵니다.

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

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

JSON 요청 본문:

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

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

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

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

그런 다음 허용 정책에서 조건부 역할 결합을 수정합니다. 이 예시에서는 타임스탬프 값을 업데이트하여 예약된 액세스 조건의 지속 시간을 변경합니다. 타임스탬프를 직접 바꿔 다음의 강조표시된 조건 표현식 부분을 업데이트합니다.

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

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

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

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

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

JSON 요청 본문:

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "condition": {
          "title": "Duration_5_months",
          "description": "Expires in 5 months on 2020-01-12",
          "expression":
            "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
        },
        "members": [
          "user:fatima@example.com"
        ],
      }
    ]
  }
}

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

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


역할 바인딩에서 조건 삭제

역할 바인딩에서 조건을 삭제해도 역할이 취소되지는 않습니다. 대신 해당 역할 바인딩의 모든 주 구성원이 역할의 권한을 조건 없이 사용할 수 있습니다.

이 섹션에서는 Google Cloud 콘솔, Google Cloud CLI, REST API를 사용하여 허용 정책에서 시간 기반 조건을 삭제하는 방법을 설명합니다.

허용 정책에서 역할 결합의 조건을 삭제하려면 다음 안내를 따르세요.

콘솔

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

    IAM 페이지로 이동

  2. 주 구성원 목록에서 원하는 주 구성원을 찾고 버튼을 클릭합니다.

  3. 권한 수정 패널에서 원하는 역할 결합을 찾습니다. 그런 다음 IAM 조건(선택사항)에서 기존 조건 이름을 클릭합니다.

  4. 조건 수정 패널에서 버튼을 클릭하여 조건을 삭제합니다. 조건을 삭제할 것인지 확인하라는 메시지가 표시됩니다.

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

gcloud

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

gcloud projects get-iam-policy 명령어를 실행하여 프로젝트의 현재 허용 정책을 가져옵니다. 다음 예시에서는 허용 정책의 JSON 버전이 디스크의 경로로 다운로드됩니다.

명령어:

gcloud projects get-iam-policy project-id --format json > file-path

허용 정책의 JSON 형식이 다운로드됩니다.

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

허용 정책에서 조건부 역할 결합을 삭제하려면 아래와 같이 condition 블록을 삭제합니다.

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

비조건부 역할 결합에는 허용 정책 버전 1만 필요하지만 version은 여전히 3으로 설정되어 있습니다. 허용 정책을 설정할 때는 조건부 역할 결합과 비조건부 역할 결합 모두에 항상 가장 높은 버전 번호를 사용하는 것이 좋습니다. 자세한 내용은 버전 요구사항을 참조하세요. gcloud CLI는 허용 정책의 버전 번호를 자동으로 업데이트합니다.

다음으로 gcloud projects set-iam-policy 명령어를 실행하여 업데이트된 허용 정책을 설정합니다.

gcloud projects set-iam-policy project-id file-path

fatima@example.com의 조건부 역할 결합을 삭제하면 업데이트된 허용 정책이 적용됩니다. 역할 바인딩이 더 이상 만료되지 않습니다.

REST

read-modify-write 패턴을 사용하여 조건부 역할 바인딩을 삭제합니다.

먼저 프로젝트의 허용 정책을 읽습니다.

Resource Manager API의 projects.getIamPolicy 메서드가 프로젝트의 허용 정책을 가져옵니다.

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

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

JSON 요청 본문:

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

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

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

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

그런 다음 조건부 역할 결합을 삭제하여 허용 정책을 수정합니다.

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

비조건부 역할 결합에는 허용 정책 버전 1만 필요하지만 version은 여전히 3으로 설정되어 있습니다. 허용 정책을 설정할 때는 조건부 역할 결합과 비조건부 역할 결합 모두에 항상 가장 높은 버전 번호를 사용하는 것이 좋습니다. 자세한 내용은 버전 요구사항을 참조하세요.

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

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

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

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

JSON 요청 본문:

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

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

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


다음 단계