PingOne AIC로 직원 ID 제휴 구성

이 문서에서는 PingOne Advanced Identity Cloud (AIC)를 ID 공급업체 (IdP)로 사용하여 직원 ID 제휴를 구성하고Google Cloud액세스를 관리하는 방법을 보여줍니다. PingOne AIC IdP를 구성하면 제휴 사용자가 SAML 2.0 프로토콜을 사용하여 직원 ID 제휴를 지원하는 Google Cloud 서비스에 액세스할 수 있습니다.

시작하기 전에

  1. Google Cloud 조직을 설정해야 합니다.
  2. Google Cloud CLI를 설치합니다. 설치 후 다음 명령어를 실행하여 Google Cloud CLI를 초기화합니다.

    gcloud init

    외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  3. 호스팅된 IdP 만들기

    1. 네이티브 콘솔 > 액세스 관리에서 영역 > REALM_NAME > 대시보드로 이동하여 SAML 애플리케이션을 클릭합니다.
    2. 엔티티 제공업체 추가 > 호스팅됨을 클릭합니다.
    3. 엔티티 ID를 입력합니다. 나중에 사용할 수 있도록 이 값을 기록해 둡니다.

      1. 항목 프로바이더 기준 URL 값이 올바른지 확인합니다. Advanced Identity Cloud는 모든 SAML 2.0 관련 엔드포인트에 이 값을 사용합니다.
      2. Meta Aliases 섹션의 Identity Provider Meta Alias 속성에 URL 친화적인 값을 제공합니다. 이 별칭은 신뢰 서클에서 고유해야 합니다.
      3. 만들기를 클릭합니다.
      4. 어설션 처리 탭의 속성 매퍼 섹션에서 SAML 속성 이름을 로컬 속성 이름에 매핑합니다. SAML 속성 이름은 어설션에 사용되는 이름입니다.
      5. 각 매핑에 대해 추가 또는 업데이트를 클릭합니다.
      6. 변경사항 저장을 클릭합니다.

    속성 사용

    이 섹션에서는 SAML 어설션의 속성을 사용하는 방법을 설명합니다.

    다음 예에서는 SAML 어설션의 속성이 로컬 속성에 매핑됩니다.

    SAML 속성 지역 속성
    IDPEmail mail
    FirstName givenName
    groups groups

    속성 매핑 섹션에서 필수 속성을 설정합니다. 이 가이드 뒷부분에서 직원 ID 풀 제공업체를 만들 때 이러한 속성을 매핑합니다.

    프로바이더 메타데이터 내보내기

    다음 방법 중 하나로 호스팅된 제공업체의 SAML 2.0 메타데이터에 액세스할 수 있습니다.

    • REST를 통해

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

      curl --output METADATA_XML \
          "https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM"
      
    • 브라우저에서

      브라우저에서 테넌트 환경의 메타데이터 URL을 열어 XML 파일을 다운로드합니다. https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM

    1. XML 파일을 로컬 머신에 저장합니다.

    Google을 원격 SP로 가져오기

    1. Google Cloud SP 메타데이터 XML을 준비합니다. 다음 템플릿을 사용하여 자리표시자 값을 바꿉니다.

      <?xml version="1.0" encoding="UTF-8"?>
      <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID">
         <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
            <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
            <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
            <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID" index="0" isDefault="true"/>
         </md:SPSSODescriptor>
      </md:EntityDescriptor>
      
    2. 다음 방법 중 하나로 메타데이터를 가져옵니다.

      • 콘솔에서

        1. PingOne AIC 관리 콘솔에서 SAML 애플리케이션으로 이동합니다.
        2. 엔티티 제공업체 추가 > 원격을 클릭합니다.
        3. 방금 만든 Google Cloud SP 메타데이터 XML 파일을 업로드합니다.
        4. 만들기를 클릭합니다.
      • REST를 통해

        1. XML 메타데이터를 base64url로 인코딩된 문자열로 변환합니다.
        2. 액세스 토큰 가져오기
        3. 다음 명령어를 실행합니다.

          curl --request POST \
              --header 'authorization: Bearer ACCESS_TOKEN' \
              --header 'Content-Type: application/json' \
              --header 'Accept-API-Version: resource=1.0' \
              --data-raw '{"standardMetadata": "BASE64URL_ENCODED_METADATA"}' \
              'https://TENANT_ENV_FQDN/am/json/realms/root/realms/alpha/realm-config/saml2/remote?_action=importEntity'
          

    신뢰 서클 (CoT) 만들기

    1. 렐름 > REALM_NAME > 애플리케이션 > 제휴 > 신뢰 서클로 이동합니다.
    2. 신뢰 서클 추가를 클릭합니다.
    3. 이름을 입력하고 만들기를 클릭합니다.
    4. 신뢰 원 페이지의 엔티티 제공업체 속성에서 호스팅된 IdP와 Google Cloud 원격 SP를 선택합니다.
    5. 변경사항 저장을 클릭합니다.

    PingOne AIC 직원 ID 풀 공급업체 만들기

    이 섹션에서는 IdP 사용자가 Google Cloud에 액세스할 수 있도록 직원 ID 풀 공급업체를 만드는 방법을 설명합니다. 공급업체가 SAML 프로토콜을 사용하도록 구성할 수 있습니다.

    SAML 직원 ID 풀 제공업체 만들기

    1. SAML 직원 ID 풀 제공업체를 만들려면 ID 공급업체 메타데이터에 SAML 엔티티 ID, 싱글 사인온(SSO) URL, 서명 공개 키가 하나 이상 포함되어 있는지 확인해야 합니다. 이를 위해 다음 단계를 따르세요.

      gcloud

      1. PingOne AIC 앱의 SAML 메타데이터를 저장합니다.

      2. SAML 직원 ID 풀 공급업체를 만들려면 다음 명령어를 실행합니다.

        gcloud iam workforce-pools providers create-saml WORKFORCE_PROVIDER_ID \
            --workforce-pool="WORKFORCE_POOL_ID" \
            --display-name="DISPLAY_NAME" \
            --description="DESCRIPTION" \
            --idp-metadata-path="XML_METADATA_PATH" \
            --attribute-mapping="ATTRIBUTE_MAPPING" \
            --attribute-condition="ATTRIBUTE_CONDITION" \
            --location=global
        

        다음을 바꿉니다.

        • WORKFORCE_PROVIDER_ID: 프로바이더 ID입니다.
        • WORKFORCE_POOL_ID: 직원 ID 풀 ID
        • DISPLAY_NAME: 표시 이름
        • DESCRIPTION: 설명
        • XML_METADATA_PATH: PingOne AIC에서 내보낸 XML 형식 메타데이터 파일의 경로
        • ATTRIBUTE_MAPPING: 속성 매핑(예: google.subject=assertion.subject,google.groups=assertion.attributes.groups,attribute.department=assertion.attributes.department[0])
        • ATTRIBUTE_CONDITION: 속성 조건(선택사항). 예를 들어 ipaddr 속성을 특정 IP 범위로 제한하려면 assertion.ipaddr.startsWith('98.11.12.') 조건을 설정합니다.

        자세한 내용은 속성 매핑을 참조하세요.

        이 명령어는 SAML 어설션의 subject, groups, department를 각각 google.subject, google.groups, attribute.department 속성에 할당합니다. 또한 속성 조건을 사용하면 특정 IP 범위 내의 사용자만 이 직원 프로바이더를 사용하여 로그인할 수 있습니다.

      콘솔

      Google Cloud 콘솔을 사용하여 SAML 프로바이더를 구성하려면 다음을 수행합니다.

      1. Google Cloud 콘솔에서 직원 ID 풀 페이지로 이동합니다. 직원 ID 풀로 이동
      2. 직원 ID 풀 표에서 프로바이더를 만들 풀을 선택합니다.
      3. 공급업체 섹션에서 공급업체 추가를 클릭합니다.
      4. 공급업체 선택 목록에서 일반 ID 공급업체를 선택합니다.
      5. 인증 프로토콜 선택에서 SAML을 선택합니다.
      6. 공급업체 만들기 섹션에서 다음을 수행합니다.
        1. 이름에 공급업체 이름을 입력합니다.
        2. 선택사항: 설명에 공급업체에 대한 설명을 입력합니다.
        3. IDP 메타데이터 파일 (XML)에서 PingOne AIC에서 내보낸 메타데이터 XML 파일을 선택합니다.
        4. 사용 설정된 공급업체를 사용 설정합니다.
        5. 계속을 클릭합니다.
      7. 공급업체 정보 공유 섹션에서 계속을 클릭합니다.
      8. 프로바이더 구성 섹션에서 다음을 수행합니다.

        1. 속성 매핑에서 google.subject의 CEL 표현식을 입력합니다 (예: assertion.subject).
        2. 선택사항: 다른 매핑을 입력하려면 매핑 추가를 클릭하고 다른 매핑을 입력합니다. 예를 들면 다음과 같습니다.

          google.subject=assertion.subject,
          google.groups=assertion.attributes['https://example.com/aliases'],
          attribute.costcenter=assertion.attributes.costcenter[0]
          
        3. 선택사항: 속성 조건을 추가하려면 조건 추가를 클릭하고 속성 조건을 나타내는 CEL 표현식을 입력합니다. 예를 들어 ipaddr 속성을 특정 IP 범위로 제한하려면 assertion.attributes.ipaddr.startsWith('98.11.12.') 조건을 설정합니다. 이 예시의 조건은 IP 주소가 98.11.12.로 시작하는 사용자만 이 직원 공급업체를 사용하여 로그인할 수 있도록 합니다.

      9. 상세 감사 로깅을 사용 설정하려면 상세 로깅에서 속성 값 감사 로깅 사용 설정 전환 버튼을 클릭합니다.

      10. 제공업체를 만들려면 제출을 클릭합니다.

    Google Cloud 리소스에 대한 액세스 관리

    이 섹션에서는 PingOne AIC 사용자의 Google Cloud 리소스에 대한 액세스 권한을 관리하는 방법을 보여줍니다.

    이 가이드에 사용된 샘플 프로젝트는 직원 ID 제휴를 설정하는 데 사용한 프로젝트와 다를 수 있습니다.

    단일 ID, ID 그룹 또는 전체 풀의 역할을 관리할 수 있습니다. 자세한 내용은 IAM 정책에서 직원 ID 풀 사용자 표현을 참조하세요.

    매핑된 부서 속성 사용

    TEST_PROJECT_ID 프로젝트의 특정 부문 내의 모든 ID에 스토리지 관리자 역할 (roles/storage.admin)을 부여하려면 다음 명령어를 실행합니다.

    gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
        --role="roles/storage.admin" \
        --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.department/DEPARTMENT_VALUE"
    

    다음을 바꿉니다.

    • TEST_PROJECT_ID: 프로젝트 ID입니다.
    • WORKFORCE_POOL_ID: 직원 ID 풀 ID
    • DEPARTMENT_VALUE: 매핑된 attribute.department 값입니다.

    매핑된 그룹 사용

    TEST_PROJECT_ID 프로젝트의 GROUP_ID 그룹 내 모든 ID에 스토리지 관리자 역할 (roles/storage.admin)을 부여하려면 다음 명령어를 실행합니다.

    gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
        --role="roles/storage.admin" \
        --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    다음을 바꿉니다.

    • TEST_PROJECT_ID: 프로젝트 ID입니다.
    • WORKFORCE_POOL_ID: 직원 ID 풀 ID
    • GROUP_ID: 매핑된 google.groups 클레임의 그룹

    로그인 및 액세스 테스트

    이 섹션에서는 직원 ID 풀 사용자로 로그인하여 액세스 권한을 테스트합니다.

    로그인

    콘솔(제휴) 로그인

    콘솔(제휴)이라고도 알려진 Google Cloud 직원 ID 제휴 콘솔에 로그인하려면 다음을 수행합니다.

    1. 콘솔(제휴) 로그인 페이지로 이동합니다.

      콘솔(제휴)로 이동

    2. 다음과 같은 형식의 공급업체 이름을 입력합니다.
      locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
    3. 메시지가 표시되면 PingOne AIC 사용자 인증 정보를 입력합니다.

    Google Cloud CLI 브라우저 기반 로그인

    브라우저 기반 로그인 과정을 사용하여 gcloud CLI에 로그인하려면 다음을 수행하세요.

    로그인 구성 파일을 만들려면 다음 명령어를 실행합니다. 선택적으로 --activate 플래그를 추가하여 gcloud CLI에 대한 기본값으로 파일을 활성화할 수 있습니다. 그러면 구성 파일 경로를 매번 지정하지 않고도 gcloud auth login을 실행할 수 있습니다.

    gcloud iam workforce-pools create-login-config \
        locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID \
        --output-file=LOGIN_CONFIG_FILE_PATH

    다음을 바꿉니다.

    • WORKFORCE_POOL_ID: 직원 풀 ID입니다.
    • PROVIDER_ID: 공급업체 ID
    • LOGIN_CONFIG_FILE_PATH: 지정하는 구성 파일의 경로입니다(예: login.json).

    파일에는 브라우저 기반 인증 흐름을 사용 설정하고 잠재고객을 직원 ID 풀 공급업체에 구성된 IdP로 설정하도록 gcloud CLI에서 사용된 엔드포인트가 포함됩니다. 이 파일에는 기밀 정보가 포함되지 않습니다.

    결과는 다음과 유사합니다.

    {
      "type": "external_account_authorized_user_login_config",
      "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
      "auth_url": "https://auth.cloud.google/authorize",
      "token_url": "https://sts.googleapis.com/v1/oauthtoken",
      "token_info_url": "https://sts.googleapis.com/v1/introspect"
    }

    gcloud auth login에서 이 구성 파일을 자동으로 사용하지 않게 하려면 gcloud config unset auth/login_config_file을 실행하여 설정 해제하면 됩니다.

    브라우저 기반 로그인 인증을 사용하여 인증하려면 다음 방법 중 하나를 사용할 수 있습니다.

    • 구성 파일을 만들 때 --activate 플래그를 사용하거나 gcloud config set auth/login_config_file로 구성 파일을 활성화한 경우 gcloud CLI에서 자동으로 구성 파일을 사용합니다.

      gcloud auth login
    • 구성 파일의 위치를 지정하여 로그인하려면 다음 명령어를 실행합니다.

      gcloud auth login --login-config=LOGIN_CONFIG_FILE_PATH
    • 환경 변수를 사용하여 구성 파일의 위치를 지정하려면 CLOUDSDK_AUTH_LOGIN_CONFIG_FILE을 구성 경로로 설정합니다.

    로그인 구성 파일 사용을 중단하려면 다음을 수행합니다.

    • 구성 파일을 만들 때 --activate 플래그를 사용했거나 gcloud config set auth/login_config_file로 구성 파일을 활성화한 경우 다음 명령어를 실행하여 설정을 해제해야 합니다.

      gcloud config unset auth/login_config_file
    • CLOUDSDK_AUTH_LOGIN_CONFIG_FILE 환경 변수가 설정되어 있으면 지웁니다.

    gcloud CLI 헤드리스 로그인

    SAML 프로토콜을 사용하여 gcloud CLI로 PingOne AIC에 로그인하려면 다음을 수행하세요.

    1. PingOne AIC 애플리케이션에 사용자를 로그인하고 SAML 응답을 가져옵니다.
    2. PingOne AIC에서 반환한 SAML 응답을 로컬 머신의 안전한 위치에 저장합니다. 경로를 환경 변수에 저장합니다(예: SAML_ASSERTION_PATH=/tmp/saml_assertion.xml).
    3. 구성 파일을 생성합니다.

      gcloud iam workforce-pools create-cred-config \
          locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
          --subject-token-type=urn:ietf:params:oauth:token-type:saml2 \
          --credential-source-file=SAML_ASSERTION_PATH \
          --workforce-pool-user-project=PROJECT_ID \
          --output-file=config.json
      

      다음을 바꿉니다.

      • SAML_ASSERTION_PATH: SAML 어설션 파일의 경로입니다.
      • PROJECT_ID: 프로젝트 ID입니다.
    4. 생성되는 구성 파일은 다음과 유사합니다.

      {
        "type": "external_account",
        "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID",
        "subject_token_type": "urn:ietf:params:oauth:token-type:saml2",
        "token_url": "https://sts.googleapis.com/v1/token",
        "credential_source": {
          "file": "SAML_ASSERTION_PATH"
        },
        "workforce_pool_user_project": "PROJECT_ID"
      }
      
    5. 토큰 교환을 사용하여 gcloud CLI에 로그인하려면 다음 명령어를 실행합니다.

      gcloud auth login --cred-file=config.json
      

      그러면 gcloud가 PingOne AIC 사용자 인증 정보를 임시 Google Cloud 액세스 토큰으로 투명하게 교환하여 Google Cloud에 다른 gcloud 호출을 수행할 수 있게 됩니다. 출력은 다음과 비슷합니다.

      Authenticated with external account user credentials for: [principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/USER_ID].

    6. 사용자 인증 정보 계정과 활성 계정을 나열하려면 다음 명령어를 실행합니다.

      gcloud auth list
      

    액세스 테스트

    액세스 권한이 부여된 직원 ID 제휴를 지원하는 Google Cloud 서비스에 액세스할 수 있습니다. 이 가이드의 앞부분에서는 TEST_PROJECT_ID 프로젝트의 특정 부서 또는 그룹 내의 모든 ID에 스토리지 관리자 역할을 부여했습니다. Cloud Storage 버킷을 나열하여 액세스 권한이 있는지 테스트할 수 있습니다.

    콘솔(제휴) 로그인

    콘솔 (제휴)에서 액세스 권한을 확인하려면 다음을 수행합니다.

    1. Cloud Storage페이지로 이동
    2. TEST_PROJECT_ID 프로젝트의 기존 버킷 목록이 표시되는지 확인합니다.

    gcloud CLI

    액세스 권한이 있는 프로젝트의 Cloud Storage 버킷 및 객체를 나열하려면 다음 명령어를 실행합니다.

    gcloud alpha storage ls --project="TEST_PROJECT_ID"
    

    주 구성원은 gcloud CLI 세션인 PROJECT_ID에 설정된 프로젝트에 대한 serviceusage.services.use 권한이 있어야 합니다.

    다음 단계