직원 ID 제휴로 IAP 구성

이 페이지에서는 직원 ID 제휴를 사용하도록 IAP(Identity-Aware Proxy)를 구성하는 방법을 보여줍니다.

IAP로 직원 ID 제휴를 구성할 때 외부 ID 공급업체(IdP)가 Identity and Access Management(IAM)를 사용하여 직원, 파트너, 계약업체와 같은 사용자 그룹인 직원을 인증 및 승인할 수 있도록 할 수 있으므로 사용자는 Google Cloud 또는 온프레미스에 배포된 서비스에 안전하게 액세스할 수 있습니다.

직원 ID 제휴로 IAP를 구성하면 IAP 보안 애플리케이션과 관련하여 다음을 수행할 수 있습니다.

  • 최종 사용자를 로그인할 수 있도록 Okta와 같은 외부 IdP로 리디렉션
  • 15분~12시간 사이의 로그인 세션을 구성
  • IdP의 특정 최종 사용자 또는 최종 사용자 집합만이 애플리케이션에 액세스하도록 허용
  • 최종 사용자가 애플리케이션에 액세스할 수 있는 컨텍스트 지정. 예를 들어 하루 중 특정 시간에만 액세스를 허용합니다.

IAP가 지원하는 모든 기존 리소스 및 부하 분산기에서 직원 ID 제휴로 IAP를 사용할 수 있습니다.

애플리케이션의 직원 ID 제휴로 IAP 구성

직원 ID 제휴로 IAP를 구성하는 주요 단계는 다음과 같습니다.

  1. 직원 풀 및 공급업체를 설정하기
  2. OAuth 클라이언트 ID 및 보안 비밀 만들기
  3. IAP를 사용 설정하고 직원 ID 제휴를 사용하도록 구성하기

직원 풀 및 공급업체 설정

직원 풀 및 공급업체를 설정하려면 직원 ID 제휴의 지침을 따르고 세션 기간을 설정할 때 직원 ID 제휴 세션으로 IAP 관리를 참조하세요.

타사 IdP의 이메일 주소를 Google Cloud로 매핑하려면 직원 풀 공급업체에서 google.email에 대한 속성 매핑을 추가해야 합니다. 예: google.email=assertion.email

OAuth 클라이언트 ID 및 보안 비밀 만들기

  1. 안내에 따라 이 구성에 사용할 직원 풀과 동일한 조직의 프로젝트 아래에 OAuth 클라이언트 ID 및 보안 비밀을 만듭니다. 프로젝트는 IAP 보안 리소스가 있는 프로젝트와 동일할 필요는 없습니다. OAuth 클라이언트 ID 및 보안 비밀번호를 만들 때는 다음을 수행합니다.

    1. 클라이언트 ID를 만들 때 리디렉션 URI의 자리표시자를 사용하세요. 클라이언트 ID를 만든 후 describe OAuth 클라이언트를 실행하여 생성된 clientID를 가져옵니다.

    2. clientID가 있으면 update OAuth 클라이언트를 실행하여 allowed-redirect-urishttps://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect로 업데이트합니다.

      여기서 CLIENT_ID는 이전 단계에서 가져온 clientID입니다.

    3. 클라이언트 보안 비밀번호를 만든 후 describe OAuth 클라이언트 사용자 인증 정보를 실행하여 생성된 clientSecret을 가져옵니다.

    이후 단계에서 필요하므로 clientIdclientSecret를 저장합니다.

직원 ID 제휴를 사용하도록 IAP 사용 설정

콘솔

  1. Google Cloud 콘솔에서 IAP 페이지를 엽니다.
    IAP 페이지로 이동
  2. 프로젝트를 선택합니다. 프로젝트는 이전에 만든 직원 풀과 동일한 조직에 있어야 합니다. 프로젝트는 OAuth 클라이언트 ID와 보안 비밀번호를 만든 프로젝트가 아니어도 됩니다.
  3. 애플리케이션 탭을 클릭한 후 IAP 사용을 제한하려는 애플리케이션을 찾습니다.
  4. IAP 열에서 스위치를 사용으로 전환합니다.

gcloud

gcloud CLI를 사용하여 IAP를 사용 설정하려면 해당 서비스의 절차를 따릅니다.

API

  1. settings.json 파일을 만듭니다.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. App Engine에서 IAP를 사용 설정합니다.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap.enabled"
    

    Compute Engine에서 IAP를 사용 설정하려면 https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled URL을 사용하세요.

IAP 설정 업데이트

직원 ID 제휴를 사용하도록 IAP를 구성하려면 다음 설정을 구성해야 합니다.

  • WorkforceIdentitySettings: 앞에서 만든 OAuth 클라이언트 ID 및 보안 비밀
  • IdentitySources: ID 소스

자세한 내용은 IAP API를 참조하세요.

gcloud

  1. 다음 예시를 참조로 사용하여 iap_settings.yaml 파일을 만듭니다.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.yaml
    access_settings:
      identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"]
      workforce_identity_settings:
        workforce_pools: ["$WORKFORCE_POOL_NAME"]
        oauth2:
          client_id: "$CLIENT_ID"
          client_secret: "$CLIENT_SECRET"
    EOF
    
  2. 다음 명령어를 실행하여 리소스의 IAP 설정을 업데이트합니다.

    gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE
    

    다음을 바꿉니다.

    • PROJECT: 프로젝트 ID
    • RESOURCE_TYPE: IAP 리소스 유형. 리소스 유형은 app-engine, iap_web, compute, organization, folder여야 합니다.
    • SERVICE: 서비스 이름. 이는 app-enginecompute 둘 다 선택사항입니다.

    명령어에 대한 자세한 내용은 gcloud iap settings set을 참조하세요.

API

  1. 다음 예시를 참조로 사용하여 iap_settings.json 설정 파일을 만듭니다.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.json
    {
       "access_settings": {
         "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"],
         "workforce_identity_settings": {
           "workforce_pools": ["$WORKFORCE_POOL_NAME"],
           "oauth2": {
             "client_id": "$CLIENT_ID",
             "client_secret": "$CLIENT_SECRET",
           }
        }
      }
    }
    EOF
    
  2. gcloud CLI를 사용하여 리소스 이름을 가져온 후 출력에서 RESOURCE_NAME를 복사합니다. 다음 단계에 필요합니다.

    gcloud iap settings get \
        --project=PROJECT \
        --resource-type=RESOURCE_TYPE \
        --service=SERVICE
    

    다음을 바꿉니다.

    • PROJECT: 프로젝트 ID
    • RESOURCE_TYPE: IAP 리소스 유형. 리소스 유형은 app-engine, iap_web, compute, organization, folder여야 합니다.
    • SERVICE: 서비스 이름. 이는 app-enginecompute 둘 다 선택사항입니다.
  3. 다음 명령어의 RESOURCE_NAME을 이전 단계의 RESOURCE_NAME으로 바꿉니다.

    curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d @iap_settings.json \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
    

IAP 보안 리소스에 대한 액세스 권한 부여

IAP 보안 리소스에 액세스하려면 최종 사용자에게 해당 리소스에 대해 IAP 보안 웹 앱 사용자 역할이 있어야 합니다. 단일 사용자(주 구성원) 또는 사용자 집합(그룹, 특정한 속성, 또는 전체 사용자 풀에 매핑되는 주 구성원 집합)에 IAP 보안 웹 앱 사용자 역할을 부여할 수 있습니다.

IAP 보안 리소스에 대한 무제한 액세스는 지원되지 않습니다.

콘솔

  1. Google Cloud 콘솔에서 IAP 페이지를 엽니다.
    IAP 페이지로 이동
  2. IAP로 보호하려는 리소스를 선택합니다.
  3. 주 구성원 추가를 클릭한 다음 리소스에 대해 IAM 역할을 부여하려는 그룹 또는 개인의 주 구성원 식별자를 추가합니다.
  4. 역할 할당에서 IAP 보안 웹 앱 사용자를 선택합니다.
  5. 추가를 클릭합니다.

gcloud

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

gcloud iap web add-iam-policy-binding \
    --member=PRINCIPAL_IDENTIFIER \
    --role='roles/iap.httpsResourceAccessor' \
    --project=PROJECT_ID \
    --resource-type=RESOURCE_TYPE \
    --service=SERVICE \
    --condition=CONDITION

다음을 바꿉니다.

  • PRINCIPAL_IDENTIFIER: 주 구성원 식별자
  • PROJECT_ID: 프로젝트 ID
  • RESOURCE_TYPE: IAP 리소스 유형. app-engine 또는 backend-services일 수 있습니다.
  • SERVICE: 서비스 이름. resource-typeapp-engine인 경우 선택사항입니다.
  • CONDITION: (선택사항) IAM 조건. 다음은 액세스 수준으로 구성된 조건의 예시입니다.
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access in weekdays

API

이 메서드는 리소스의 전체 IAM 정책에 영향을 주므로 권장되지 않습니다. 오류가 발생하면 리소스에서 정책이 삭제될 수 있습니다.

  1. 기존 IAM 정책 바인딩을 가져옵니다.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d {} \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.json
    

    RESOURCE_NAME이전 단계에서 가져온 RESOURCE_NAME으로 바꿉니다.

  2. 이전 단계에서 가져온 iam_policy_bindings.json 파일에 대해 버전 및 etag 줄을 삭제하고 주 구성원 식별자에 추가할 바인딩을 추가합니다. 자세한 내용은 허용 정책 이해를 참조하세요.

    {
      "bindings": [
        {
          // existing bindings
        },
        {
          "role": "roles/iap.httpsResourceAccessor",
          "members": [
          "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject"
          ],
          "condition": {
            "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels",
            "title": "iap-test-access-level",
            "description": "only access in week days"
          }
        }
      ]
    }
    
  3. IAM 정책 바인딩을 업데이트합니다.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d "{"policy":$(cat iam_policy_bindings.json)}" \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"
    

    RESOURCE_NAME이전 단계에서 가져온 RESOURCE_NAME으로 바꿉니다.

자세한 내용은 GetIamPolicySetIamPolicy를 참조하세요.

(선택사항) 컨텍스트 인식 액세스 설정하기

원하는 경우 고급 승인을 위한 컨텍스트 인식 액세스 규칙을 설정할 수 있습니다.

액세스 수준을 설정하려면 액세스 수준 만들기 및 적용을 참조하세요. 직원 ID 제휴를 사용할 때는 기기 정보를 기반으로 하는 액세스 수준을 사용할 수 없습니다. IP 주소, 시간, 날짜에 대한 조건이 있는 요청 컨텍스트 기반 액세스 수준은 계속 사용할 수 있습니다.

직원 풀 작업 시 제한사항

  • IAP는 직원 풀 하나만 지원하며 직원 풀에는 공급업체가 하나만 포함될 수 있습니다.
  • 직원 풀, OAuth 클라이언트 ID 및 보안 비밀, IAP 지원 애플리케이션이 모두 동일한 조직에 있어야 합니다.
  • 기기 관련 정보에 대한 액세스 수준은 지원되지 않습니다.
  • 다음 IAP 설정 구성만 지원됩니다.
  • 직원 ID 제휴를 사용한 프로그래매틱 액세스는 지원되지 않습니다.