Implementatiegegevens versleutelen
Wanneer u ACI-resources (Azure Container Instances) uitvoert in de cloud, verzamelt en bewaart de ACI-service gegevens met betrekking tot uw containers. ACI versleutelt deze gegevens automatisch wanneer deze zich in de cloud bevinden. 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 die betrekking hebben op uw ACI-implementaties.
ACI-gegevensversleuteling
Gegevens in ACI worden versleuteld en ontsleuteld met 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. Deze dekking 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 verdere kosten voor 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 | Customer |
Sleuteltoegang | Alleen Microsoft | Microsoft, Klant |
In dit artikel worden twee stromen beoordeeld 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 met het netwerk beveiligde Azure Key Vault waarvoor Vertrouwde services zijn 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 maken voor ACI
De eerste stap is ervoor te zorgen dat uw Azure-tenant een service-principal heeft 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 te maken in uw tenant.
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
In de uitvoer van het uitvoeren van deze opdracht ziet u een service-principal 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 bestaat in uw tenant 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 op de standaardinstellingen laten staan of kiezen op basis van aanvullende vereisten.
Belangrijk
Wanneer u door de klant beheerde sleutels gebruikt om een ACI-implementatiesjabloon te versleutelen, wordt aanbevolen dat de volgende twee eigenschappen worden ingesteld op de sleutelkluis, Voorlopig verwijderen en Niet leegmaken. Deze eigenschappen zijn niet standaard ingeschakeld, maar kunnen worden ingeschakeld met behulp van PowerShell of Azure CLI in een nieuwe of bestaande sleutelkluis.
Een nieuwe sleutel genereren
Zodra uw sleutelkluis is gemaakt, gaat u naar de resource in Azure Portal. Selecteer Sleutels in het linkernavigatiemenu van de resourceblade onder Instellingen. Selecteer 'Genereren/importeren' in de weergave voor Sleutels 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, selecteert u toegangsbeleid in de resourceblade van de sleutelkluis onder Instellingen.
- Kies Op de pagina Toegangsbeleid voor uw sleutelkluis de optie Toegangsbeleid toevoegen.
- Stel de sleutelmachtigingen in om Sleutel ophalen en uitpakken op te nemen
- Selecteer Azure Container Instance Service voor Select Principal
- Selecteer Toevoegen onderaan
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 de sleutel en het 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 in de zelfstudie: Een groep met meerdere containers implementeren met behulp van een Resource Manager-sjabloon.
- Stel onder
resources
in op2019-12-01
apiVersion
. - Voeg onder de sectie eigenschappen van de containergroep van de implementatiesjabloon een
encryptionProperties
, die de volgende waarden bevat, toe:vaultBaseUrl
: de DNS-naam van uw sleutelkluis, die te vinden is op de overzichtsblade van de sleutelkluisresource in de portalkeyName
: de naam van de sleutel die eerder is gegenereerdkeyVersion
: de huidige versie van de sleutel. Dit veld vindt u door naar de sleutel zelf te gaan (onder Sleutels in de sectie Instellingen van uw sleutelkluisresource)
- Voeg onder de eigenschappen van de containergroep een
sku
eigenschap met waardeStandard
toe. Desku
eigenschap is vereist in API-versie 2019-12-01.
In het volgende sjabloonfragment ziet u 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": {
[...]
}
}
}
]
Hieronder 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 die eraan zijn gerelateerd door de ACI-service versleuteld met de sleutel die u hebt opgegeven.
Gegevens versleutelen met een door de klant beheerde sleutel in een met een netwerk beveiligde Azure Key Vault 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 op de standaardinstellingen laten staan of kiezen op basis van aanvullende vereisten.
Belangrijk
Wanneer u door de klant beheerde sleutels gebruikt om een ACI-implementatiesjabloon te versleutelen, wordt aanbevolen dat de volgende twee eigenschappen worden ingesteld op de sleutelkluis, Voorlopig verwijderen en Niet leegmaken. Deze eigenschappen zijn niet standaard ingeschakeld, maar kunnen worden ingeschakeld met behulp van PowerShell of Azure CLI in een nieuwe of bestaande sleutelkluis.
Een nieuwe sleutel genereren
Zodra uw sleutelkluis is gemaakt, gaat u naar de resource in Azure Portal. Selecteer Sleutels in het linkernavigatiemenu van de resourceblade onder Instellingen. Kies 'Genereren/importeren' in de weergave voor Sleutels 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 wordt gebruikt om de sleutelkluis te maken of een andere te 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 uit te pakken voor versleutelingsdoeleinden.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $spID \
--key-permissions get unwrapKey
De netwerkmachtigingen van Azure Key Vault wijzigen
Met de volgende opdrachten stelt u een Azure Firewall in voor uw Azure Key Vault en staat u vertrouwde Azure-services zoals ACI-toegang toe.
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 de 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 de sleutel en het 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 in de zelfstudie: Een groep met meerdere containers implementeren met behulp van een Resource Manager-sjabloon.
- Stel onder
resources
in op2022-09-01
apiVersion
. - Voeg onder de sectie eigenschappen van de containergroep van de implementatiesjabloon een
encryptionProperties
, die de volgende waarden bevat, toe:vaultBaseUrl
: de DNS-naam van uw sleutelkluis. Deze eigenschap 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. Deze eigenschap vindt u door te klikken op de sleutel zelf (onder Sleutels in de sectie Instellingen van uw sleutelkluisresource)identity
: deze eigenschap is de resource-URI van het exemplaar van beheerde identiteit dat u eerder hebt gemaakt
- Voeg onder de eigenschappen van de containergroep een
sku
eigenschap met waardeStandard
toe. Desku
eigenschap is vereist in API-versie 2022-09-01. - Voeg onder resources het
identity
object toe dat is vereist voor het gebruik van beheerde identiteit met ACI, die de volgende waarden bevat:type
: het type identiteit dat wordt gebruikt (door de gebruiker toegewezen of door het systeem toegewezen). Dit geval is ingesteld op UserAssigneduserAssignedIdentities
: de resourceURI van dezelfde door de gebruiker toegewezen identiteit die in hetencryptionProperties
object wordt gebruikt.
In het volgende sjabloonfragment ziet u 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": {
[...]
}
}
}
]
Hieronder 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 die eraan zijn gerelateerd door de ACI-service versleuteld met de sleutel die u hebt opgegeven.