Udostępnij za pośrednictwem


Aplikacje, klucze interfejsu API i wpisy tajne usługi Azure Key Vault

Azure Key Vault to usługa platformy Azure, która chroni klucze kryptograficzne, wpisy tajne i certyfikaty. Zapewnia scentralizowane, bezpieczne i wysoce dostępne repozytorium informacji poufnych, takich jak klucze interfejsu API. Jedną z metod unikania niezabezpieczonego osadzenia kluczy interfejsu API bezpośrednio w kodzie źródłowym aplikacji jest skonfigurowanie aplikacji w celu bezpiecznego korzystania z kluczy interfejsu API przechowywanych w usłudze Azure Key Vault.

Z tego artykułu dowiesz się, jak utworzyć wystąpienie usługi Key Vault, dodać klucz interfejsu API jako wpis tajny do tego magazynu kluczy, a następnie skonfigurować magazyn kluczy przy użyciu najlepszych rozwiązań. Te najlepsze rozwiązania obejmują ograniczanie dostępu przy użyciu kontroli dostępu opartej na rolach (RBAC), włączanie monitorowania i ograniczanie dostępu do sieci.

Tworzenie i zabezpieczanie wystąpienia usługi Azure Key Vault

Usługa Azure Key Vault umożliwia bezpieczne przechowywanie kluczy kryptograficznych, wpisów tajnych i certyfikatów. Należy wdrożyć oddzielne magazyny kluczy dla różnych środowisk (programowanie, przemieszczanie, produkcja) i aplikacje.

Tworzenie grupy zasobów i wystąpienia magazynu kluczy

Aby utworzyć wystąpienie magazynu kluczy, możesz użyć następującego polecenia z poziomu interfejsu wiersza polecenia platformy Azure lub usługi Azure Cloud Shell:

  1. Użyj polecenia , az group create aby utworzyć grupę zasobów:

    az group create --name myResourceGroup --location eastus
    

    Jeśli wolisz, możesz zmienić "eastus" na lokalizację bliżej Ciebie.

  2. Użyj az keyvault create polecenia , aby utworzyć magazyn kluczy:

    az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
    

    Zastąp <your-unique-keyvault-name> ciąg nazwą unikatową na całej platformie Azure. Zazwyczaj używasz swojej osobistej lub firmowej nazwy wraz z innymi numerami i identyfikatorami.

Dodawanie klucza interfejsu API do usługi Azure Key Vault jako wpisu tajnego

Po utworzeniu wystąpienia usługi Azure Key Vault możesz dodać klucz interfejsu API jako wpis tajny do tego wystąpienia usługi Azure Key Vault.

Poniższe polecenie używa polecenia az keyvault secret set interfejsu wiersza polecenia platformy Azure, aby dodać wpis tajny o nazwie MyApiKey do usługi keyvault i ustawia wpis tajny wygasa po upływie 180 dni:

az keyvault secret set \
    --vault-name "<YourKeyVaultName>" \
    --name "MyApiKey" \
    --value "<YourSecretValue>"
    --expires "$(date -u -d '+180 days' +'%Y-%m-%dT%H:%M:%SZ')"

Należy okresowo obracać klucze interfejsu API. W zależności od potrzeb organizacji w zakresie zabezpieczeń można wymieniać klucze rzadziej niż co 180 dni. Subskrypcję usługi Event Grid można skonfigurować dla zdarzenia "SecretNearExpiry" jako metodę odbierania powiadomienia o wygasających wpisach tajnych klucza interfejsu API.

Ograniczanie dostępu do usługi Key Vault przy użyciu kontroli dostępu opartej na rolach

Możesz ograniczyć dostęp do wystąpienia usługi Azure Key Vault, aby tylko tożsamość aplikacji mogła uzyskiwać dostęp do usługi Azure Key Vault.

W tym celu skonfiguruj rolę kontroli dostępu opartej na rolach (RBAC) przy użyciu polecenia az role assignment create interfejsu wiersza polecenia platformy Azure:

az role assignment create --role "Key Vault Secrets User" \
  --assignee <object-id-of-app-or-user> \
  --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<key-vault-name>

Włączanie rejestrowania i alertów usługi Key Vault

Rejestrowanie i alerty w wystąpieniu usługi Key Vault należy włączyć jako metodę wykrywania potencjalnie podejrzanych działań.

Aby włączyć rejestrowanie i alerty usługi Azure Key Vault, użyj polecenia az monitor diagnostic-settings create interfejsu wiersza polecenia platformy Azure:

az monitor diagnostic-settings create \
    --name myDiagnosticSettings \
    --resource {key-vault-resource-id} \
    --logs '[{"category": "AuditEvent","enabled": true}]' \
    --workspace {log-analytics-workspace-id}

To polecenie tworzy ustawienie diagnostyczne o nazwie myDiagnosticSettings, konfiguruje AuditEvent je dla określonej usługi Azure Key Vault, włącza kategorię dziennika, która śledzi zdarzenia związane z zabezpieczeniami i dostępem oraz wysyła dzienniki do określonego obszaru roboczego usługi Log Analytics na potrzeby monitorowania, analizy i alertów. Dzięki temu można monitorować wzorce dostępu, wykrywać nieautoryzowane próby dostępu i konfigurować alerty dotyczące krytycznych zdarzeń zabezpieczeń (na przykład ktoś próbuje uzyskać dostęp do wpisu tajnego bez odpowiednich uprawnień).

Możesz uruchomić polecenie az monitor scheduled-query create interfejsu wiersza polecenia platformy Azure, aby monitorować dzienniki w określonym obszarze roboczym usługi Log Analytics w celu uzyskania nieautoryzowanych prób dostępu do wpisów tajnych usługi Azure Key Vault i wyzwolić alert, jeśli zostanie wykryta odpowiednia nieautoryzowana próba dostępu:

az monitor scheduled-query create \
    --name "Suspicious Access Alert" \
    --resource-group myResourceGroup \
    --scopes {log-analytics-workspace-resource-id} \
    --condition "AzureDiagnostics | where ResourceType == 'VAULTS' | where OperationName == 'SecretGet' | where ResultSignature == 'Unauthorized'"

Ograniczanie dostępu sieciowego do usługi Key Vault

Należy ograniczyć dostęp sieciowy do usługi Azure Key Vault, aby magazyn akceptował tylko żądania ze znanych lokalizacji sieciowych. Istnieją dwie ogólne metody, których można użyć, aby to zrobić:

  • Azure Private Link. Spowoduje to utworzenie prywatnego punktu końcowego w sieci wirtualnej, dzięki czemu aplikacja może łączyć się z usługą Azure Key Vault bez przechodzenia przez publiczny Internet. Ta opcja jest najbezpieczniejsza, ponieważ ruch pozostaje w sieci, ale wymaga utworzenia prywatnego punktu końcowego i skonfigurowania systemu DNS.
  • Reguły zapory. Ustawienia zapory usługi Azure Key Vault można skonfigurować w obszarze Sieci z listą dozwolonych zakresów adresów IP. Można również użyć tej metody, aby zezwolić na dostęp do istniejących sieci wirtualnych, ale wymaga to włączenia punktu końcowego usługi dla usługi Microsoft.KeyVault w wybranej podsieci.

Prywatny punkt końcowy można utworzyć przy użyciu polecenia az network private-endpoint create interfejsu wiersza polecenia platformy Azure:

az network private-endpoint create \
    --name myPrivateEndpoint \
    --resource-group myResourceGroup \
    --vnet-name myVNet \
    --subnet mySubnet \
    --private-connection-resource-id /subscriptions/{subscription}/resourceGroups/{rg}/providers/Microsoft.KeyVault/vaults/{key-vault-name} \
    --group-id vault \
    --connection-name myConnection

You can create firewall rules on the Azure Key Vault instance using the Azure CLI [az keyvault network-rule add](/cli/azure/keyvault/network-rule#az-keyvault-network-rule-add) command, substituting the appropriate key vault names, resource groups, subnet, and subnet mask information:

```azurecli
az keyvault network-rule add \
    --name {key-vault-name} \
    --resource-group myResourceGroup \
    --ip-address {trusted-ip-address}/32

Usługa Azure Key Vault wymusza protokół HTTPS dla całej komunikacji. Dzięki temu klucze interfejsu API i inne poufne dane są szyfrowane podczas przesyłania, chroniąc je przed podsłuchiwaniem i atakami typu man-in-the-middle.

Interakcja z usługą Azure Key Vault przy użyciu języka Python

Aby wchodzić w interakcje z usługą Azure Key Vault przy użyciu języka Python, zainstaluj bibliotekę tożsamości platformy Azure dla identyfikatora Entra firmy Microsoft i bibliotekę wpisów tajnych usługi Azure Key Vault:

pip install azure-identity
pip install azure-keyvault-secrets

Za pomocą biblioteki klienta Azure Identity i Azure Key Vault Secrets można programowo zarządzać wpisami tajnymi:

from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

key_vault_name = "<your-key-vault-name>"
KVUri = f"https://{key_vault_name}.vault.azure.net"
secret_name = "<your-secret-name>"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

retrieved_secret = client.get_secret(secret_name)

# Now you can use the API key:

api_key = retrieved_secret.value
print(f"The API key is: {api_key}")

W tym przykładowym kodzie:

  • DefaultAzureCredential: ta klasa próbuje uwierzytelnić się przy użyciu różnych metod (zmiennych środowiskowych, tożsamości zarządzanych itp.), dzięki czemu jest odpowiednia dla różnych środowisk platformy Azure.
  • SecretClient: ta klasa udostępnia metody interakcji z wpisami tajnymi w usłudze Key Vault.
  • get_secret(): pobiera wpis tajny z usługi Key Vault.

Następne kroki