Share via


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

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.

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, 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 Sleutelmachtigingen instellen
  • Selecteer Azure Container Instance Service voor Select Principal
  • Selecteer Toevoegen onderaan

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 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 resourcesin op 2019-12-01apiVersion .
  • 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 portal
    • keyName: de naam van de sleutel die eerder is gegenereerd
    • keyVersion: 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 waarde Standardtoe. De sku 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.

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 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 resourcesin op 2022-09-01apiVersion .
  • 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 portal
    • keyName: de naam van de sleutel die eerder is gegenereerd
    • keyVersion: 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 waarde Standardtoe. De sku 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 UserAssigned
    • userAssignedIdentities: de resourceURI van dezelfde door de gebruiker toegewezen identiteit die in het encryptionProperties 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.