OpenID Connect 아이덴티티 프로바이더의 지문 얻기

OpenID Connect 아이덴티티 프로바이더의 지문 얻기 (Obtain the thumbprint for an OpenID Connect identity provider)

IAM에서 OpenID Connect(OIDC) 아이덴티티 프로바이더를 만들 때, IAM은 외부 아이덴티티 프로바이더(IdP)가 사용하는 인증서를 서명한 **최상위 중간 인증 기관(CA)**의 지문(thumbprint)을 요구해요. 지문은 OIDC 호환 IdP의 인증서를 발급하는 데 사용된 CA 인증서의 서명이에요. IAM OIDC 아이덴티티 프로바이더를 만들 때, 그 IdP가 인증한 아이덴티티가 AWS 계정에 접근할 수 있도록 신뢰하는 거예요. CA의 인증서 지문을 사용하면 등록된 것과 같은 DNS 이름을 가진 그 CA가 발급한 어떤 인증서든 신뢰해요. 이렇게 하면 IdP의 서명 인증서를 갱신할 때 각 계정의 트러스트를 업데이트할 필요가 없어요.

출처: 문서

본문

중요

대부분의 경우 페더레이션 서버는 서로 다른 두 개의 인증서를 사용해요.

  • 첫 번째는 AWS와 IdP 사이의 HTTPS 연결을 확립해요. 이 인증서는 AWS Certificate Manager 같은 잘 알려진 공개 루트 CA가 발급해야 해요. 그래야 클라이언트가 인증서의 신뢰성과 상태를 확인할 수 있어요.
  • 두 번째는 토큰을 암호화하는 데 사용되며, 프라이빗 또는 공개 루트 CA가 서명해야 해요.

IAM OIDC 아이덴티티 프로바이더는 AWS Command Line Interface, Tools for Windows PowerShell, 또는 IAM API로 만들 수 있어요. 이 방법들을 사용할 때는 지문을 수동으로 제공할 수 있어요. 지문을 포함하지 않기로 하면 IAM이 OIDC IdP 서버 인증서의 최상위 중간 CA 지문을 검색해요. 지문을 포함하기로 하면 지문을 수동으로 얻어 AWS에 제공해야 해요.

IAM 콘솔로 OIDC 아이덴티티 프로바이더를 만들 때, IAM이 OIDC IdP 서버 인증서의 최상위 중간 CA 지문을 대신 검색하려고 시도해요.

OIDC IdP의 지문을 수동으로도 얻어, IAM이 올바른 지문을 검색했는지 확인하길 권장해요. 인증서 지문 얻기에 대한 자세한 내용은 다음 섹션을 참고하세요.

참고

AWS는 신뢰할 수 있는 루트 인증 기관(CA) 라이브러리로 JWKS(JSON Web Key Set) 엔드포인트의 TLS 인증서를 검증해 OIDC IdP와의 통신을 보호해요. OIDC IdP가 이 신뢰된 CA 중 하나가 서명하지 않은 인증서에 의존하는 경우에만 IdP 구성에 설정된 지문으로 통신을 보호해요. AWS는 TLS 인증서를 검색할 수 없거나 TLS v1.3이 필요한 경우 지문 검증으로 폴백해요.

중요

OIDC 아이덴티티 프로바이더가 디스커버리 엔드포인트(발급자 URL)와 JWKS 엔드포인트(jwks_uri)에 서로 다른 호스트를 사용한다면, OIDC 프로바이더의 지문 목록에 두 엔드포인트의 지문을 모두 포함해야 해요. AWS는 지문 검증으로 폴백할 때 두 엔드포인트의 지문을 모두 검증해요. 어느 한 지문이 구성된 목록에 없으면 인증이 실패해요.

대부분의 OIDC 프로바이더는 두 엔드포인트를 같은 도메인에서 호스팅하므로 단일 지문으로 둘 다 덮어요. 프로바이더가 두 엔드포인트에 서로 다른 호스트나 인증서를 사용하는 경우에만 별도의 지문을 추가하면 돼요.

인증서 지문 얻기

OIDC 프로바이더의 인증서 지문을 얻는 데는 웹 브라우저와 OpenSSL 커맨드 라인 도구를 사용해요. 하지만 IAM OIDC 아이덴티티 프로바이더를 만들기 위해 인증서 지문을 수동으로 얻을 필요는 없어요. 다음 절차를 사용해 OIDC 프로바이더의 인증서 지문을 얻을 수 있어요.

OIDC IdP의 지문 얻기
  1. OIDC IdP의 지문을 얻기 전에 OpenSSL 커맨드 라인 도구를 구해요. 이 도구로 OIDC IdP 인증서 체인을 다운로드하고, 인증서 체인의 마지막 인증서의 지문을 생성해요. OpenSSL을 설치·구성해야 한다면 OpenSSL 설치와 OpenSSL 구성의 지침을 따르세요.
  2. OIDC IdP URL(예: https://server.example.com)로 시작하고, 그 뒤에 /.well-known/openid-configuration을 추가해 IdP 구성 문서의 URL을 만드세요. 예:
    https://server.example.com/.well-known/openid-configuration
    
  3. server.example.com을 우리 IdP 서버 이름으로 바꿔 이 URL을 웹 브라우저에서 열어요.
  4. 표시된 문서에서 브라우저의 찾기 기능으로 "jwks_uri" 텍스트를 찾아요. "jwks_uri" 바로 뒤에는 콜론(:)과 URL이 있어요. URL의 완전한 도메인 이름을 복사해요. https://나 최상위 도메인 뒤에 오는 경로는 포함하지 마세요.
    {
     "issuer": "https://accounts.example.com",
     "authorization_endpoint": "https://accounts.example.com/o/oauth2/v2/auth",
     "device_authorization_endpoint": "https://oauth2.exampleapis.com/device/code",
     "token_endpoint": "https://oauth2.exampleapis.com/token",
     "userinfo_endpoint": "https://openidconnect.exampleapis.com/v1/userinfo",
     "revocation_endpoint": "https://oauth2.exampleapis.com/revoke",
     "jwks_uri": "https://www.exampleapis.com/oauth2/v3/certs",
    ...
    }
    
    • 참고
      디스커버리·JWKS 엔드포인트가 서로 다른 호스트를 사용한다면, 발급자 URL(2단계에서 사용한 URL에서 /.well-known/openid-configuration 경로를 뺀 것)의 완전한 도메인 이름을 기록해 두세요. 이 도메인이 이 단계에서 복사한 jwks_uri 도메인과 다르면, 두 도메인 모두에 4~6단계를 수행하고 OIDC 프로바이더를 만들 때 두 지문을 모두 포함하세요.
  5. OpenSSL 커맨드 라인 도구로 다음 명령을 실행해요. keys.example.com을 4단계에서 얻은 도메인 이름으로 바꿔요.
    openssl s_client -servername keys.example.com -showcerts -connect keys.example.com:443
    
  6. 명령 창에서 다음 예시와 비슷한 인증서가 보일 때까지 스크롤을 올려요. 인증서가 여러 개 보이면 마지막에 표시된 인증서(명령 출력 끝)를 찾아요. 이것이 인증 기관 체인의 최상위 중간 CA 인증서예요.
    -----BEGIN CERTIFICATE-----
    MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
    VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
    b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
    BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
    MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
    VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
    b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
    YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
    21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
    rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
    Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
    nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
    FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
    NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE=
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----와 -----END CERTIFICATE----- 줄을 포함한 인증서를 복사해 텍스트 파일에 붙여 넣고 certificate.crt라는 파일 이름으로 저장해요.
    • 참고
      OIDC 아이덴티티 프로바이더의 인증서 체인은 도메인 또는 발급자 URL로 시작해, 중간 인증서(있는 경우)를 포함하고, 루트 인증서로 끝나야 해요. 인증서 체인의 순서가 다르거나 중복·추가 인증서가 포함되면 서명 불일치 오류가 나고 STS가 JSON 웹 토큰(JWT) 검증에 실패해요. 오류를 해결하려면 서버에서 반환되는 체인의 인증서 순서를 바로잡아야 해요. 인증서 체인 표준에 대한 자세한 내용은 RFC Series 웹사이트의 RFC 5246의 certificate_list를 참고하세요.
  7. OpenSSL 커맨드 라인 도구로 다음 명령을 실행해요.
    openssl x509 -in certificate.crt -fingerprint -sha1 -noout
    
  8. 명령 창에 다음 예시와 비슷한 인증서 지문이 표시돼요.
    SHA1 Fingerprint=99:0F:41:93:97:2F:2B:EC:F1:2D:DE:DA:52:37:F9:C9:52:F2:0D:9E
    
  9. 이 문자열에서 콜론 문자(:)를 제거해 최종 지문을 만드세요.
    990F4193972F2BECF12DDEDA5237F9C952F20D9E
    
    • 참고
      디스커버리 엔드포인트가 JWKS 엔드포인트와 다른 호스트를 사용한다면, 디스커버리 엔드포인트 도메인(발급자 URL 도메인)으로 4~6단계를 반복하세요. CreateOpenIDConnectProvider 또는 UpdateOpenIDConnectProviderThumbprint로 OIDC 아이덴티티 프로바이더를 만들거나 업데이트할 때 두 지문을 모두 포함하세요.
  10. IAM OIDC 아이덴티티 프로바이더를 AWS CLI, Tools for Windows PowerShell, 또는 IAM API로 만들 때 지문 제공은 선택이에요. 생성 중 지문을 포함하지 않기로 하면 IAM이 OIDC IdP 서버 인증서의 최상위 중간 CA 지문을 검색해요. IAM OIDC 아이덴티티 프로바이더가 생성된 후 이 지문을 IAM이 검색한 지문과 비교할 수 있어요.
  11. IAM 콘솔에서 IAM OIDC 아이덴티티 프로바이더를 만든다면, 콘솔이 OIDC IdP 서버 인증서의 최상위 중간 CA 지문을 대신 검색하려고 시도해요. 이 지문을 IAM이 검색한 지문과 비교할 수 있어요. IAM OIDC 아이덴티티 프로바이더가 생성된 후 OIDC 프로바이더 요약 콘솔 페이지의 Endpoint verification 탭에서 지문을 볼 수 있어요.
중요

얻은 지문이 IAM OIDC 아이덴티티 프로바이더 지문 세부 정보에 보이는 것과 일치하지 않으면 OIDC 프로바이더를 사용하지 않아야 해요. 대신 생성된 OIDC 프로바이더를 삭제하고, 시간이 지난 후 OIDC 프로바이더 생성을 다시 시도해요. 프로바이더를 사용하기 전에 지문이 일치하는지 확인하세요. 두 번째 시도 후에도 지문이 여전히 일치하지 않으면 IAM Forum을 사용해 AWS에 문의하세요.

OpenSSL 설치

아직 OpenSSL이 설치되어 있지 않다면 이 섹션의 지침을 따르세요.

Linux 또는 Unix에 OpenSSL 설치
  1. OpenSSL: Source, Tarballs(https://openssl.org/source/)로 이동해요.
  2. 최신 소스를 다운로드하고 패키지를 빌드해요.
Windows에 OpenSSL 설치
  1. Windows 버전을 설치할 수 있는 사이트 목록은 OpenSSL: Binary Distributions(https://wiki.openssl.org/index.php/Binaries)로 이동해요.
  2. 선택한 사이트의 지침에 따라 설치를 시작해요.
  3. Microsoft Visual C++ 2008 Redistributables 설치 요청이 나오고 시스템에 이미 설치되어 있지 않다면, 환경에 맞는 다운로드 링크를 선택해요. Microsoft Visual C++ 2008 Redistributable Setup Wizard가 제공하는 지침을 따라요.
    • 참고
      Microsoft Visual C++ 2008 Redistributables가 이미 설치되어 있는지 확실하지 않다면 먼저 OpenSSL 설치를 시도해 볼 수 있어요. OpenSSL 설치 프로그램은 Microsoft Visual C++ 2008 Redistributables가 아직 설치되지 않았으면 경고를 표시해요. 설치하는 OpenSSL 버전과 일치하는 아키텍처(32비트 또는 64비트)를 설치해야 해요.
  4. Microsoft Visual C++ 2008 Redistributables를 설치한 후 환경에 적합한 OpenSSL 바이너리 버전을 선택하고 파일을 로컬에 저장해요.
  5. OpenSSL Setup Wizard를 시작해요.
  6. OpenSSL Setup Wizard가 설명하는 지침을 따라요.

OpenSSL 구성

OpenSSL 명령을 사용하기 전에 운영 체제가 OpenSSL이 설치된 위치에 대한 정보를 갖도록 구성해야 해요.

Linux 또는 Unix에서 OpenSSL 구성
  1. 커맨드 라인에서 OpenSSL_HOME 변수를 OpenSSL 설치 위치로 설정해요.
    $ export OpenSSL_HOME=path_to_your_OpenSSL_installation
    
  2. 경로에 OpenSSL 설치를 포함하도록 설정해요.
    $ export PATH=$PATH:$OpenSSL_HOME/bin
    
    • 참고
      export 명령으로 환경 변수에 하는 변경은 현재 세션에서만 유효해요. 셸 구성 파일에 설정해 환경 변수를 영구적으로 변경할 수 있어요. 자세한 내용은 운영 체제의 문서를 참고하세요.
Windows에서 OpenSSL 구성
  1. Command Prompt 창을 열어요.
  2. OpenSSL_HOME 변수를 OpenSSL 설치 위치로 설정해요.
    C:\> set OpenSSL_HOME=path_to_your_OpenSSL_installation
    
  3. OpenSSL_CONF 변수를 OpenSSL 설치의 구성 파일 위치로 설정해요.
    C:\> set OpenSSL_CONF=path_to_your_OpenSSL_installation\bin\openssl.cfg
    
  4. 경로에 OpenSSL 설치를 포함하도록 설정해요.
    C:\> set Path=%Path%;%OpenSSL_HOME%\bin
    
    • 참고
      Command Prompt 창에서 Windows 환경 변수에 하는 변경은 현재 커맨드 라인 세션에서만 유효해요. 환경 변수를 시스템 속성으로 설정해 영구적으로 변경할 수 있어요. 정확한 절차는 사용하는 Windows 버전에 따라 달라져요. (예: Windows 7에서는 Control Panel, System and Security, System을 엽니다. 그런 다음 Advanced system settings, Advanced 탭, Environment Variables를 선택해요.) 자세한 내용은 Windows 문서를 참고하세요.

더 알아보기 (Learn more)