Skip to main content

조직의 ID 및 액세스 관리 문제 해결

조직의 SAML SSO, 팀 동기화 또는 IdP(ID 공급자) 연결을 관리하기 위한 일반적인 문제 해결 오류를 검토하고 해결합니다.

오류: "현재 시간이 NotBefore 조건보다 이전입니다."

이 오류는 IdP 및 일반적으로 자체 호스팅 IdP에서 발생하는 GitHub 간의 시간 차이가 너무 큰 경우에 발생할 수 있습니다.

이 오류가 발생하면 IdP의 시간이 NTP 서버와 올바르게 동기화되었는지 확인합니다.

ADFS를 IdP로 사용하는 경우 GitHub에 대해서도 ADFS에서 NotBeforeSkew를 1분으로 설정합니다. NotBeforeSkew가 0으로 설정된 경우 밀리초를 포함하여 매우 작은 시간 차이라도 인증 문제가 발생할 수 있습니다.

사용자는 인증을 위해 반복적으로 리디렉션됩니다.

사용자가 루프에서 반복적으로 SAML 인증 프롬프트로 리디렉션되는 경우 IdP 설정에서 SAML 세션 기간을 늘려야 할 수 있습니다.

SAML 응답에서 보낸 SessionNotOnOrAfter 값은 사용자가 인증을 위해 IdP로 다시 리디렉션되는 시기를 결정합니다. SAML 세션 기간이 2시간 이하로 구성된 경우 GitHub의 만료 5분 전에 SAML 세션을 새로 고칩니다. 세션 기간이 5분 이하로 구성된 경우 사용자가 SAML 인증 루프에 갇히게 될 수 있습니다.

이 문제를 해결하려면 최소 SAML 세션 기간을 4시간으로 구성하는 것이 좋습니다. 자세한 내용은 SAML 구성 참조을(를) 참조하세요.

일부 사용자가 SCIM에서 프로비전되거나 프로비전 해제되지 않습니다.

사용자에 대한 프로비전 문제가 발생하는 경우 사용자에게 SCIM 메타데이터가 누락되었는지 확인하는 것이 좋습니다.

조직에 SCIM 프로비저닝이 구현된 경우 사용자의 조직 멤버 자격에 대한 변경 내용은 ID 공급자로부터 트리거되어야 합니다. 사용자가 기존 SCIM 통합 대신 수동으로 조직에 초대되는 경우 사용자 계정이 SCIM ID에 제대로 연결되지 않을 수 있습니다. 이렇게 하면 나중에 SCIM을 통해 사용자 계정의 프로비전이 해제되지 않도록 할 수 있습니다. 기존 SCIM 통합 대신 수동으로 사용자를 제거하면 부실 연결 ID가 남게 되어 사용자가 조직에 다시 가입해야 하는 경우에 문제가 발생할 수 있습니다.

조직 구성원에 SCIM 메타데이터가 누락되어 있다면 IdP를 통해 수동으로 사용자에 대한 SCIM을 다시 프로비전할 수 있습니다.

누락된 SCIM 메타데이터에 대한 사용자 감사

사용자가 예상대로 프로비전되거나 프로비전 해제되지 않은 것 같거나 이러함이 확인되었다면, 조직의 모든 사용자를 감사하는 것이 좋습니다.

사용자의 외부 ID에 SCIM ID(SCIM 메타데이터)가 있는지 확인하려면 GitHub에서 한 번에 한 조직 구성원의 SCIM 메타데이터를 검토하거나 GitHub API를 사용하여 모든 조직 구성원을 프로그래밍 방식으로 확인하면 됩니다.

IdP가 GitHub SCIM API에 프로비저닝 호출을 보낼 때 해당 API 호출의 SCIM userName은 조직에서 사용자의 연결된 SAML ID에 저장된 SAML nameID와 일치해야 합니다. 이 두 값이 일치하지 않으면 SCIM 메타데이터가 채워지지 않고 SCIM ID가 성공적으로 연결되지 않습니다. 이들 값이 일치하는지 여부를 확인하려면 GitHub API를 사용합니다.

GitHub에서 조직 구성원 감사

단일 조직 구성원의 SCIM 메타데이터가 있는지 확인하기 위해 조직 소유자는 이 URL을 방문하여 <organization><username>으로 바꿔야 합니다.

https://github.com/orgs/<organization>/people/<username>/sso

사용자의 외부 ID에 SCIM 메타데이터가 포함된 경우 조직 소유자는 관련 페이지에 SCIM ID 섹션을 표시해야 합니다. 외부 ID에 SCIM 메타데이터가 포함되어 있지 않다면 SCIM ID 섹션은 존재하지 않습니다.

GitHub API를 통한 조직 구성원 감사

조직 소유자는 SCIM REST API 또는 GraphQL을 쿼리하여 조직의 모든 SCIM 프로비전된 ID를 나열할 수도 있습니다.

REST API 사용

SCIM REST API는 외부 ID에 SCIM 메타데이터가 채워진 사용자에 대해서만 데이터를 반환합니다. SCIM 프로비전된 ID 목록을 모든 조직 구성원 목록과 비교하면 도움이 됩니다.

자세한 내용은 다음을 참조하세요.

GraphQL 사용

이 GraphQL 쿼리는 조직의 각 사용자에 대한 SAML NameId, SCIM UserName 및 GitHub 사용자 이름(login)을 보여 줍니다. 이 쿼리를 사용하려면 ORG를 조직 이름으로 바꿉니다.

{
  organization(login: "ORG") {
    samlIdentityProvider {
      ssoUrl
      externalIdentities(first: 100) {
        edges {
          node {
            samlIdentity {
              nameId
            }
            scimIdentity {
              username
            }
            user {
              login
            }
          }
        }
      }
    }
  }
}
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" -d '{ "query": "{ organization(login: \"ORG\") { samlIdentityProvider { externalIdentities(first: 100) { pageInfo { endCursor startCursor hasNextPage } edges { cursor node { samlIdentity { nameId } scimIdentity {username} user { login } } } } } } }" }' https://api.github.com/graphql

GraphQL API 사용에 대한 자세한 내용은 다음을 참조하세요.

ID 공급자를 통해 사용자를 위한 SCIM 다시 프로비전

IdP를 통해 수동으로 사용자를 위한 SCIM을 다시 프로비전할 수 있습니다. 예를 들어 OKTA에 대한 프로비전 오류를 해결하려면 OKTA 관리 포털에서 사용자의 할당을 취소하고 GitHub 앱에 다시 할당하면 됩니다. 이렇게 하면 OKTA가 트리거되어 GitHub에서 이러한 사용자의 SCIM 메타데이터를 채우는 API 호출이 수행됩니다. 자세한 내용은 OKTA 설명서에서 애플리케이션에서 사용자 할당 취소 또는 애플리케이션에 사용자 할당을 참조하세요.

사용자의 SCIM ID가 생성되었는지 확인하려면 SCIM 외부 ID가 없음이 확인된 단일 조직 구성원을 이용해 이 프로세스를 테스트하는 것이 좋습니다. IdP에서 사용자를 수동으로 업데이트한 후에는 사용자의 SCIM ID가 SCIM API를 이용해 생성되었는지 GitHub에서 생성되었는지를 확인할 수 있습니다. 자세한 내용은 누락된 SCIM 메타데이터에 대한 사용자 감사 또는 SCIM용 REST API 엔드포인트을(를) 참조하세요.

사용자를 위해 SCIM을 다시 프로비전하는 작업이 도움이 되지 않는 경우 GitHub 지원에 문의하세요.

SAML ID 오류 충돌

사용자가 처음으로 GitHub 조직 또는 엔터프라이즈에 액세스하기 위해 SAML IdP(ID 공급자)로 인증하려고 하면 다음 오류 메시지가 표시될 수 있습니다.

현재 GitHub 사용자 계정 [GitHub 사용자 이름]이 연결 해제되어 있습니다. 그러나 [조직/엔터프라이즈]의 다른 GitHub 사용자 계정에 이미 연결되어 있는 [IdP 사용자 계정] SAML ID를 사용하여 ID 공급자로 인증을 시도하고 있습니다. GitHub [조직/엔터프라이즈] 소유자 중 한 명에게 문의하여 도움을 받으세요.

IdP가 Entra ID인 경우 오류 메시지에는 Entra ID의 연결된 ID의 User Object ID가 포함되며, GitHub에서는 External ID를 참조합니다.

이 오류 메시지는 외부 ID가 조직 또는 엔터프라이즈 내의 단일 GitHub 사용자 계정에만 연결될 수 있기 때문에 발생합니다.

충돌하는 ID를 사용하여 사용자 식별

사용자가 이 오류를 발견하면 다음 단계에 따라 충돌하는 계정을 식별할 수 있습니다.

  1. GitHub GraphQL API를 사용하여 충돌하는 외부 ID에 연결된 사용자를 확인합니다.
    • SAML이 GitHub 조직 수준에서 구성된 경우: 조직 소유자는 조직 수준에서 기존 외부 ID를 쿼리하고 이 오류가 발생할 때 사용자가 인증하는 IdP 계정의 SAML NameID로 필터링해야 합니다. platform-samples 리포지토리에서 org-saml-identities-filtered-by-nameid-username.graphql 샘플을 참조하세요.
    • SAML이 GitHub 엔터프라이즈 수준에서 구성된 경우: 엔터프라이즈 소유자는 엔터프라이즈 수준에서 기존 외부 ID를 쿼리하고 이 오류가 발생할 때 사용자가 인증하는 IdP 계정의 SAML NameID로 필터링해야 합니다. platform-samples 리포지토리에서 enterprise-saml-identities-filtered-by-nameid.graphql 샘플을 참조하세요.
  2. 충돌하는 외부 ID와 연결된 GitHub 사용자를 식별하여 사용자가 엔터프라이즈 및 그 안에 있는 조직에서 여전히 활성 상태인지 확인하려면 엔터프라이즈 소유자가 Enterprise에서 사용자 보기의 단계를 따르면 됩니다.

충돌 해결

충돌하는 계정을 식별하는 단계를 수행한 경우, 발견된 결과에 따라 다양한 해결 옵션이 있습니다. 이러한 단계를 수행하려고 할 때 문제가 발생하거나 질문이 있는 경우 GitHub 지원 포털을 사용하여 GitHub 지원 티켓을 열 수 있습니다.

충돌하는 GitHub 사용자는 더 이상 액세스할 필요가 없습니다.

충돌하는 외부 ID와 연결된 GitHub 사용자 계정이 GitHub 조직이나 엔터프라이즈에 더 이상 액세스할 필요가 없는 경우, 해당 계정을 멤버에서 제거합니다. 사용자가 제대로 제거되었다면, 조직 수준에 사용자가 아직 있는 경우 연결된 SAML ID와 SCIM ID도 제거해야 합니다.

  • SCIM 프로비전을 사용하여 조직 멤버십을 관리하는 경우, GitHub의 단계를 따르기보다는 SCIM을 통해 IdP에서 사용자의 프로비전을 해제해야 합니다. 그렇지 않으면 사용자의 연결된 SAML 및 SCIM ID가 조직 내에 남아 있어 오류가 계속 발생할 수 있습니다.
  • SCIM 프로비전을 사용하지 않는 경우 조직 멤버십을 관리하려면 조직에서 구성원 제거 또는 엔터프라이즈에서 멤버 제거을(를) 참조하세요. IdP의 조직 또는 엔터프라이즈에 대한 GitHub 앱에서도 사용자의 액세스 권한을 제거해야 합니다.

사용자의 SAML 또는 SCIM ID가 GitHub 조직에서 성공적으로 제거되었는지 확인하려면 조직의 ID 및 액세스 관리 문제 해결을(를) 참조하세요.

충돌하는 GitHub 사용자는 여전히 액세스 권한이 필요합니다.

충돌하는 외부 ID와 연결된 GitHub 사용자 계정이 있고 이 사용자가 조직이나 엔터프라이즈에 여전히 액세스 권한이 필요한 경우 사용자 계정의 연결된 ID를 변경하거나 오류가 발생하는 사용자에게 다른 IdP ID로 인증하도록 해야 합니다.

  • SCIM 프로비전을 사용하여 조직의 멤버십을 관리하고 멤버의 GitHub 계정에 연결된 외부 ID를 변경해야 하는 경우, IdP에서 사용자의 프로비전을 해제한 다음 다시 프로비전합니다(예: 앱에 대한 사용자 할당을 해제한 다음 다시 할당).
    • IdP 사용자가 프로비전을 해제하면 GitHub 계정 및 연결된 SAML/SCIM ID가 GitHub 조직에서 제거됩니다.
    • IdP 사용자가 GitHub 조직에 다시 프로비전되면 보류 중인 새로운 조직 초대 및 연결되지 않은 새로운 SCIM ID가 생성됩니다. 이렇게 하면 사용자가 이 GitHub 사용자 계정으로 로그인하고, SAML을 통해 인증하고, 새로운 IdP ID를 해당 계정에 연결할 수 있습니다. 이러한 단계는 새로운 SAML과 SCIM ID가 모두 조직 내 GitHub 사용자 계정에 제대로 연결되도록 도와줍니다.
  • SCIM 프로비전을 사용하여 조직 멤버십을 관리하지 않거나 또는 SAML이 엔터프라이즈 수준에서 구성된 경우, 다음 문서 중 하나의 단계에 따라 사용자의 연결된 외부 ID를 해지할 수 있습니다.

충돌하는 GitHub 사용자를 찾을 수 없습니다.

충돌하는 외부 ID와 연결된 GitHub 사용자 계정이 없는 경우 외부 ID를 해지할 수 있습니다.

  • SCIM 프로비전을 사용하여 조직의 멤버십을 관리하는 경우 IdP에서 오래되고 연결되지 않은 ID를 제거합니다(예: IdP 앱에서 사용자 할당 해제).
    • IdP가 GitHub에 적절한 SCIM API 호출을 보내지 않으면 ID가 조직에 남아 있어 오류가 계속 발생할 수 있습니다.
    • 사용자의 SAML 또는 SCIM ID가 GitHub 조직에서 성공적으로 제거되었는지 확인하려면 조직의 ID 및 액세스 관리 문제 해결을(를) 참조하세요.
  • 조직의 멤버십을 관리하는 데 SCIM 프로비전을 사용하지 않는 경우, 연결된 외부 ID를 취소하려면 아래 URL 중 하나로 이동하여 외부 ID를 취소하세요. USERNAME을 로그인할 수 없는 사용자의 GitHub 사용자 이름으로 바꾸고, ORGANIZATION 또는 ENTERPRISE를 적절한 값으로 바꿉니다.
    • https://github.com/orgs/ORGANIZATION/people/USERNAME/sso
    • https://github.com/enterprises/ENTERPRISE/people/USERNAME/sso

추가 참고 자료