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

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.

Een nieuwe sleutel genereren

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.

Nieuw toegangsbeleid

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 resourcesin apiVersion op 2019-12-01.
  • Voeg onder de sectie eigenschappen van de containergroep van de implementatiesjabloon een encryptionPropertiestoe die de volgende waarden bevat:
    • vaultBaseUrl: de DNS-naam van uw sleutelkluis vindt u op de overzichtsblade van de sleutelkluisresource in de portal
    • keyName: de naam van de sleutel die eerder is gegenereerd
    • keyVersion: 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 waarde Standard. De sku 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.

Schermopname van de instellingen voor het maken van sleutels, PNG.

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 resourcesin apiVersion op 2022-09-01.
  • Voeg onder de sectie eigenschappen van de containergroep van de implementatiesjabloon een encryptionPropertiestoe die de volgende waarden bevat:
    • vaultBaseUrl: de DNS-naam van uw sleutelkluis. U vindt deze op de overzichtsblade van de sleutelkluisresource in de portal
    • keyName: de naam van de sleutel die eerder is gegenereerd
    • keyVersion: 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 waarde Standard. De sku 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 UserAssigned
    • userAssignedIdentities: de resource-URI van dezelfde door de gebruiker toegewezen identiteit die hierboven in het encryptionProperties -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.