Azure Stack Hub 데이터 센터와 AD FS ID 통합

id 공급자로 Microsoft Entra ID 또는 AD FS(Active Directory Federation Services)를 사용하여 Azure Stack Hub를 배포할 수 있습니다. Azure Stack Hub를 배포하기 전에 선택해야 합니다. 연결된 시나리오에서는 Microsoft Entra ID 또는 AD FS를 선택할 수 있습니다. 연결이 끊긴 시나리오의 경우 AD FS만 지원됩니다. 이 문서에서는 데이터 센터 AD FS와 Azure Stack Hub AD FS를 통합하는 방법을 보여 줍니다.

중요

전체 Azure Stack Hub 솔루션을 다시 배포하지 않으면 ID 공급자를 전환할 수 없습니다.

Active Directory Federation Services 및 Graph

AD FS를 사용하여 배포하면 기존 Active Directory 포리스트의 ID가 Azure Stack Hub의 리소스로 인증할 수 있습니다. 이 기존 Active Directory 포리스트에는 AD FS 페더레이션 트러스트를 만들 수 있도록 AD FS 배포가 필요합니다.

인증은 ID의 한 부분입니다. Azure Stack Hub에서 RBAC(역할 기반 액세스 제어)를 관리하려면 Graph 구성 요소를 구성해야 합니다. 리소스에 대한 액세스가 위임되면 Graph 구성 요소는 LDAP 프로토콜을 사용하여 기존 Active Directory 포리스트에서 사용자 계정을 찾습니다.

Azure Stack Hub AD FS 아키텍처

기존 AD FS는 클레임을 Azure Stack Hub AD FS(리소스 STS)로 보내는 계정 STS(보안 토큰 서비스)입니다. Azure Stack Hub에서 자동화는 기존 AD FS에 대한 메타데이터 엔드포인트와의 클레임 공급자 트러스트를 만듭니다.

기존 AD FS에서 신뢰 당사자 트러스트를 구성해야 합니다. 이 단계는 자동화에 의해 수행되지 않으며 운영자가 구성해야 합니다. https://adfs.<Region>.<ExternalFQDN>/ 패턴을 사용하여 AD FS에 대한 Azure Stack Hub VIP 엔드포인트를 만들 수 있습니다.

또한 신뢰 당사자 트러스트 구성에서 Microsoft에서 제공하는 클레임 변환 규칙을 구성해야 합니다.

Graph 구성의 경우 기존 Active Directory에서 "읽기" 권한이 있는 서비스 계정을 제공해야 합니다. 이 계정은 RBAC 시나리오를 사용하도록 설정하기 위해 자동화에 대한 입력으로 필요합니다.

마지막 단계에서는 기본 공급자 구독에 대해 새 소유자가 구성됩니다. 이 계정은 Azure Stack Hub 관리자 포털에 로그인할 때 모든 리소스에 대한 모든 권한이 있습니다.

요구 사항:

구성 요소 요구 사항
그래프 Microsoft Active Directory 2012/2012 R2/2016 2019
AD FS Windows Server 2012/2012 R2/2016 2019

Graph 통합 설정

Graph는 단일 Active Directory 포리스트와의 통합만 지원합니다. 포리스트가 여러 개 있는 경우 구성에 지정된 포리스트만 사용하여 사용자 및 그룹을 가져옵니다.

자동화 매개 변수에 대한 입력으로 다음 정보가 필요합니다.

매개 변수 배포 워크시트 매개 변수 Description 예제
CustomADGlobalCatalog AD FS 포리스트 FQDN 통합하려는 대상 Active Directory 포리스트의 FQDN Contoso.com
CustomADAdminCredentials LDAP 읽기 권한이 있는 사용자 graphservice

Active Directory 사이트 구성

여러 사이트가 있는 Active Directory 배포의 경우 Azure Stack Hub 배포에 가장 가까운 Active Directory 사이트를 구성합니다. 이 구성은 Azure Stack Hub Graph 서비스가 원격 사이트에서 글로벌 카탈로그 서버를 사용하여 쿼리를 해결하는 것을 방지합니다.

Azure Stack Hub에 가장 가까운 Active Directory 사이트에 Azure Stack Hub 공용 VIP 네트워크 서브넷을 추가합니다. 예를 들어 시애틀 및 레드몬드 두 사이트가 Active Directory에 있다고 가정해 보겠습니다. Azure Stack Hub가 시애틀 사이트에 배포되는 경우 시애틀의 Active Directory 사이트에 Azure Stack Hub 공용 VIP 네트워크 서브넷을 추가합니다.

Active Directory 사이트에 대한 자세한 내용은 사이트 토폴로지 디자인을 참조하세요.

참고

Active Directory가 단일 사이트로 구성된 경우 이 단계를 건너뛸 수 있습니다. catch-all 서브넷이 구성된 경우 Azure Stack Hub 공용 VIP 네트워크 서브넷이 해당 서브넷의 일부가 아닌지 확인합니다.

기존 Active Directory에서 사용자 계정 만들기(선택 사항)

필요에 따라 기존 Active Directory에서 Graph 서비스용 계정을 만들 수 있습니다. 사용할 계정이 아직 없는 경우 이 단계를 수행합니다.

  1. 기존 Active Directory에서 다음 사용자 계정을 만듭니다(권장 사항).

    • 사용자 이름: graphservice
    • 암호: 강력한 암호를 사용하고 암호가 만료되지 않도록 구성합니다.

    특별한 사용 권한이나 멤버 자격은 필요하지 않습니다.

그래프를 구성하도록 자동화 트리거

이 절차에서는 데이터 센터 네트워크 내에서 Azure Stack Hub의 권한 있는 엔드포인트와 통신할 수 있는 컴퓨터를 사용합니다.

  1. 관리자 권한 Windows PowerShell 세션을 열고(관리자 권한으로 실행) 권한 있는 엔드포인트의 IP 주소에 연결합니다. CloudAdmin의 자격 증명을 사용하여 인증합니다.

    $creds = Get-Credential
    $pep = New-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
    
  2. 이제 권한 있는 엔드포인트에 대한 세션이 있으므로 다음 명령을 실행합니다.

    Azure Stack Hub 빌드 2008 이상에 대한 아래 스크립트 실행

     $i = @(
            [pscustomobject]@{ 
                      CustomADGlobalCatalog="fabrikam.com"
                      CustomADAdminCredential= Get-Credential -Message "Do not include the domain name of the graphservice account in the username."
                      SkipRootDomainValidation = $false 
                      ValidateParameters = $true
                    }) 
    
     Invoke-Command -Session $pep -ScriptBlock {Register-DirectoryService -customCatalog $using:i} 
    
    
    

    2008년 이전에 Azure Stack Hub 빌드에 대한 아래 스크립트 실행

    Invoke-Command -Session $pep -ScriptBlock {Register-DirectoryService -CustomADGlobalCatalog contoso.com} 
    
    
    

    메시지가 표시되면 Graph 서비스(예: graphservice)에 사용할 사용자 계정의 자격 증명을 지정합니다. Register-DirectoryService cmdlet에 대한 입력은 포리스트의 다른 도메인이 아닌 포리스트의 포리스트 이름/루트 도메인이어야 합니다.

    중요

    자격 증명 팝업(권한 있는 엔드포인트에서 Get-Credential이 지원되지 않음)을 기다린 후 Graph 서비스 계정 자격 증명을 입력합니다.

  3. Register-DirectoryService cmdlet에는 기존 Active Directory 유효성 검사가 실패하는 특정 시나리오에서 사용할 수 있는 선택적 매개 변수가 있습니다. 이 cmdlet을 실행하면 제공된 도메인이 루트 도메인인지, 글로벌 카탈로그 서버에 연결할 수 있는지, 제공된 계정에 읽기 액세스 권한이 부여되었는지 확인합니다.

    매개 변수 Description
    SkipRootDomainValidation 권장 루트 도메인 대신 자식 도메인을 사용하도록 지정합니다.
    ValidateParameters 모든 유효성 검사를 무시합니다.

Graph 프로토콜 및 포트

Azure Stack Hub의 Graph 서비스는 다음 프로토콜 및 포트를 사용하여 대상 Active Directory 포리스트에서 로그인 요청을 처리할 수 있는 쓰기 가능한 GC(글로벌 카탈로그) 서버 및 KDC(키 배포 센터)와 통신합니다.

Azure Stack Hub의 Graph 서비스는 다음 프로토콜 및 포트를 사용하여 대상 Active Directory와 통신합니다.

형식 포트 프로토콜
LDAP 389 TCP & UDP
LDAP SSL 636 TCP
LDAP GC 3268 TCP
LDAP GC SSL 3269 TCP

페더레이션 메타데이터를 다운로드하여 AD FS 통합 설정

자동화 매개 변수에 대한 입력으로 다음 정보가 필요합니다.

매개 변수 배포 워크시트 매개 변수 Description 예제
CustomAdfsName AD FS 공급자 이름 클레임 공급자의 이름입니다.
AD FS 방문 페이지에 표시됩니다.
Contoso
CustomAD
FSFederationMetadataEndpointUri
AD FS 메타데이터 URI 페더레이션 메타데이터 링크. https://ad01.contoso.com/federationmetadata/2007-06/federationmetadata.xml
SigningCertificateRevocationCheck 해당 없음 CRL 검사를 건너뛰는 선택적 매개 변수입니다. 없음

자동화를 트리거하여 Azure Stack Hub에서 클레임 공급자 트러스트 구성(페더레이션 메타데이터 다운로드)

이 절차에서는 Azure Stack Hub에서 권한 있는 엔드포인트와 통신할 수 있는 컴퓨터를 사용합니다. 계정 STS AD FS에서 사용하는 인증서는 Azure Stack Hub에서 신뢰할 수 있습니다.

  1. 관리자 권한 Windows PowerShell 세션을 열고 권한 있는 엔드포인트에 연결합니다.

    $creds = Get-Credential
    Enter-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
    
  2. 이제 권한 있는 엔드포인트에 연결되었으므로 환경에 적합한 매개 변수를 사용하여 다음 명령을 실행합니다.

    Register-CustomAdfs -CustomAdfsName Contoso -CustomADFSFederationMetadataEndpointUri "https://ad01.contoso.com/federationmetadata/2007-06/federationmetadata.xml"
    
  3. 다음 명령을 실행하여 환경에 적합한 매개 변수를 사용하여 기본 공급자 구독의 소유자를 업데이트합니다.

    Set-ServiceAdminOwner -ServiceAdminOwnerUpn "administrator@contoso.com"
    

페더레이션 메타데이터 파일을 제공하여 AD FS 통합 설정

버전 1807부터 다음 조건 중 하나가 true인 경우 이 메서드를 사용합니다.

  • 인증서 체인은 AD FS의 경우 Azure Stack Hub의 다른 모든 엔드포인트와 다릅니다.
  • Azure Stack Hub의 AD FS instance 기존 AD FS 서버에 대한 네트워크 연결이 없습니다.

자동화 매개 변수에 대한 입력으로 다음 정보가 필요합니다.

매개 변수 Description 예제
CustomAdfsName 클레임 공급자의 이름입니다. AD FS 방문 페이지에 표시됩니다. Contoso
CustomADFSFederationMetadataFileContent 메타데이터 콘텐츠. $using:federationMetadataFileContent

페더레이션 메타데이터 파일 만들기

다음 절차에서는 계정 STS가 되는 기존 AD FS 배포에 대한 네트워크 연결이 있는 컴퓨터를 사용해야 합니다. 필요한 인증서도 설치해야 합니다.

  1. 관리자 권한 Windows PowerShell 세션을 열고 환경에 적합한 매개 변수를 사용하여 다음 명령을 실행합니다.

     $url = "https://win-SQOOJN70SGL.contoso.com/FederationMetadata/2007-06/FederationMetadata.xml"
     $webclient = New-Object System.Net.WebClient
     $webclient.Encoding = [System.Text.Encoding]::UTF8
     $metadataAsString = $webclient.DownloadString($url)
     Set-Content -Path c:\metadata.xml -Encoding UTF8 -Value $metadataAsString
    
  2. 권한 있는 엔드포인트와 통신할 수 있는 컴퓨터에 메타데이터 파일을 복사합니다.

자동화를 트리거하여 Azure Stack Hub에서 클레임 공급자 트러스트 구성(페더레이션 메타데이터 파일 사용)

이 절차에서는 Azure Stack Hub의 권한 있는 엔드포인트와 통신할 수 있고 이전 단계에서 만든 메타데이터 파일에 액세스할 수 있는 컴퓨터를 사용합니다.

  1. 관리자 권한 Windows PowerShell 세션을 열고 권한 있는 엔드포인트에 연결합니다.

    $federationMetadataFileContent = get-content c:\metadata.xml
    $creds=Get-Credential
    Enter-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
    
  2. 이제 권한 있는 엔드포인트에 연결되었으므로 환경에 적합한 매개 변수를 사용하여 다음 명령을 실행합니다.

    Register-CustomAdfs -CustomAdfsName Contoso -CustomADFSFederationMetadataFileContent $using:federationMetadataFileContent
    
  3. 다음 명령을 실행하여 기본 공급자 구독의 소유자를 업데이트합니다. 환경에 적합한 매개 변수를 사용합니다.

    Set-ServiceAdminOwner -ServiceAdminOwnerUpn "administrator@contoso.com"
    

    참고

    기존 AD FS(계정 STS)에서 인증서를 회전하는 경우 AD FS 통합을 다시 설정해야 합니다. 메타데이터 엔드포인트에 연결할 수 있거나 메타데이터 파일을 제공하여 구성한 경우에도 통합을 설정해야 합니다.

기존 AD FS 배포에 대한 신뢰 당사자 구성(계정 STS)

Microsoft는 클레임 변환 규칙을 포함하여 신뢰 당사자 트러스트를 구성하는 스크립트를 제공합니다. 명령을 수동으로 실행할 수 있으므로 스크립트를 사용하는 것은 선택 사항입니다.

GitHub의 Azure Stack Hub Tools 에서 도우미 스크립트를 다운로드할 수 있습니다.

명령을 수동으로 실행하려는 경우 다음 단계를 수행합니다.

  1. 데이터 센터의 AD FS instance 또는 팜 멤버의 .txt 파일(예: c:\ClaimIssuanceRules.txt 저장)에 다음 콘텐츠를 복사합니다.

    @RuleTemplate = "LdapClaims"
    @RuleName = "Name claim"
    c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
    => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"), query = ";userPrincipalName;{0}", param = c.Value);
    
    @RuleTemplate = "LdapClaims"
    @RuleName = "UPN claim"
    c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
    => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"), query = ";userPrincipalName;{0}", param = c.Value);
    
    @RuleTemplate = "LdapClaims"
    @RuleName = "ObjectID claim"
    c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"]
    => issue(Type = "http://schemas.microsoft.com/identity/claims/objectidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType);
    
    @RuleName = "Family Name and Given claim"
    c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
    => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"), query = ";sn,givenName;{0}", param = c.Value);
    
    @RuleTemplate = "PassThroughClaims"
    @RuleName = "Pass through all Group SID claims"
    c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Issuer =~ "^(AD AUTHORITY|SELF AUTHORITY|LOCAL AUTHORITY)$"]
    => issue(claim = c);
    
    @RuleTemplate = "PassThroughClaims"
    @RuleName = "Pass through all windows account name claims"
    c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
    => issue(claim = c);
    
  2. 엑스트라넷 및 인트라넷에 대한 Windows Forms 기반 인증이 사용하도록 설정되어 있는지 확인합니다. 다음 cmdlet을 실행하여 이미 사용하도록 설정된 경우 검사 수 있습니다.

    Get-AdfsAuthenticationProvider | where-object { $_.name -eq "FormsAuthentication" } | select Name, AllowedForPrimaryExtranet, AllowedForPrimaryIntranet
    

    참고

    WIA(Windows 통합 인증) 지원 사용자 에이전트 문자열은 AD FS 배포에 오래되어 최신 클라이언트를 지원하기 위해 업데이트가 필요할 수 있습니다. WIA 지원 사용자 에이전트 문자열 업데이트에 대한 자세한 내용은 WIA를 지원하지 않는 디바이스에 대한 인트라넷 양식 기반 인증 구성 문서에서 확인할 수 있습니다.

    양식 기반 인증 정책을 사용하도록 설정하는 단계는 인증 정책 구성을 참조하세요.

  3. 신뢰 당사자 트러스트를 추가하려면 AD FS instance 또는 팜 멤버에서 다음 Windows PowerShell 명령을 실행합니다. AD FS 엔드포인트를 업데이트하고 1단계에서 만든 파일을 가리킵니다.

    중요

    Azure Stack Hub 버전 2002 이상을 실행하는 고객의 경우 TLS 1.2가 Azure Stack Hub ADFS 엔드포인트에 적용됩니다. 따라서 고객 ADFS 서버 에서도 TLS 1.2를 사용하도록 설정해야 합니다 . 그렇지 않으면 고객이 소유한 ADFS 호스트/팜에서 실행할 Add-ADFSRelyingPartyTrust 때 다음 오류가 발생합니다.

    Add-ADFSRelyingPartyTrust : The underlying connection was closed: An unexpected error occurred on a send.

    AD FS 2016/2019의 경우

    Add-ADFSRelyingPartyTrust -Name AzureStack -MetadataUrl "https://YourAzureStackADFSEndpoint/FederationMetadata/2007-06/FederationMetadata.xml" -IssuanceTransformRulesFile "C:\ClaimIssuanceRules.txt" -AutoUpdateEnabled:$true -MonitoringEnabled:$true -enabled:$true -AccessControlPolicyName "Permit everyone" -TokenLifeTime 1440
    

    AD FS 2012/2012 R2의 경우

    Add-ADFSRelyingPartyTrust -Name AzureStack -MetadataUrl "https://YourAzureStackADFSEndpoint/FederationMetadata/2007-06/FederationMetadata.xml" -IssuanceTransformRulesFile "C:\ClaimIssuanceRules.txt" -AutoUpdateEnabled:$true -MonitoringEnabled:$true -enabled:$true -TokenLifeTime 1440
    

    중요

    AD FS MMC 스냅인을 사용하여 Windows Server 2012 또는 2012 R2 AD FS를 사용할 때 발급 권한 부여 규칙을 구성해야 합니다.

  4. 인터넷 Explorer 또는 Microsoft Edge 브라우저를 사용하여 Azure Stack Hub에 액세스하는 경우 토큰 바인딩을 무시해야 합니다. 그렇지 않으면 로그인 시도가 실패합니다. AD FS instance 또는 팜 멤버에서 다음 명령을 실행합니다.

    참고

    이 단계는 Windows Server 2012 또는 2012 R2 AD FS를 사용하는 경우 적용되지 않습니다. 이 경우 이 명령을 건너뛰고 통합을 계속하는 것이 안전합니다.

    Set-AdfsProperties -IgnoreTokenBinding $true
    

SPN 만들기

인증에 SPN(서비스 사용자 이름)을 사용해야 하는 많은 시나리오가 있습니다. 예는 다음과 같습니다.

  • Azure Stack Hub의 AD FS 배포를 사용하는 Azure CLI 사용량.
  • AD FS를 사용하여 배포할 때 Azure Stack Hub용 System Center 관리 팩입니다.
  • AD FS를 사용하여 배포할 때 Azure Stack Hub의 리소스 공급자입니다.
  • 다양한 앱.
  • 비대화형 로그인이 필요합니다.

중요

AD FS는 대화형 로그인 세션만 지원합니다. 자동화된 시나리오에 비대화형 로그인이 필요한 경우 SPN을 사용해야 합니다.

SPN을 만드는 방법에 대한 자세한 내용은 AD FS용 서비스 주체 만들기를 참조하세요.

문제 해결

구성 롤백

환경을 더 이상 인증할 수 없는 상태로 남겨 두는 오류가 발생하면 롤백 옵션을 사용할 수 있습니다.

  1. 관리자 권한 Windows PowerShell 세션을 열고 다음 명령을 실행합니다.

    $creds = Get-Credential
    Enter-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
    
  2. 그런 다음, 다음 cmdlet을 실행합니다.

    Reset-DatacenterIntegrationConfiguration
    

    롤백 작업을 실행하면 모든 구성 변경 내용이 롤백됩니다. 기본 제공 CloudAdmin 사용자로만 인증할 수 있습니다.

    중요

    기본 공급자 구독의 원래 소유자를 구성해야 합니다.

    Set-ServiceAdminOwner -ServiceAdminOwnerUpn "azurestackadmin@[Internal Domain]"
    

추가 로그 수집

cmdlet 중 하나라도 실패하면 cmdlet을 사용하여 추가 로그를 수집할 Get-Azurestacklogs 수 있습니다.

  1. 관리자 권한 Windows PowerShell 세션을 열고 다음 명령을 실행합니다.

    $creds = Get-Credential
    Enter-pssession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
    
  2. 그런 다음, 다음 cmdlet을 실행합니다.

    Get-AzureStackLog -OutputPath \\myworkstation\AzureStackLogs -FilterByRole ECE
    

다음 단계

외부 모니터링 솔루션 통합