Okta에서 SCIM 구성

이 문서에서는 직원 ID 풀에서 SCIM 테넌트를 구성하는 방법을 설명합니다. SCIM에 대해 자세히 알아보려면 직원 ID 제휴를 위한 SCIM 프로비저닝을 참고하세요.

각 직원 ID 풀은 하나의 SCIM 테넌트만 지원합니다. 이미 SCIM 테넌트가 있는 풀에서 새 SCIM 테넌트를 구성하려면 먼저 기존 테넌트를 하드 삭제해야 합니다.

SCIM 테넌트의 --claim-mapping 플래그에는 특정 Common Expression Language(CEL) 표현식만 포함될 수 있습니다. 지원되는 표현식을 알아보려면 토큰 및 SCIM 속성 매핑을 참조하세요.

도메인 간 ID 관리 시스템 (SCIM)을 구성하려면 다음을 수행하세요.
  1. Google Cloud에서 SCIM 테넌트 및 토큰 구성
  2. Okta에서 SCIM 구성
  3. SCIM을 사용 설정하도록 공급업체 업데이트
  4. SCIM 동기화 확인

Google Cloud에서 SCIM 테넌트 및 토큰 구성

Google Cloud에서 SCIM 테넌트를 구성하려면 다음을 수행합니다.

  1. SCIM 테넌트를 만듭니다.

        gcloud iam workforce-pools providers scim-tenants create SCIM_TENANT_ID \
            --workforce-pool="WORKFORCE_POOL_ID" \
            --provider="PROVIDER_ID" \
            --display-name="SCIM_TENANT_DISPLAY_NAME" \
            --description="SCIM_TENANT_DESCRIPTION" \
            --claim-mapping="CLAIM_MAPPING" \
            --location="global"
        

    다음을 바꿉니다.

    • SCIM_TENANT_ID: SCIM 테넌트의 ID입니다.
    • WORKFORCE_POOL_ID: 이 문서 앞부분에서 만든 직원 풀의 ID입니다.
    • PROVIDER_ID: 이 문서 앞부분에서 만든 직원 ID 풀 공급업체의 ID입니다.
    • SCIM_TENANT_DISPLAY_NAME: SCIM 테넌트의 표시 이름입니다.
    • SCIM_TENANT_DESCRIPTION: SCIM 테넌트에 대한 설명입니다.
    • CLAIM_MAPPING: 속성 매핑의 쉼표로 구분된 목록입니다. 매핑 속성의 확장 목록은 토큰 및 SCIM 속성 매핑을 참고하세요. Gemini Enterprise에는 다음 매핑이 권장됩니다.
      google.subject=user.emails[0].value.lowerAscii(),google.group=group.displayName

      SCIM 테넌트에서 매핑하는 google.subject 속성은 --attribute-mapping 플래그를 사용하여 직원 ID 풀 프로바이더의 google.subject 속성에 매핑된 동일한 ID를 고유하게 참조해야 합니다. SCIM 테넌트가 생성된 후에는 클레임 매핑을 업데이트할 수 없습니다. 이를 대체하려면 SCIM 테넌트를 하드 삭제하고 즉시 새 테넌트를 만들면 됩니다. SCIM 사용 시 고려사항에 대해 자세히 알아보려면 SCIM 지원을 참고하세요.

  2. 명령어가 완료되면 다음을 수행합니다.

    1. 출력의 baseUri 필드에 https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID 형식으로 지정된 전체 URI를 저장합니다. 이 URI를 IdP에 제공해야 합니다.
    2. 또한 URI에서 SCIM_TENANT_UID만 저장합니다. 이 UID는 이 문서 뒷부분에서 IAM 허용 정책을 SCIM 테넌트에 설정하는 데 필요합니다.
  3. SCIM 토큰을 만듭니다.

        gcloud iam workforce-pools providers scim-tenants tokens create SCIM_TOKEN_ID \
            --display-name DISPLAY_NAME \
            --scim-tenant SCIM_TENANT_ID \
            --workforce-pool WORKFORCE_POOL_ID \
            --provider PROVIDER_ID \
            --location global
        

    다음을 바꿉니다.

    • SCIM_TOKEN_ID: SCIM 토큰 ID입니다.
    • DISPLAY_NAME: SCIM 토큰의 표시 이름입니다.
    • WORKFORCE_POOL_ID: 직원 풀의 ID입니다.
    • SCIM_TENANT_ID: SCIM 테넌트의 ID입니다.
    • PROVIDER_ID: 직원 ID 풀 공급업체의 ID입니다.
  4. gcloud iam workforce-pools providers scim-tenants tokens create 명령어가 완료되면 다음을 수행합니다.

    1. 출력에서 SCIM_TOKEN 값을 securityToken 필드에 저장합니다. 이 보안 토큰을 IdP에 제공해야 합니다. 보안 토큰은 이 출력에만 표시되며 분실한 경우 새 SCIM 토큰을 만들어야 합니다.

    2. 조직 정책에서 SCIM_TOKEN을 거부했는지 확인하려면 다음 명령어를 실행합니다.

      curl -v -H "Authorization: Bearer SCIM_TOKEN"  https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users

      권한 관련 오류가 표시되면서 명령어가 실패하면 이후 단계에 설명된 gcloud organizations add-iam-policy-binding을 실행합니다. 명령어가 성공하면 이 단계를 건너뛸 수 있습니다.

  5. SCIM 테넌트 및 토큰에 IAM 허용 정책을 설정합니다. 권한 관련 오류가 표시되면서 이전 단계의 curl 명령어가 실패하면 다음 명령어를 실행해야 합니다.

        gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
            --member=serviceAccount:SERVICE_AGENT_EMAIL \
            --role roles/iam.scimSyncer
        

    다음을 바꿉니다.

    • ORGANIZATION_ID: 조직의 ID입니다.
    • SERVICE_AGENT_EMAIL: 서비스 에이전트의 이메일 주소입니다. 이메일 주소는 o-ORGANIZATION_ID-SCIM_TENANT_UID@gcp-sa-iamscim.iam.gserviceaccount.com 형식입니다. SCIM 테넌트를 만들면 SCIM_TENANT_UID가 반환됩니다.

IdP에서 그룹을 프로비저닝할 때 displayName 필드에 제공된 각 그룹의 표시 이름이 SCIM 테넌트 내에서 고유해야 합니다. Microsoft Entra ID의 그룹 및 SCIM을 자세히 알아보려면 그룹을 참조하세요.

Okta에서 SCIM 구성

기존 Okta 애플리케이션에서 Okta의 SCIM을 구성하려면 다음을 수행합니다.

  1. Okta 관리 콘솔에 로그인합니다.
  2. 애플리케이션 > 애플리케이션으로 이동합니다.
  3. 애플리케이션을 선택하거나 만듭니다.

    • 기존 애플리케이션을 선택하려면 다음을 수행합니다.

      1. Google Cloud 직원 ID 제휴 템플릿을 사용하여 만든 애플리케이션의 이름을 클릭합니다.
      2. 일반 탭에서 다음을 수행합니다.

        1. 앱 설정 창에서 수정을 클릭합니다.
        2. 테넌트 필드에 gcloud CLI에서 가져온 테넌트 ID를 입력합니다.
        3. 완료를 클릭합니다.
    • 새 애플리케이션을 만들려면 다음 단계를 따르세요.

      1. 앱 카탈로그 둘러보기를 클릭합니다.
      2. 검색 필드에 Google Cloud 직원 ID 제휴를 입력한 다음 검색 결과에서 Google Cloud 직원 ID 제휴 통합을 선택합니다.
      3. 통합 추가를 클릭합니다.

        1. 애플리케이션 필드에 앱 이름을 입력합니다.
        2. 테넌트 필드에 gcloud CLI에서 가져온 테넌트 ID를 입력합니다.
        3. 완료를 클릭합니다.
  4. 프로비저닝 탭에서 다음을 수행합니다.

    1. 통합 창에서 수정을 클릭합니다.

      1. API 토큰 필드에 Google Cloud에서 가져온 SCIM 토큰을 입력합니다.
      2. API 토큰의 유효성을 확인하려면 사용자 인증 정보 테스트를 클릭합니다.
      3. 그룹 가져오기를 선택합니다.
      4. 저장을 클릭합니다.
    2. 창에서 수정을 클릭합니다.

      1. 사용자 만들기, 사용자 속성 업데이트, 사용자 비활성화를 선택합니다.
      2. 저장을 클릭합니다.

SCIM을 사용 설정하도록 공급업체 업데이트

공급업체에 SCIM을 사용 설정하려면 다음 단계를 따르세요.

OIDC

      gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

다음을 바꿉니다.

  • PROVIDER_ID: 직원 ID 풀 공급업체의 ID입니다.
  • WORKFORCE_POOL_ID: 직원 풀의 ID입니다.
  • LOCATION: 직원 풀의 위치입니다.

SAML

      gcloud iam workforce-pools providers update-saml PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

다음을 바꿉니다.

  • PROVIDER_ID: 직원 ID 풀 공급업체의 ID입니다.
  • WORKFORCE_POOL_ID: 직원 풀의 ID입니다.
  • LOCATION: 직원 풀의 위치입니다.

SCIM 동기화를 확인하려면 SCIM 동기화 확인을 참고하세요.

토큰 및 SCIM 속성 매핑

직원 ID 풀 프로바이더와 프로바이더에 대해 구성된 SCIM 테넌트 모두에서 속성을 일관되게 매핑해야 합니다. 직원 ID 풀 프로바이더의 경우 --attribute-mapping 플래그를 사용하고 SCIM 테넌트의 경우 --claim-mapping 플래그를 사용합니다. 사용자의 google.subject에 매핑된 IdP 속성은 토큰에 정의되었는지 SCIM 매핑에 정의되었는지에 관계없이 동일한 ID를 고유하게 참조해야 합니다. SCIM을 사용할 때 속성을 매핑하는 방법을 자세히 알아보려면 SCIM 지원 섹션을 참조하세요. 다음 표에는 토큰 클레임의 속성과 SCIM 속성을 매핑하는 방법이 나와 있습니다.

Google 속성 직원 ID 풀 공급업체 매핑 SCIM 테넌트 매핑
google.subject assertion.sub user.externalId
google.subject assertion.subject user.userName
google.subject assertion.subject.lowerAscii() user.userName.lowerAscii()
google.subject assertion.preferred_username user.userName
google.subject assertion.preferred_username.lowerAscii() user.userName.lowerAscii()
google.subject assertion.email user.emails[0].value
google.subject assertion.email.lowerAscii() user.emails[0].value.lowerAscii()
google.group: 공급업체를 --scim-usage=enabled-for-groups로 업데이트하도록 지원 N/A group.displayName

SCIM 동기화 확인

SCIM을 구성한 후 curl를 사용하여 사용자와 그룹이 Google Cloud에 올바르게 동기화되는지 확인할 수 있습니다. 이러한 명령어를 사용하려면 유효한 SCIM 토큰과 SCIM 테넌트 ID가 필요합니다.

사용자 동기화 확인

사용자가 올바르게 동기화되었는지 확인하려면 다음 필터를 사용하여 사용자의 userName을 검색합니다.

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users?filter=userName%20eq%20%22USER_NAME%22"

응답 예:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "USER_ID",
      "userName": "USER_NAME",
      ...
    }
  ]
}

그룹 동기화 확인

그룹이 올바르게 동기화되었는지 확인하려면 다음 필터를 사용하여 그룹의 displayName을 검색하세요.

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=displayName%20eq%20%22GROUP_NAME%22"

응답 예:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

그룹 멤버십 확인

특정 사용자가 그룹의 구성원인지 확인하려면 그룹 ID와 사용자 ID를 모두 지정하는 필터를 사용하세요.

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=id%20eq%20%22GROUP_ID%22%20and%20members%20eq%20%22USER_ID%22"

사용자가 회원인 경우의 응답 예시:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

사용자가 회원이 아닌 경우의 응답 예시:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 0,
  "Resources": []
}

참고: GROUP_IDUSER_ID을 가져오려면 먼저 displayNameuserName 필터를 사용하여 그룹과 사용자를 찾으세요. ID는 응답의 id 필드에 반환됩니다. SCIM_TOKEN, SCIM_TENANT_UID, USER_NAME, GROUP_NAME, GROUP_ID, USER_ID을 실제 값으로 바꿉니다.

SCIM 테넌트 강제 삭제

SCIM 테넌트를 강제 삭제하려면 다음 단계를 따르세요.

  1. 제공업체에 --scim-usage=enabled-for-groups가 설정된 경우 제공업체 구성에서 사용 중지합니다.
              gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
                  --workforce-pool=WORKFORCE_POOL_ID \
                  --location=LOCATION \
                  --scim-usage=SCIM_USAGE_UNSPECIFIED
            

    다음을 바꿉니다.

    • PROVIDER_ID: 직원 ID 풀 공급업체의 ID입니다.
    • WORKFORCE_POOL_ID: 직원 풀의 ID입니다.
    • LOCATION: 직원 풀의 위치입니다.

  2. SCIM 테넌트를 삭제합니다.
      gcloud iam workforce-pools providers scim-tenants delete SCIM_TENANT_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --provider=PROVIDER_ID \
          --hard-delete \
          --location=global
    

    다음을 바꿉니다.

    • SCIM_TENANT_ID: 삭제할 SCIM 테넌트의 ID입니다.
    • WORKFORCE_POOL_ID: 직원 풀의 ID입니다.
    • PROVIDER_ID: 직원 ID 풀 공급업체의 ID입니다.
    SCIM 테넌트 삭제를 비롯해 SCIM에 대해 자세히 알아보려면 SCIM 지원을 참조하세요.

다음 단계