Azure Keyvault 秘密自动轮换和到期前通知

问题描述 投票:0回答:1

寻找一种自动化方法,在 1 个月前设置 Azure Keyvault 密钥过期通知,并根据 Azure Devops 管道端或自动化流程中的任何方式批准后续订过期日期。

azure azure-devops azure-functions azure-keyvault
1个回答
0
投票

如果您想使用Azure DevOps,您可以将其与事件网格和自动化帐户集成以满足您的需求。

  1. 通过事件网格接收 Key Vault 通知。
  2. Azure KeyVault 事件通过 Webhook 触发自动化帐户的 Runbook。 Runbook 通过 Azure DevOps REST API“Runs - Run Pipeline”触发 DevOps 管道。
  3. DevOps 管道使用环境来设置审批者并运行 Azure PowerShell 来更新密钥的过期时间。

对于第一步和第二步,请参阅文档中的详细步骤使用 Azure 事件网格接收和响应密钥保管库通知

a.创建 Runbook 时,请将 Runbook 替换为以下脚本。另外,替换 {} 中的值。

param
(
[Parameter (Mandatory = $false)]
[object] $WebhookData
)

#If runbook was called from Webhook, WebhookData will not be null.
if ($WebhookData) {
#Run Azure DevOps REST API to trigger the pipeline
$token = "{Azure DevOps PAT}"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$url="https://dev.azure.com/{Azure DevOps Org name}/{Project name}/_apis/pipelines/{Pipeline id}/runs?api-version=7.1-preview.1"
$body = @'
{
    "stagesToSkip": [],
    "resources": {
        "repositories": {
            "self": {
                "refName": "refs/heads/main"
            }
        }
    },
    "variables": {}
}
'@
$head = @{ Authorization =" Basic $token" }
Invoke-RestMethod -Uri $url -Method Post -Headers $head -Body $body -ContentType application/json
}
else
{
# Error
write-Error "No input data found." 
}

b.当您在 KeyVault 中创建事件网格订阅时,请将“事件类型过滤器”设置为 SecretNearExpiry

第三步

a.创建一个没有任何资源的环境,并从批准和检查添加批准者。

b.使用以下 yaml 创建管道。

jobs:
- deployment: Deploy
  displayName: deploy KeyVault
  pool:
    vmImage: 'windows-latest'
  environment: 'KeyVault'
  strategy: 
    runOnce:
      deploy:
        steps:
         - task: AzurePowerShell@5
           inputs:
             azureSubscription: '{ARM service connection used to access your KeyVault}'
             ScriptType: 'InlineScript'
             Inline: |
                $Expires = (Get-Date).AddYears(2).ToUniversalTime()
                Update-AzKeyVaultSecret -VaultName '{Your KeyVault Name}' -Name '{Your Secret Name}' -Expires $Expires
             azurePowerShellVersion: 'LatestVersion'

当管道被触发时,需要经过审批者的批准才能运行。

如果更新密钥的操作不需要批准,您可以直接使用自动化帐户的 Runbook 来更新过期时间。此外,您还可以考虑使用Azure Function应用程序。有关详细信息,请参阅自动轮换使用一组身份验证凭据的资源的密钥自动轮换具有两组身份验证凭据的资源的密钥

© www.soinside.com 2019 - 2024. All rights reserved.