如何设计地理围栏的条件访问策略以允许单个用户国家例外?

如何设计地理围栏的条件访问策略以允许单个用户国家例外?

在 AzureAD 中,我有一个全局条件访问策略 (cap),可防止用户从未经批准的国家/地区访问其帐户(我确实意识到这不是保护环境的准确/可靠的方法)。我们也为这些配置了 MFA。

当人们旅行时,我们将他们放入例外组,以便他们可以去巴厘岛或其他地方。

在我们通常禁止的地区(例如印度、加纳等)进行远程工作的人员名单有限。对于这些人,他们永远在例外名单中。该名单是临时的。

我可以为这些个人用户制定更多 CAP,但如果我制定了“阻止除印度以外的所有用户”政策,那么这可能会失控,这些用户将被排除在主要政策之外。很快就会变得一团糟。

我希望能够说,一个人可以去这个国家,但其他人和其他人一样被禁止。我能说的是,CAP 不是为了粒度。

是否存在我可以使用 CAP 方法来实现我所描述的内容?

答案1

您可以使用 PowerShell 脚本创建自动化运行手册,该脚本将用户添加到组并在该月后自动将其从组中删除。PowerShell 脚本将在存储帐户中创建一个文件,其中包含用户 x 的排除日期,然后同一运行手册中的其他脚本查询该文件并在用户在该组中(例如一个月)时删除该文件。这确实需要一些自定义脚本工作,然后将该组从有条件访问中的未批准位置中排除。

以下是这两个脚本的示例

# Script 1: addUserToGroup.ps1

# Define variables
$storageAccountName = "<storage_account_name>"
$containerName = "<container_name>"
$fileName = "exclusion_dates.txt"
$groupName = "<group_name>"
$username = "<username>"

# Add user to the group
Add-ADGroupMember -Identity $groupName -Members $username

# Get the current date and calculate the exclusion date (1 month later)
$currentDate = Get-Date
$exclusionDate = $currentDate.AddMonths(1)

# Format the exclusion date
$formattedDate = Get-Date $exclusionDate -Format "yyyy-MM-dd"

# Create or update the file in the storage account with the exclusion date
$filePath = "$containerName/$fileName"
"$username $formattedDate" | Set-Content -Path $filePath -Force

Write-Host "User $username added to group $groupName. Exclusion date recorded."

# Script 2: checkExclusionAndRemoveUser.ps1

# Define variables
$storageAccountName = "<storage_account_name>"
$containerName = "<container_name>"
$fileName = "exclusion_dates.txt"
$groupName = "<group_name>"
$username = "<username>"

# Get the current date
$currentDate = Get-Date

# Query the file for user exclusion date
$filePath = "$containerName/$fileName"
$exclusionInfo = Get-Content -Path $filePath

# Check if the user should be removed from the group
if ($exclusionInfo -ne $null -and $exclusionInfo -match "$username (\d{4}-\d{2}-\d{2})") {
    $storedDate = $matches[1]
    $storedDateObject = Get-Date $storedDate
    if ($currentDate -ge $storedDateObject) {
        # Remove user from the group
        Remove-ADGroupMember -Identity $groupName -Members $username -Confirm:$false

        # Log the removal event (you can customize this part)
        $logFilePath = "group_removal_log.txt"
        "$currentDate: Removed $username from $groupName" | Out-File -Append -FilePath $logFilePath

        Write-Host "User $username removed from group $groupName."
    }
    else {
        Write-Host "User $username is still within the exclusion period."
    }
}
else {
    Write-Host "No exclusion information found for user $username."
}

相关内容