Implementatiegegevens versleutelen
Bij het uitvoeren van Azure Container Instances -resources (ACI) in de cloud, verzamelt en bewaart de ACI-service gegevens met betrekking tot uw containers. ACI versleutelt deze gegevens automatisch wanneer deze in de cloud worden bewaard. Deze versleuteling beschermt uw gegevens om te voldoen aan de beveiligings- en nalevingsverplichtingen van uw organisatie. ACI biedt u ook de mogelijkheid om deze gegevens te versleutelen met uw eigen sleutel, zodat u meer controle hebt over de gegevens met betrekking tot uw ACI-implementaties.
Over ACI-gegevensversleuteling
Gegevens in ACI worden versleuteld en ontsleuteld met behulp van 256-bits AES-versleuteling. Het is ingeschakeld voor alle ACI-implementaties en u hoeft uw implementatie of containers niet te wijzigen om te profiteren van deze versleuteling. Dit omvat metagegevens over de implementatie, omgevingsvariabelen, sleutels die worden doorgegeven aan uw containers en logboeken die worden bewaard nadat uw containers zijn gestopt, zodat u ze nog steeds kunt zien. Versleuteling heeft geen invloed op de prestaties van uw containergroep en er zijn geen extra kosten verbonden aan versleuteling.
U kunt vertrouwen op door Microsoft beheerde sleutels voor de versleuteling van uw containergegevens, of u kunt de versleuteling beheren met uw eigen sleutels. In de volgende tabel worden deze opties vergeleken:
Door Microsoft beheerde sleutels | Door klant beheerde sleutels | |
---|---|---|
Versleutelings-/ontsleutelingsbewerkingen | Azure | Azure |
Sleutelopslag | Microsoft Key Store | Azure Key Vault |
Verantwoordelijkheid voor sleutelrotatie | Microsoft | Klant |
Sleuteltoegang | Alleen Microsoft | Microsoft, klant |
In dit artikel worden twee stromen besproken voor het versleutelen van gegevens met een door de klant beheerde sleutel:
- Gegevens versleutelen met een door de klant beheerde sleutel die is opgeslagen in een standaard Azure-Key Vault
- Gegevens versleutelen met een door de klant beheerde sleutel die is opgeslagen in een azure-Key Vault met vertrouwde services ingeschakeld.
Gegevens versleutelen met een door de klant beheerde sleutel die is opgeslagen in een standaard Azure-Key Vault
Vereisten
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie Quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
Service-principal voor ACI maken
De eerste stap is om ervoor te zorgen dat aan uw Azure-tenant een service-principal is toegewezen voor het verlenen van machtigingen aan de Azure Container Instances-service.
Belangrijk
Als u de volgende opdracht wilt uitvoeren en een service-principal wilt maken, controleert u of u gemachtigd bent om service-principals in uw tenant te maken.
Met de volgende CLI-opdracht stelt u de ACI SP in uw Azure-omgeving in:
az ad sp create --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
De uitvoer van het uitvoeren van deze opdracht moet een service-principal laten zien die is ingesteld met 'displayName': 'Azure Container Instance Service'.
Als u de service-principal niet kunt maken:
- bevestigen dat u gemachtigd bent om dit te doen in uw tenant
- controleer of er al een service-principal in uw tenant bestaat voor implementatie in ACI. U kunt dit doen door in plaats daarvan die service-principal uit te voeren
az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
en te gebruiken
Een Key Vault-resource maken
Maak een Azure-sleutelkluis met Azure Portal, Azure CLI of Azure PowerShell.
Gebruik de volgende richtlijnen voor de eigenschappen van uw sleutelkluis:
- Naam: geef een unieke naam op.
- Abonnement: Kies een abonnement.
- Kies onder Resourcegroep een bestaande resourcegroep of maak een nieuwe resourcegroep en voer de naam van een resourcegroep in.
- Kies een locatie in de vervolgkeuzelijst Locatie.
- U kunt de andere opties aan de standaardwaarden laten staan of kiezen op basis van aanvullende vereisten.
Belangrijk
Wanneer u door de klant beheerde sleutels gebruikt voor het versleutelen van een ACI-implementatiesjabloon, is het raadzaam om de volgende twee eigenschappen in te stellen op de sleutelkluis, Voorlopig verwijderen en Niet opschonen. Deze eigenschappen zijn niet standaard ingeschakeld, maar kunnen worden ingeschakeld met behulp van PowerShell of Azure CLI voor een nieuwe of bestaande sleutelkluis.
Een nieuwe sleutel genereren
Nadat de sleutelkluis is gemaakt, gaat u naar de resource in Azure Portal. Klik in het linkernavigatiemenu van de resourceblade onder Instellingen op Sleutels. Klik in de weergave voor Sleutels op Genereren/importeren om een nieuwe sleutel te genereren. Gebruik een unieke naam voor deze sleutel en eventuele andere voorkeuren op basis van uw vereisten.
Toegangsbeleid instellen
Maak een nieuw toegangsbeleid om de ACI-service toegang te geven tot uw sleutel.
- Zodra uw sleutel is gegenereerd, gaat u terug naar de resourceblade van uw sleutelkluis en klikt u onder Instellingen op Toegangsbeleid.
- Klik op de pagina Toegangsbeleid voor uw sleutelkluis op Toegangsbeleid toevoegen.
- Stel de sleutelmachtigingen in om machtigingen voor sleutelsets ophalen en uitpakken op te nemen
- Selecteer Azure Container Instance Service voor Principal selecteren
- Klik onderaan op Toevoegen
Het toegangsbeleid moet nu worden weergegeven in het toegangsbeleid van uw sleutelkluis.
Uw JSON-implementatiesjabloon wijzigen
Belangrijk
Het versleutelen van implementatiegegevens met een door de klant beheerde sleutel is beschikbaar in de nieuwste API-versie (2019-12-01) die momenteel wordt geïmplementeerd. Geef deze API-versie op in uw implementatiesjabloon. Als u hier problemen mee hebt, neemt u contact op met de ondersteuning van Azure.
Zodra het sleutel- en toegangsbeleid voor de sleutelkluis zijn ingesteld, voegt u de volgende eigenschappen toe aan uw ACI-implementatiesjabloon. Meer informatie over het implementeren van ACI-resources met een sjabloon vindt u in de Zelfstudie: Een groep met meerdere containers implementeren met behulp van een Resource Manager sjabloon.
- Stel onder
resources
inapiVersion
op2019-12-01
. - Voeg onder de sectie eigenschappen van de containergroep van de implementatiesjabloon een
encryptionProperties
toe die de volgende waarden bevat:vaultBaseUrl
: de DNS-naam van uw sleutelkluis vindt u op de overzichtsblade van de sleutelkluisresource in de portalkeyName
: de naam van de sleutel die eerder is gegenereerdkeyVersion
: de huidige versie van de sleutel. U kunt dit vinden door in de sleutel zelf te klikken (onder 'Sleutels' in de sectie Instellingen van uw sleutelkluisresource)
- Voeg onder de eigenschappen van de containergroep een
sku
eigenschap toe met de waardeStandard
. Desku
eigenschap is vereist in API-versie 2019-12-01.
Het volgende sjabloonfragment bevat deze aanvullende eigenschappen voor het versleutelen van implementatiegegevens:
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
Hier volgt een volledige sjabloon, aangepast aan de sjabloon in Zelfstudie: Een groep met meerdere containers implementeren met behulp van een Resource Manager sjabloon.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
Uw resources implementeren
Als u het sjabloonbestand op uw bureaublad hebt gemaakt en bewerkt, kunt u het uploaden naar uw Cloud Shell map door het bestand ernaartoe te slepen.
Een resourcegroep maken met de opdracht az group create.
az group create --name myResourceGroup --location eastus
Implementeer de sjabloon met de opdracht az deployment group create .
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
U ontvangt binnen enkele seconden een eerste reactie van Azure. Zodra de implementatie is voltooid, worden alle gegevens met betrekking tot de implementatie die door de ACI-service worden bewaard, versleuteld met de sleutel die u hebt opgegeven.
Gegevens versleutelen met een door de klant beheerde sleutel in een azure-Key Vault met netwerkbeveiliging waarvoor Vertrouwde services zijn ingeschakeld
Een Key Vault-resource maken
Maak een Azure-sleutelkluis met Azure Portal, Azure CLI of Azure PowerShell. Pas om te beginnen geen netwerkbeperkingen toe, zodat we de benodigde sleutels aan de kluis kunnen toevoegen. In de volgende stappen voegen we netwerkbeperkingen toe en schakelen we vertrouwde services in.
Gebruik de volgende richtlijnen voor de eigenschappen van uw sleutelkluis:
- Naam: geef een unieke naam op.
- Abonnement: Kies een abonnement.
- Kies onder Resourcegroep een bestaande resourcegroep of maak een nieuwe resourcegroep en voer de naam van een resourcegroep in.
- Kies een locatie in de vervolgkeuzelijst Locatie.
- U kunt de andere opties aan de standaardwaarden laten staan of kiezen op basis van aanvullende vereisten.
Belangrijk
Wanneer u door de klant beheerde sleutels gebruikt voor het versleutelen van een ACI-implementatiesjabloon, is het raadzaam om de volgende twee eigenschappen in te stellen op de sleutelkluis, Voorlopig verwijderen en Niet opschonen. Deze eigenschappen zijn niet standaard ingeschakeld, maar kunnen worden ingeschakeld met behulp van PowerShell of Azure CLI voor een nieuwe of bestaande sleutelkluis.
Een nieuwe sleutel genereren
Nadat de sleutelkluis is gemaakt, gaat u naar de resource in Azure Portal. Klik in het linkernavigatiemenu van de resourceblade onder Instellingen op Sleutels. Klik in de weergave voor Sleutels op Genereren/importeren om een nieuwe sleutel te genereren. Gebruik een unieke naam voor deze sleutel en eventuele andere voorkeuren op basis van uw vereisten. Zorg ervoor dat u de sleutelnaam en versie vastlegt voor de volgende stappen.
Een door de gebruiker toegewezen beheerde identiteit maken voor uw containergroep
Maak een identiteit in uw abonnement met behulp van de opdracht az identity create . U kunt dezelfde resourcegroep gebruiken die is gebruikt om de sleutelkluis te maken of een andere gebruiken.
az identity create \
--resource-group myResourceGroup \
--name myACIId
Als u de identiteit in de volgende stappen wilt gebruiken, gebruikt u de opdracht az identity show om de service-principal-id en resource-id van de identiteit op te slaan in variabelen.
# Get service principal ID of the user-assigned identity
spID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)
Toegangsbeleid instellen
Maak een nieuw toegangsbeleid om de door de gebruiker toegewezen identiteit toegang te geven tot uw sleutel en deze uit te pakken voor versleutelingsdoeleinden.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $spID \
--key-permissions get unwrapKey
Netwerkmachtigingen van Azure Key Vault wijzigen
Met de volgende opdrachten wordt een Azure Firewall ingesteld voor uw Azure Key Vault en wordt vertrouwde Azure-services, zoals ACI-toegang, toegestaan.
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--default-action Deny
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--bypass AzureServices
Uw JSON-implementatiesjabloon wijzigen
Belangrijk
Het versleutelen van implementatiegegevens met een door de klant beheerde sleutel is beschikbaar in api-versie 2022-09-01 of hoger. De API-versie 2022-09-01 is alleen beschikbaar via ARM of REST. Als u hier problemen mee hebt, neemt u contact op met de ondersteuning van Azure. Zodra het sleutel- en toegangsbeleid voor de sleutelkluis zijn ingesteld, voegt u de volgende eigenschappen toe aan uw ACI-implementatiesjabloon. Meer informatie over het implementeren van ACI-resources met een sjabloon vindt u in de Zelfstudie: Een groep met meerdere containers implementeren met behulp van een Resource Manager sjabloon.
- Stel onder
resources
inapiVersion
op2022-09-01
. - Voeg onder de sectie eigenschappen van de containergroep van de implementatiesjabloon een
encryptionProperties
toe die de volgende waarden bevat:vaultBaseUrl
: de DNS-naam van uw sleutelkluis. U vindt deze op de overzichtsblade van de sleutelkluisresource in de portalkeyName
: de naam van de sleutel die eerder is gegenereerdkeyVersion
: de huidige versie van de sleutel. U kunt dit vinden door in de sleutel zelf te klikken (onder 'Sleutels' in de sectie Instellingen van uw sleutelkluisresource)identity
: dit is de resource-URI van het beheerde identiteitsexemplaar dat u eerder hebt gemaakt
- Voeg onder de eigenschappen van de containergroep een
sku
eigenschap toe met de waardeStandard
. Desku
eigenschap is vereist in API-versie 2022-09-01. - Voeg onder resources het object toe dat is vereist voor het
identity
gebruik van beheerde identiteit met ACI, dat de volgende waarden bevat:type
: het type identiteit dat wordt gebruikt (door de gebruiker toegewezen of door het systeem toegewezen). Deze case wordt ingesteld op UserAssigneduserAssignedIdentities
: de resource-URI van dezelfde door de gebruiker toegewezen identiteit die hierboven in hetencryptionProperties
-object is gebruikt.
Het volgende sjabloonfragment bevat deze aanvullende eigenschappen voor het versleutelen van implementatiegegevens:
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
Hier volgt een volledige sjabloon, aangepast aan de sjabloon in Zelfstudie: Een groep met meerdere containers implementeren met behulp van een Resource Manager sjabloon.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2022-09-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
Uw resources implementeren
Als u het sjabloonbestand op uw bureaublad hebt gemaakt en bewerkt, kunt u het uploaden naar uw Cloud Shell map door het bestand ernaartoe te slepen.
Een resourcegroep maken met de opdracht az group create.
az group create --name myResourceGroup --location eastus
Implementeer de sjabloon met de opdracht az deployment group create .
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
U ontvangt binnen enkele seconden een eerste reactie van Azure. Zodra de implementatie is voltooid, worden alle gegevens met betrekking tot de implementatie die door de ACI-service worden bewaard, versleuteld met de sleutel die u hebt opgegeven.