Azure Stack Hub 데이터 센터와 AD FS ID 통합
Microsoft Entra ID 또는 AD FS(Active Directory Federation Services)를 ID 공급자로 사용하여 Azure Stack Hub를 배포할 수 있습니다. Azure Stack Hub를 배포하기 전에 선택해야 합니다. 연결된 시나리오에서 Microsoft Entra ID 또는 AD FS를 선택할 수 있습니다. 연결이 끊긴 시나리오의 경우 AD FS만 지원됩니다. 이 문서에서는 Azure Stack Hub AD FS를 데이터 센터 AD FS와 통합하는 방법을 보여 줍니다.
Important
전체 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 포리스트에서 사용자 계정을 찾습니다.
기존 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 포리스트와의 통합만 지원합니다. 포리스트가 여러 개 있는 경우 구성에 지정된 포리스트만 사용하여 사용자 및 그룹을 가져옵니다.
자동화 매개 변수에 대한 입력으로 다음 정보가 필요합니다.
매개 변수 | 배포 워크시트 매개 변수 | 설명 | 예시 |
---|---|---|---|
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 공용 VIP 네트워크 서브넷을 Azure Stack Hub와 가장 가까운 Active Directory 사이트에 추가합니다. 예를 들어 시애틀 및 레드몬드 두 사이트가 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 서비스용 계정을 만들 수 있습니다. 사용할 계정이 아직 없는 경우 이 단계를 수행합니다.
기존 Active Directory에서 다음 사용자 계정을 만듭니다(권장 사항).
- 사용자 이름: graphservice
- 암호: 강력한 암호를 사용하고 암호가 만료되지 않도록 구성합니다.
특별한 사용 권한이나 멤버 자격이 필요하지 않습니다.
그래프를 구성하도록 자동화 트리거
이 절차에서는 데이터 센터 네트워크 내에서 Azure Stack Hub의 권한 있는 엔드포인트와 통신할 수 있는 컴퓨터를 사용합니다.
관리자 권한 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)
이제 권한 있는 엔드포인트에 대한 세션이 있으므로 다음 명령을 실행합니다.
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에 대한 입력은 포리스트의 다른 도메인이 아닌 포리스트의 포리스트 이름/루트 도메인이어야 합니다.
Important
자격 증명 팝업(권한 있는 엔드포인트에서 Get-Credential이 지원되지 않음)을 기다린 후 Graph 서비스 계정 자격 증명을 입력합니다.
Register-DirectoryService cmdlet에는 기존 Active Directory 유효성 검사가 실패하는 특정 시나리오에서 사용할 수 있는 선택적 매개 변수가 있습니다. 이 cmdlet을 실행하면 제공된 도메인이 루트 도메인인지, 글로벌 카탈로그 서버에 연결할 수 있는지, 제공된 계정에 읽기 액세스 권한이 부여되었는지 확인합니다.
매개 변수 설명 SkipRootDomainValidation
권장 루트 도메인 대신 자식 도메인을 사용하도록 지정합니다. ValidateParameters
모든 유효성 검사를 무시합니다.
Graph 프로토콜 및 포트
Azure Stack Hub의 Graph 서비스는 다음 프로토콜 및 포트를 사용하여 대상 Active Directory 포리스트에서 로그인 요청을 처리할 수 있는 쓰기 가능한 GC(글로벌 카탈로그) 서버 및 KDC(키 배포 센터)와 통신합니다.
Azure Stack Hub의 Graph 서비스는 다음 프로토콜 및 포트를 사용하여 대상 Active Directory와 통신합니다.
Type | 포트 | 프로토콜 |
---|---|---|
LDAP | 389 | TCP 및 UDP |
LDAP SSL | 636 | TCP |
LDAP GC | 3268 | TCP |
LDAP GC SSL | 3269 | TCP |
페더레이션 메타데이터를 다운로드하여 AD FS 통합 설정
자동화 매개 변수에 대한 입력으로 다음 정보가 필요합니다.
매개 변수 | 배포 워크시트 매개 변수 | 설명 | 예시 |
---|---|---|---|
CustomAdfsName | AD FS 공급자 이름 | 클레임 공급자의 이름입니다. AD FS 방문 페이지에 표시됩니다. |
Contoso |
CustomAD FSFederationMetadataEndpointUri |
AD FS 메타데이터 URI | 페더레이션 메타데이터 링크입니다. | https://ad01.contoso.com/federationmetadata/2007-06/federationmetadata.xml |
SigningCertificateRevocationCheck | 해당 없음 | CRL 검사를 건너뛰는 선택적 매개 변수입니다. | None |
Azure Stack Hub에서 클레임 공급자 트러스트를 구성하는 자동화 트리거(페더레이션 메타데이터 다운로드)
이 절차에서는 Azure Stack Hub에서 권한 있는 엔드포인트와 통신할 수 있는 컴퓨터를 사용합니다. 계정 STS AD FS 에서 사용하는 인증서는 Azure Stack Hub에서 신뢰할 수 있습니다.
관리자 권한 Windows PowerShell 세션을 열고 권한 있는 엔드포인트에 연결합니다.
$creds = Get-Credential Enter-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
이제 권한 있는 엔드포인트에 연결되었으므로 사용자 환경에 적합한 매개 변수를 사용하여 다음 명령을 실행합니다.
Register-CustomAdfs -CustomAdfsName Contoso -CustomADFSFederationMetadataEndpointUri "https://ad01.contoso.com/federationmetadata/2007-06/federationmetadata.xml"
다음 명령을 실행하여 사용자 환경에 적합한 매개 변수를 사용하여 기본 공급자 구독의 소유자를 업데이트합니다.
Set-ServiceAdminOwner -ServiceAdminOwnerUpn "administrator@contoso.com"
페더레이션 메타데이터 파일을 제공하여 AD FS 통합 설정
버전 1807부터 다음 조건 중 하나가 true인 경우 이 메서드를 사용합니다.
- AD FS의 인증서 체인은 Azure Stack Hub의 다른 모든 엔드포인트와 다릅니다.
- Azure Stack Hub의 AD FS 인스턴스에서 기존 AD FS 서버에 대한 네트워크 연결이 없습니다.
자동화 매개 변수에 대한 입력으로 다음 정보가 필요합니다.
매개 변수 | 설명 | 예시 |
---|---|---|
CustomAdfsName | 클레임 공급자의 이름입니다. AD FS 방문 페이지에 표시됩니다. | Contoso |
CustomADFSFederationMetadataFileContent | 메타데이터 콘텐츠입니다. | $using:federationMetadataFileContent |
페더레이션 메타데이터 파일 만들기
다음 절차에서는 계정 STS가 되는 기존 AD FS 배포에 대한 네트워크 연결이 있는 컴퓨터를 사용해야 합니다. 필요한 인증서도 설치해야 합니다.
관리자 권한 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
권한 있는 엔드포인트와 통신할 수 있는 컴퓨터에 메타데이터 파일을 복사합니다.
Azure Stack Hub에서 클레임 공급자 트러스트를 구성하는 자동화 트리거(페더레이션 메타데이터 파일 사용)
이 절차의 경우 Azure Stack Hub의 권한 있는 엔드포인트와 통신할 수 있고 이전 단계에서 만든 메타데이터 파일에 액세스할 수 있는 컴퓨터를 사용합니다.
관리자 권한 Windows PowerShell 세션을 열고 권한 있는 엔드포인트에 연결합니다.
$federationMetadataFileContent = get-content c:\metadata.xml $creds=Get-Credential Enter-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
이제 권한 있는 엔드포인트에 연결되었으므로 사용자 환경에 적합한 매개 변수를 사용하여 다음 명령을 실행합니다.
Register-CustomAdfs -CustomAdfsName Contoso -CustomADFSFederationMetadataFileContent $using:federationMetadataFileContent
다음 명령을 실행하여 기본 공급자 구독의 소유자를 업데이트합니다. 사용자 환경에 적합한 매개 변수를 사용합니다.
Set-ServiceAdminOwner -ServiceAdminOwnerUpn "administrator@contoso.com"
참고 항목
기존 AD FS(계정 STS)에서 인증서를 회전하는 경우 AD FS 통합을 다시 설정해야 합니다. 메타데이터 엔드포인트에 연결할 수 있거나 메타데이터 파일을 제공하여 구성한 경우에도 통합을 설정해야 합니다.
기존 AD FS 배포에 대한 신뢰 당사자 구성(계정 STS)
Microsoft는 클레임 변환 규칙을 포함하여 신뢰 당사자 트러스트를 구성하는 스크립트를 제공합니다. 명령을 수동으로 실행할 수 있으므로 스크립트를 사용하는 것은 선택 사항입니다.
GitHub의 Azure Stack Hub Tools에서 도우미 스크립트를 다운로드할 수 있습니다.
명령을 수동으로 실행하려는 경우 다음 단계를 수행합니다.
데이터 센터의 AD FS 인스턴스 또는 팜 멤버의 .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);
엑스트라넷 및 인트라넷에 대한 Windows Forms 기반 인증이 사용하도록 설정되어 있는지 확인합니다. 다음 cmdlet을 실행하여 이미 활성화되어 있는지 확인할 수 있습니다.
Get-AdfsAuthenticationProvider | where-object { $_.name -eq "FormsAuthentication" } | select Name, AllowedForPrimaryExtranet, AllowedForPrimaryIntranet
신뢰 당사자 트러스트를 추가하려면 AD FS 인스턴스 또는 팜 멤버에서 다음 Windows PowerShell 명령을 실행합니다. AD FS 엔드포인트를 업데이트하고 1단계에서 만든 파일을 가리킵니다.
Important
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
Important
Windows Server 2012 또는 2012 R2 AD FS를 사용하는 경우 AD FS MMC 스냅인을 사용하여 발급 권한 부여 규칙을 구성해야 합니다.
Internet Explorer 또는 Microsoft Edge 브라우저를 사용하여 Azure Stack Hub에 액세스하는 경우 토큰 바인딩을 무시해야 합니다. 그렇지 않으면 로그인 시도가 실패합니다. AD FS 인스턴스 또는 팜 멤버에서 다음 명령을 실행합니다.
참고 항목
이 단계는 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의 리소스 공급자입니다.
- 다양한 앱.
- 비대화형 로그인이 필요합니다.
Important
AD FS는 대화형 로그인 세션만 지원합니다. 자동화된 시나리오에 비대화형 로그인이 필요한 경우 SPN을 사용해야 합니다.
SPN을 만드는 방법에 대한 자세한 내용은 AD FS용 서비스 주체 만들기를 참조 하세요.
문제 해결
구성 롤백
더 이상 인증할 수 없는 상태로 환경을 벗어나는 오류가 발생하면 롤백 옵션을 사용할 수 있습니다.
관리자 권한 Windows PowerShell 세션을 열고 다음 명령을 실행합니다.
$creds = Get-Credential Enter-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
그런 다음, 다음 cmdlet을 실행합니다.
Reset-DatacenterIntegrationConfiguration
롤백 작업을 실행하면 모든 구성 변경 내용이 롤백됩니다. 기본 제공 CloudAdmin 사용자로만 인증할 수 있습니다.
Important
기본 공급자 구독의 원래 소유자를 구성해야 합니다.
Set-ServiceAdminOwner -ServiceAdminOwnerUpn "azurestackadmin@[Internal Domain]"
추가 로그 수집
cmdlet이 실패하는 경우 cmdlet을 사용하여 추가 로그를 수집할 Get-Azurestacklogs
수 있습니다.
관리자 권한 Windows PowerShell 세션을 열고 다음 명령을 실행합니다.
$creds = Get-Credential Enter-pssession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
그런 다음, 다음 cmdlet을 실행합니다.
Get-AzureStackLog -OutputPath \\myworkstation\AzureStackLogs -FilterByRole ECE