Skip to main content

SAML 구성 참조

조직 또는 엔터프라이즈GitHub Enterprise Server 인스턴스에 대한 SAML 메타데이터를 볼 수 있으며 사용 가능한 SAML 특성 및 응답 요구 사항에 대해 자세히 알아볼 수 있습니다.

SAML 구성 정보

GitHub에 인증하기 위해 SAML Single Sign-On(SSO)을 사용하려면 외부 SAML ID 공급자(IdP)와 GitHub Enterprise Server 인스턴스의 엔터프라이즈 또는 조직을 모두 구성해야 합니다. SAML 구성 GitHub 에서 SAML SP(서비스 공급자)로 작동합니다. 엔터프라이즈 인증에 대한 자세한 내용은 ID 및 액세스 관리 기본 사항을(를) 참조하세요.

GitHub 는 SAML 2.0 사양에 따라 통합을 제공합니다. 자세한 내용은 OASIS 웹 사이트의 SAML Wiki를 참조하세요.

SAML SSO GitHub를 구성할 때 SAML IdP에서 고유 값을 입력해야 하며 IdP에서 GitHub 고유 값도 입력해야 합니다.

SAML 메타데이터

GitHub Enterprise Server 인스턴스의 SP 메타데이터는 http(s)://HOSTNAME/saml/metadata에서 확인할 수 있으며, 여기서 HOSTNAME은 인스턴스의 호스트 이름입니다. GitHub Enterprise Server는 urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST 바인딩을 사용합니다.

기타 이름설명예시
SP 엔터티 IDSP URL, 대상 그룹 제한
GitHub Enterprise Server 인스턴스의 최상위 URLhttp(s)://HOSTNAME
SP 어설션 소비자 서비스(ACS) URL회신, 수신자 또는 대상 URLIdP가 SAML 응답을 보내는 URLhttp(s)://HOSTNAME/saml/consume
SP SSO(싱글 사인온) URL
IdP가 SSO로 시작하는 URLhttp(s)://HOSTNAME/sso

SAML 특성

다음 SAML 특성을 사용할 수 있습니다 GitHub. 관리 콘솔에서 administrator 특성을 제외한 특성 이름을 변경할 수 있습니다. 자세한 내용은 웹 UI에서 인스턴스를 관리하기을 참조하세요.

이름필수 여부설명
NameID영구 사용자 식별자입니다. 영구 이름 식별자 형식을 사용할 수 있습니다.
GitHub에서 사용자 이름으로 사용하기 위해 NameID 요소를 정규화합니다. 자세한 내용은 외부 인증에 대한 사용자 이름 고려 사항을(를) 참조하세요.

[!NOTE] 사람이 읽을 수 있는 영구 식별자를 사용하는 것이 중요합니다. 임시 식별자 형식(예:urn:oasis:names:tc:SAML:2.0:nameid-format:transient)을 사용하면 로그인할 때마다 계정이 다시 연결되므로 권한 부여 관리에 악영향을 미칠 수 있습니다. | | SessionNotOnOrAfter | | 연결된 세션을 무효화하는 날짜 GitHub 입니다. 무효화 후 사용자는 엔터프라이즈의 리소스에 액세스GitHub Enterprise Server 인스턴스. 자세한 내용은 세션 기간 및 시간 제한을 참조하세요. | | | | administrator | | 값이면 trueGitHub 자동으로 사용자를 사이트 관리자로 승격합니다. 값이 비어 있지 않은 한 이 특성을 true 이외의 값으로 설정하면 강등됩니다. 이 특성을 생략하거나 값을 비워 두면 사용자의 역할이 변경되지 않습니다. | | username | | GitHub Enterprise Server 인스턴스의 사용자 이름입니다. | | | | full_name | | 사용자의 프로필 페이지에 표시할 사용자의 전체 이름입니다. | | emails | | 사용자의 전자 메일 주소입니다. 둘 이상의 주소를 지정할 수 있습니다. GitHub Enterprise Server와 GitHub Enterprise Cloud 간에 라이선스 사용을 동기화하면 GitHub Connect는 여러 제품 전반에서 고유한 사용자를 식별하기 위해 emails를 사용합니다. 자세한 내용은 GitHub Enterprise Server에서 클라우드로 라이선스 사용량 동기화을(를) 참조하세요. | | public_keys | | 경우 사용자의 공용 SSH 키입니다. 복수의 키를 지정할 수 있습니다. | | gpg_keys | | 경우 사용자의 GPG 키입니다. 복수의 키를 지정할 수 있습니다. |

특성에 대해 둘 이상의 값을 지정하려면 여러 <saml2:AttributeValue> 요소를 사용합니다.

<saml2:Attribute FriendlyName="public_keys" Name="urn:oid:1.2.840.113549.1.1.1" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml2:AttributeValue>ssh-rsa LONG KEY</saml2:AttributeValue>
    <saml2:AttributeValue>ssh-rsa LONG KEY 2</saml2:AttributeValue>
</saml2:Attribute>

SAML 응답 요구 사항

GitHub 에서는 IdP의 응답 메시지가 다음 요구 사항을 충족해야 합니다.

  • IdP는 루트 응답 문서의 <Destination> 요소에서 제공되고 루트 응답 문서에 서명된 경우에만 ACS URL과 일치해야 합니다. IdP가 어설션에 서명하면 GitHub에서 해당 어설션을 무시합니다.

  • IdP는 항상 <Audience> 요소를 <AudienceRestriction> 요소의 일부로 제공해야 합니다. 값은 사용자의 EntityId 값과 GitHub일치해야 합니다. 이 값은 GitHub에 액세스하는 URL입니다(예: http(s)://HOSTNAME).

  • IdP는 응답에서 디지털 서명을 포함한 단일 주장(어설션)을 제공해야 합니다. <Assertion> 요소에 서명하거나 <Response> 요소에 서명할 수 있습니다.

  • IdP에서 <NameID> 요소를 <Subject> 요소의 일부로 제공해야 합니다. 모든 영구 이름 식별자 형식을 사용할 수 있습니다.

  • IdP에는 ACS URL로 설정해야 하는 Recipient 특성이 포함되어야 합니다. 다음 예제에서는 이 특성을 확인할 수 있습니다.

    <samlp:Response ...>
      <saml:Assertion ...>
        <saml:Subject>
          <saml:NameID ...>...</saml:NameID>
          <saml:SubjectConfirmation ...>
            <saml:SubjectConfirmationData Recipient="https://HOSTNAME/saml/consume" .../>
          </saml:SubjectConfirmation>
        </saml:Subject>
        <saml:AttributeStatement>
          <saml:Attribute FriendlyName="USERNAME-ATTRIBUTE" ...>
            <saml:AttributeValue>monalisa</saml:AttributeValue>
          </saml:Attribute>
        </saml:AttributeStatement>
      </saml:Assertion>
    </samlp:Response>
    

AuthnRequests의 SAML 서명 인증서

인스턴스를 처음 설정하고 GitHub Enterprise Server 시작하면 IdP의 SAML 인증서와 별도로 자체 서명된 SAML 서명 인증서가 생성됩니다. 이 인증서는 IdP로 전송된 SAML AuthnRequests에 서명하는 데 사용되며 10년 동안 유효합니다. /data/user/common/saml-sp.p12에 저장되며 http(s)://HOSTNAME/saml/metadata에서 base64로 인코딩된 형식으로 세부 정보를 볼 수 있습니다.

IdP가 SAML 서명 인증서의 유효성을 검사하거나 SAML 암호화 어설션을 사용하는 경우 인증서가 만료되면 인증 문제가 발생할 수 있습니다. 관리자가 만료 날짜를 GitHub Enterprise Server 확인하기 위해 SSH를 통해 서버에 연결하고 아래 명령을 실행할 수 있습니다. SSH를 통해 관리 셸에 연결을 참조하세요.

sudo openssl pkcs12 -in /data/user/common/saml-sp.p12 -clcerts -nokeys -password pass: | sudo openssl x509 -noout -enddate

이 SAML SP 서명 인증서가 만료되어 IdP 또는 암호화된 어설션 GitHub Enterprise Server 에 필요한 경우 이 SAML SP 서명 인증서를 다시 생성하려면 관리자는 SSH 세션에서 아래 GitHub Enterprise Server 명령을 실행할 수 있습니다.

참고

nomad 명령은 github-unicorn 서비스가 다시 시작될 때 사용자에게 잠시 동안 방해가 됩니다.

# Backup the old certificate
sudo cp /data/user/common/saml-sp.p12 /data/user/common/saml-sp.p12-$(date +%d%m%Y_%H%M%S)

saml_tempdir=$(sudo mktemp -d)
sudo openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -sha256 -subj "/CN=github_enterprise" -keyout $saml_tempdir/saml.key -out $saml_tempdir/saml.crt
sudo openssl pkcs12 -export -inkey $saml_tempdir/saml.key -in $saml_tempdir/saml.crt -nodes -password pass: -out /data/user/common/saml-sp.p12
sudo rm -rf $saml_tempdir

sudo nomad stop github-unicorn
sudo nomad run -hcl1 /etc/nomad-jobs/github/unicorn.hcl

세션 기간 및 시간 제한

사용자가 IdP를 사용하여 인증을 받고 무기한으로 권한을 GitHub 유지하지 못하도록 하려면 엔터프라이즈 리소스에 대한 액세스 권한이 GitHub Enterprise Server 인스턴스. 무효화되면 사용자는 IdP를 다시 한 번 인증해야 합니다.

기본적으로 IdP가 SessionNotOnOrAfter 속성에 대한 값을 전달하지 않으면, GitHub IdP를 통해 인증에 성공한 후 1주일 내에 세션을 무효화합니다.

GitHub는 IdP가 특성 및 값을SessionNotOnOrAfter 구성하는 옵션을 제공하고 이 특성이 SAML 응답에 포함된 경우 사용자 지정된 세션 기간을 지원합니다. IdP에서 특성을 허용하지 SessionNotOnOrAfter 않는 경우 사이트 관리자는 관리 셸ghe-config saml.default-session-expiration [seconds]의 명령을 사용하여 인스턴스의 모든 사용자에 대해 사용자 지정 SAML 세션 시간 제한을 구성할 수 있습니다.

24시간 GitHub 미만의 사용자 지정된 세션 기간 값을 정의하는 경우 리디렉션을 시작할 때마다 GitHub 인증하라는 메시지가 표시될 수 있습니다.

인스턴스에서 사용되는 인증 방법과 관계없이 GitHub Enterprise Server는 2주간의 연속 비활성 상태 후 사용자 세션을 종료합니다.

참고

Microsoft Entra ID(이전에는 Azure AD라고 함) SessionNotOnOrAfter 특성을 지원하지 않습니다. 또한 Entra ID 발급된 SAML 토큰에 대한 구성 가능한 수명 정책은 세션 시간 제한을GitHub제어하지 않습니다.