IAP 보안 리소스에 대한 액세스 관리

이 페이지에서는 리소스 수준에서 Identity-Aware Proxy(IAP) 보안 리소스에 대한 개별 또는 그룹 액세스를 관리하는 방법에 대해 설명합니다.

개요

IAP를 사용하면 Google Cloud 프로젝트에서 개별 및 Cloud Run 리소스에 대한 IAP 정책을 구성할 수 있습니다. 한 프로젝트 내의 여러 앱은 각각 서로 다른 액세스 정책을 가질 수 있습니다. 여기에는 Compute Engine, Google Kubernetes Engine, App Engine 앱이 있는 프로젝트가 포함됩니다. App Engine 엔진의 경우 개별 버전 및 서비스에 서로 다른 액세스 정책이 적용될 수 있습니다.

프로젝트 수준 및 상위 액세스를 관리하기 위해서는 IAM 관리자 페이지를 사용하세요. 프로젝트 수준에서 액세스가 있는 사용자('주 구성원') 목록이 프로젝트에 있는 모든 IAP 보안 리소스에 적용됩니다.

시작하기 전에

시작하기 전에 다음이 필요합니다.

  • 개인 또는 그룹 액세스를 추가하려는 IAP 보안 리소스
  • 액세스를 추가하려는 사용자 또는 그룹 이름

IAP 사용 및 사용 중지

IAP를 사용 및 사용 중지하려면 특정 권한이 필요합니다. 다음 표에서는 각 앱 유형에 필요한 권한을 보여줍니다.

앱 유형 권한 필요
App Engine appengine.applications.update
Compute Engine, Google Kubernetes Engine 또는 Cloud Run compute.backendServices.update

이러한 권한은 프로젝트 편집자, App Engine 관리자 및 Compute 네트워크 관리자와 같은 역할로 부여됩니다. 이러한 역할을 통해 IAP를 사용하거나 중지할 수 있지만 액세스 정책을 수정하는 데 필요한 권한이 없습니다.

또한 Google Cloud 콘솔로 IAP를 사용하려면 clientauthconfig.clients.createclientauthconfig.clients.getWithSecret 권한도 필요할 수 있습니다. 이 권한은 프로젝트 편집자 역할로 부여됩니다.

역할 부여에 대한 자세한 내용은 액세스 권한 부여, 변경, 취소를 참조하세요.

Google Cloud 콘솔에서 액세스 관리

Google Cloud 콘솔을 사용하여 IAP 보안 리소스에 대한 액세스를 제어하려면 프로세스에 따라 액세스를 추가하거나 제거합니다.

액세스 추가

  1. Identity-Aware Proxy 페이지로 이동합니다.
    Identity-Aware Proxy 페이지로 이동

  2. IAP로 보호하려는 리소스를 선택합니다. 다음 리소스 선택은 일련의 리소스 그룹을 보호합니다.

    • 모든 웹 서비스: 프로젝트에 있는 모든 리소스가 보호됩니다. 이것은 IAM 관리자 페이지를 통해 프로젝트 수준 액세스를 부여하는 것과 다릅니다. 모든 웹 서비스 리소스 수준에서 IAP 정책 관리자 역할을 부여받은 사용자는 IAP 정책에 대한 권한만 갖습니다.

    • 백엔드 서비스: 모든 백엔드 서비스가 보호됩니다.

  3. 오른쪽 정보 패널에서 리소스에 대해 ID 및 액세스 관리(IAM) 역할을 부여하려는 그룹 또는 개인의 이메일 주소를 추가합니다.

  4. 역할 선택 드롭다운에서 다음 역할 중에서 선택하여 주 구성원에 액세스 정책 역할을 적용합니다.

    • 소유자: IAP 정책 관리자와 동일한 액세스를 부여합니다. 대신 IAP 정책 관리자 역할을 사용하세요. 이 역할은 정책 수정만 허용하고, 앱에 대한 액세스를 부여하지 않습니다.

    • IAP 정책 관리자: IAP 정책에 대한 관리자 권한을 부여합니다.

    • IAP 보안 웹 앱 사용자: IAP를 사용하는 앱 및 기타 HTTPS 리소스에 대한 액세스를 부여합니다.

    • 보안 검토자: IAP 정책을 보고 감사할 수 있는 권한을 부여합니다.

  5. 이메일 주소 추가 및 역할 설정을 마쳤으면 추가를 클릭합니다.

액세스 권한 삭제

  1. Identity-Aware Proxy 페이지로 이동합니다.
    Identity-Aware Proxy 페이지로 이동
  2. IAP로 보호된 리소스를 선택합니다.
  3. 오른쪽 정보 패널에서 주 구성원으로부터 삭제하려는 역할에 해당하는 섹션을 선택합니다.
  4. 확장된 섹션에서 역할을 삭제하려는 각 사용자 또는 그룹 이름 옆에서 삭제를 클릭합니다.
  5. 표시된 주 구성원 삭제 대화상자에서 삭제를 클릭합니다.

API로 액세스 관리

IAM은 Google Cloud 리소스에서 액세스 제어 정책을 만들고 관리하기 위한 표준 방법을 제공합니다.

리소스 및 권한

IAP API를 사용하면 IAP 보안 프로젝트의 개별 리소스에 IAM 권한을 적용할 수 있습니다. 특정 수준에 부여되는 IAM 권한은 그 아래의 모든 수준에 적용됩니다. 예를 들어 프로젝트 수준에서 부여된 권한은 프로젝트의 모든 Google Cloud 리소스에 적용됩니다. 프로젝트 및 상위 수준의 액세스는 IAM 관리자 페이지에서 관리되지만 IAP 관리자 페이지에 표시됩니다.

사용자가 IAP로 보호되는 앱에 액세스하려면 특정 권한이 필요합니다. 관리자는 API를 사용하여 IAM 정책을 업데이트하여 이러한 권한을 부여할 수 있습니다. iap.webServiceVersions.accessViaIAP 권한은 사용자에게 앱 액세스 권한을 부여합니다. IAP를 사용하여 SSH 및 RDP와 같은 관리 서비스에 대한 액세스를 제어하는 경우 사용자에게 iap.tunnelInstances.accessViaIAP 권한이 필요합니다.

각 IAP 리소스에는 해당 리소스 및 하위 요소에 대한 액세스 정책을 관리할 수 있는 고유한 getIamPolicysetIamPolicy 권한이 있습니다.

IAM API를 호출하려면 리소스에 대한 URL 경로로 호출을 수행합니다. 다음은 App Engine 앱 서비스 버전에 대해 IAM 정책을 가져오는 예시 호출입니다.

https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web/
appengine-APP_ID/services/SERVICE_ID/versions/VERSION_ID:getIamPolicy

다음 표에는 지원되는 리소스 유형과 IAM API를 호출하는 데 필요한 권한이 나와 있습니다.

리소스 유형 권한
프로젝트의 모든 IAP 보안 웹 앱
이는 IAP 관리 페이지의 모든 웹 서비스 체크박스와 동일합니다.

경로
https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web
iap.web.getIamPolicy

iap.web.setIamPolicy
백엔드 서비스
이는 IAP 관리 페이지의 백엔드 서비스 체크박스와 동일합니다.

경로
전역 범위:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute

리전 범위:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
App Engine 앱
이는 IAP 관리 페이지의 App Engine 앱 체크박스와 동일합니다.

경로
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
Compute Engine 백엔드 서비스
백엔드 서비스 경로는 백엔드 서비스 ID 또는 백엔드 서비스 이름 중 하나를 지정할 수 있습니다.

경로
전역 범위:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute/services/
BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME

리전 범위:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME/
services/BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
App Engine 앱 서비스

경로
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
An App Engine service version
Compute Engine doesn't support versioning.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID/versions/VERSION_ID
iap.webServiceVersions.getIamPolicy

iap.webServiceVersions.setIamPolicy
프로젝트의 모든 IAP 보안 VM 인스턴스
이는 IAP 관리 페이지의 모든 터널 리소스 체크박스와 동일합니다.

경로
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel
iap.tunnel.getIamPolicy

iap.tunnel.setIamPolicy
하나 이상의 VM 인스턴스가 있는 영역
이는 IAP 관리 페이지의 영역 이름 체크박스와 동일합니다(예: us-central1-c).

경로
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
iap.tunnelZones.getIamPolicy

iap.tunnelZones.setIamPolicy
개별 VM 인스턴스

경로
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
/instances/INSTANCE_ID or INSTANCE_NAME
iap.tunnelInstances.getIamPolicy

iap.tunnelInstances.setIamPolicy
대상 그룹이 하나 이상 있는 리전, 예시, us-central1

경로
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
iap.tunnelLocations.getIamPolicy

iap.tunnelLocations.setIamPolicy
개별 대상 그룹

경로
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
/destGroups/GROUP_NAME
iap.tunnelDestGroups.getIamPolicy

iap.tunnelDestGroups.setIamPolicy

역할

다음 표에는 IAP IAM 역할과 각 역할에 포함된 모든 IAP 관련 권한 목록이 나열되어 있습니다. IAM 역할에 대한 자세한 내용은 역할 및 권한 관리를 참조하세요.

역할 포함된 권한 설명
IAP 보안 웹 앱 사용자(roles/iap.httpsResourceAccessor) iap.webServiceVersions.accessViaIAP App Engine 및 Compute Engine 리소스에 대한 액세스를 부여합니다.
IAP 보안 터널 사용자(roles/iap.tunnelResourceAccessor) iap.tunnelInstances.accessViaIAP
iap.tunnelDestGroups.accessViaIAP
IAP로 보호된 VM 인스턴스에 대한 액세스 권한을 부여합니다.
IAP 정책 관리자(roles/iap.admin) iap.web.getIamPolicy
iap.web.setIamPolicy
iap.webTypes.getIamPolicy
iap.webTypes.setIamPolicy
iap.webServices.getIamPolicy
iap.webServices.setIamPolicy
iap.webServiceVersions.getIamPolicy
iap.webServiceVersions.setIamPolicy
iap.tunnel.getIamPolicy
iap.tunnel.setIamPolicy
iap.tunnelZones.getIamPolicy
iap.tunnelZones.setIamPolicy
iap.tunnelInstances.getIamPolicy
iap.tunnelInstances.setIamPolicy
리소스의 IAP 액세스 정책을 관리할 수 있는 IAP 관리 권한을 부여합니다.

Google Cloud CLI를 사용한 액세스 관리

액세스 거부

Identity and Access Management(IAM) 거부 정책을 사용하면 Google Cloud 리소스에 대한 액세스에 가드레일을 설정할 수 있습니다. 거부 정책이 유용한 시나리오 목록은 사용 사례를 참고하세요.

거부 정책을 만들고 이러한 정책에 모든 IAP 권한을 포함할 수 있습니다. 거부 정책에 추가할 수 있는 IAP 권한 목록은 거부 정책에서 지원되는 권한을 참고하고 iap.googleapis.com을 검색하세요. 거부 정책은 모든 IAP 권한에 적용할 수 있지만 그 효과는 거부 정책 연결 지점에 연결되어 있습니다.

일부 IAP 권한은 특정 리소스 수준에서만 유효하며 하위 요소에는 적용되지 않습니다. 예를 들어 iap.organizations.getSettings는 조직의 하위 요소가 아닌 조직 수준에서 getSettings에 대한 액세스 권한을 부여합니다. 즉, 관리자는 연결 지점 및 그 하위 요소에서 액세스를 거부하는 거부 정책을 만들 때 관련된 모든 세분화된 권한을 명시적으로 나열해야 합니다.

이러한 세분화된 권한의 전체 목록은 거부 정책에서 지원되는 권한을 참고하세요. FQDN iap.googleapis.com 및 리소스 유형 iap.organizations, iap.folders, iap.projects, iap.web, iap.webTypes, iap.webServices, iap.webServicesVersions의 모든 권한은 세분화된 권한입니다.

다음은 조직의 주 구성원 및 그 하위 요소에 getSettings API에 대한 액세스 권한을 거부하는 IAM 거부 정책의 예시입니다.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/iap.organizations.getSettings",
          "iap.googleapis.com/iap.folders.getSettings",
          "iap.googleapis.com/iap.projects.getSettings",
          "iap.googleapis.com/iap.web.getSettings",
          "iap.googleapis.com/iap.webTypes.getSettings",
          "iap.googleapis.com/iap.webServices.getSettings",
          "iap.googleapis.com/iap.webServicesVersions.getSettings",
        ],
      }
    }
  ]
}

다음은 모든 세분화된 권한을 지정하는 대신 하나의 권한(*.getSettings)만 있는 IAM 거부 정책의 예시입니다.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/*.getSettings",
        ],
      }
    }
  ]
}

다음은 모든 세분화된 권한을 지정하지 않고도 IAM 거부 정책을 만드는 간단한 방법입니다.

관리자 작업 거부 정책의 권한
모든 IAP 리소스 유형에 대한 특정 IAP 권한 거부 *.updateSettings
*.getSettings
*.setIamPolicy
*.getIamPolicy
특정 리소스 유형에서 모든 IAP 권한 거부 iap.organizations.*
iap.folders.*
iap.projects.*
iap.web.*
iap.webTypes.*
iap.webServices.*
iap.webServicesVersions.*

공개 액세스

모든 사용자에게 리소스에 대한 액세스 권한을 부여하려면 다음 주 구성원 중 한 명에게 역할을 부여하세요.

  • allAuthenticatedUsers: Google 계정 또는 서비스 계정으로 인증한 모든 사용자
  • allUsers: 인증 사용자와 인증되지 않은 사용자를 포함하여 인터넷 상의 모든 사용자 요청의 서명된 헤더에는 sub 또는 email 클레임이 없습니다.

공개 액세스 권한이 부여되면 IAP는 요청에 대해 Cloud 감사 로그를 생성하지 않습니다.

현재 공개 액세스 권한을 부여하는 binding에는 연결된 조건을 가질 수 없습니다. 예를 들어, 요청 경로가 /public/으로 시작하는 경우 모든 사용자가 리소스에 액세스할 수 있는 정책이 유효하지 않습니다.