Azure AD 클라이언트 암호 만료

3619 단어
오늘 아침 클라이언트는 웹사이트가 작동하지 않는다고 불평합니다. 몇 가지 확인을 하고 실제로 오류가 있음을 확인합니다.

표시되는 오류는 다음과 같습니다.

An unhandled exception occurred while processing the request.
MsalServiceException: A configuration issue is preventing authentication 
- check the error message from the server for details. 
You can modify the configuration in the application registration portal. 
See https://aka.ms/msal-net-invalid-client for details. 
Original exception: AADSTS7000222: The provided client secret keys for 
app '00000000-0000-0000-0000-000000000000' are expired. 
Visit the Azure portal to create new keys for your app: https://aka.ms/NewClientSecret, 
or consider using certificate credentials for added security: https://aka.ms/certCreds.



이에 대한 수정은 비교적 간단합니다. Azure AD에서 새 클라이언트 암호를 생성하고 이를 사용하도록 웹 사이트 구성을 업데이트합니다.

문제는 이 문제가 비밀에 설정한 만료 날짜에 따라 3, 6, 12, 18 또는 24개월 후에 다시 발생한다는 것입니다.



Twitter의 제안은 Logic Apps 및 Event Grid가 이 문제를 해결하는 데 도움이 될 수 있다는 것입니다. 이것이 어떻게 작동하는지 봅시다.

Logic Apps에는 소비 계획이 있으므로 이러한 종류의 솔루션은 실행당 비용(예: 매일/매주 등)만 있으므로 비용이 많이 들지 않아야 합니다.

그러나 먼저 다음 30일 내에 만료될 모든 비밀을 나열하는 powershell 스크립트가 있습니다.

#secret expiration date filter (for example 30 days)
$LimitExpirationDays = 30

#Retrieving the list of secrets that expires in the above range of days
$SecretsToExpire = Get-AzureADApplication -All:$true | ForEach-Object {
    $app = $_
    @(
        Get-AzureADApplicationPasswordCredential -ObjectId $_.ObjectId
        Get-AzureADApplicationKeyCredential -ObjectId $_.ObjectId
    ) | Where-Object {
        $_.EndDate -lt (Get-Date).AddDays($LimitExpirationDays)
    } | ForEach-Object {
        $id = "Not set"
        if($_.CustomKeyIdentifier) {
            $id = [System.Text.Encoding]::UTF8.GetString($_.CustomKeyIdentifier)
        }
        [PSCustomObject] @{
            App = $app.DisplayName
            ObjectID = $app.ObjectId
            AppId = $app.AppId
            Type = $_.GetType().name
            KeyIdentifier = $id
            EndDate = $_.EndDate
        }
    }
}

#Printing the list of secrets that are near to expire
if($SecretsToExpire.Count -EQ 0) {
    Write-Output "No secrets found that will expire in this range"
}
else {
    Write-Output "Secrets that will expire in this range:"
    Write-Output $SecretsToExpire.Count
    Write-Output $SecretsToExpire
}



이것은 꽤 잘 작동하지만 수동으로 자주 실행해야 합니다. 내 Azure AD 테넌트에 구성된 MFA를 통과하는 방법을 모르기 때문에 이를 자동화하는 방법을 찾지 못했습니다.

이제 Logic App이 어떻게 도움이 되는지 살펴보겠습니다. 먼저 만료 날짜를 쿼리할 곳이 필요하며 Azure Key Vault는 이를 저장하기에 이상적인 장소입니다.

아직 Key Vault가 없는 경우 Key Vault를 만들고 새 비밀을 추가합니다. Azure AD에서 클라이언트 암호를 수동으로 추가하고 식별할 수 있는 이름을 지정합니다. 만료 날짜 설정을 선택하고 암호의 만료 날짜를 저장합니다.

이제 논리 앱을 만들고 소비를 사용하므로 실행 시에만 비용이 발생합니다.

Logic Apps 디자이너를 사용하여 되풀이 트리거로 시작합니다. 이렇게 하면 논리 앱을 일정에 따라 대기할 수 있습니다. 저는 30일마다 실행되도록 설정했습니다.

다음으로 Key Vault에서 Get Secret 명령을 실행합니다. 이전에 암호를 저장한 식별 이름을 선택합니다. 이것은 Key Vault에서 비밀을 검색합니다. 설정으로 이동하면 만료 날짜에만 관심이 있으므로 출력을 숨길 수 있습니다.

나는 지금 낮은 기술 솔루션을 수행하고 있으며 만료 날짜를 이메일로 보내고 있습니다. 비밀의 만료 날짜를 이메일에 추가하는 것은 쉽습니다.

나중에 만료가 30일 미만일 때 나에게만 이메일을 보내는 논리를 조금 더 추가하여 새 비밀을 생성하라는 알림을 받을 수 있습니다. Azure AD에서 새 비밀을 만들 때 비밀과 만료 날짜도 Key Vault에 추가해야 합니다.

최소한 이 솔루션은 내 비밀이 만료되려는 시기를 조기에 알려줄 것입니다. 내 웹 사이트에서 내가 잘 조사할 수 있는 Key Vault의 정보를 직접 읽을 수 있습니다.

좋은 웹페이지 즐겨찾기