How to use managed identities with Azure Container Instances

Az Azure-erőforrások felügyelt identitásaival olyan kódot futtathat az Azure Container Instancesben, amely más Azure-szolgáltatásokkal kommunikál – anélkül, hogy titkos kulcsokat vagy hitelesítő adatokat tartana fenn a kódban. A szolgáltatás automatikusan felügyelt identitással rendelkező Azure Container Instances-példányokat biztosít a Microsoft Entra ID-ban.

Ebben a cikkben többet tudhat meg az Azure Container Instances felügyelt identitásairól, valamint a következőkkel:

  • Felhasználó által hozzárendelt vagy rendszer által hozzárendelt identitás engedélyezése egy tárolócsoportban
  • Identitáshozzáférés biztosítása egy Azure Key Vaulthoz
  • Kulcstartó elérése a felügyelt identitással egy futó tárolóból

A példák adaptálása az Azure Container Instances identitásainak engedélyezéséhez és használatához más Azure-szolgáltatások eléréséhez. Ezek a példák interaktívak. A gyakorlatban azonban a tárolórendszerképek kódot futtatnának az Azure-szolgáltatások eléréséhez.

Miért érdemes felügyelt identitást használni?

Felügyelt identitás használata egy futó tárolóban a Microsoft Entra-hitelesítést támogató szolgáltatások hitelesítéséhez anélkül, hogy hitelesítő adatokat kezel a tárolókódban. Az AD-hitelesítést nem támogató szolgáltatások esetében titkos kulcsokat tárolhat egy Azure-kulcstartóban, és a felügyelt identitással hozzáférhet a kulcstartóhoz a hitelesítő adatok lekéréséhez. További információ a felügyelt identitások használatáról: Mi az Azure-erőforrások felügyelt identitása?

Felügyelt identitás engedélyezése

Tárolócsoport létrehozásakor engedélyezzen egy vagy több felügyelt identitást egy ContainerGroupIdentity tulajdonság beállításával. A felügyelt identitásokat a tárolócsoport futtatása után is engedélyezheti vagy frissítheti – bármelyik művelet miatt újraindul a tárolócsoport. Az identitások új vagy meglévő tárolócsoporton való beállításához használja az Azure CLI-t, egy Resource Manager-sablont, egy YAML-fájlt vagy egy másik Azure-eszközt.

Az Azure Container Instances a felügyelt Azure-identitások mindkét típusát támogatja: a felhasználó által hozzárendelt és a rendszer által hozzárendelt identitásokat. Tárolócsoportokban engedélyezheti a rendszer által hozzárendelt identitásokat, egy vagy több felhasználó által hozzárendelt identitást vagy mindkét identitástípust. Ha nem ismeri az Azure-erőforrások felügyelt identitását, tekintse meg az áttekintést.

Felügyelt identitás használata

A felügyelt identitás használatához az identitásnak hozzáférést kell biztosítani egy vagy több Azure-szolgáltatáserőforráshoz (például webalkalmazáshoz, kulcstartóhoz vagy tárfiókhoz) az előfizetésben. A felügyelt identitások futó tárolóban való használata hasonló az Azure-beli virtuális gépeken lévő identitásokhoz. A virtuális gépekre vonatkozó útmutatást a jogkivonatok, az Azure PowerShell vagy az Azure CLI, illetve az Azure SDK-k használatához olvassa el.

Előfeltételek

  • Ez a cikk az Azure CLI 2.0.49-es vagy újabb verzióját igényli. Az Azure Cloud Shell használata esetén a legújabb verzió már telepítve van.

Azure Key Vault létrehozása

A cikkben szereplő példák felügyelt identitást használnak az Azure Container Instancesben egy Azure Key Vault-titkos kulcs eléréséhez.

Először hozzon létre egy erőforráscsoportot myResourceGroup néven az eastus helyen az alábbi az group create paranccsal:

az group create --name myResourceGroup --location eastus

Az az keyvault create paranccsal hozzon létre egy kulcstartót. Mindenképpen adjon meg egy egyedi kulcstartónevet.

az keyvault create \
  --name mykeyvault \
  --resource-group myResourceGroup \
  --location eastus

Az az keyvault secret set paranccsal tároljon egy mintatitkot a kulcstartóban:

az keyvault secret set \
  --name SampleSecret \
  --value "Hello Container Instances" \
  --description ACIsecret --vault-name mykeyvault

Folytassa az alábbi példákkal a kulcstartó eléréséhez egy felhasználó által hozzárendelt vagy rendszer által hozzárendelt felügyelt identitás használatával az Azure Container Instancesben.

1. példa: Felhasználó által hozzárendelt identitás használata az Azure Key Vault eléréséhez

Identitás létrehozása

Először hozzon létre egy identitást az előfizetésben az az identity create paranccsal. Használhatja ugyanazt az erőforráscsoportot, amelyet a kulcstartó létrehozásához használ, vagy használhat egy másikat.

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

Az identitás a következő lépésekben való használatához használja az az identity show parancsot az identitás szolgáltatásnév-azonosítójának és erőforrás-azonosítójának változókban való tárolásához.

# Get service principal ID of the user-assigned identity
SP_ID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query principalId --output tsv)

# Get resource ID of the user-assigned identity
RESOURCE_ID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query id --output tsv)

Hozzáférés biztosítása a felhasználó által hozzárendelt identitáshoz a kulcstartóhoz

Futtassa az alábbi az keyvault set-policy parancsot egy hozzáférési szabályzat beállításához a kulcstartóban. Az alábbi példa lehetővé teszi, hogy a felhasználó által hozzárendelt identitás titkos kulcsokat szerezzen be a kulcstartóból:

 az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $SP_ID \
    --secret-permissions get

Felhasználó által hozzárendelt identitás engedélyezése tárolócsoporton

Futtassa az alábbi az container create parancsot egy tárolópéldány Létrehozásához a Microsoft rendszerképe azure-cli alapján. Ez a példa egy egytárolós csoportot biztosít, amelyet interaktív módon használhat az Azure CLI futtatásához más Azure-szolgáltatások eléréséhez. Ebben a szakaszban csak az alap operációs rendszert használja a rendszer. Ha például az Azure CLI-t szeretné használni a tárolóban, olvassa el a rendszer által hozzárendelt identitás engedélyezése egy tárolócsoporton című témakört.

A --assign-identity paraméter átadja a felhasználó által hozzárendelt felügyelt identitást a csoportnak. A hosszú ideig futó parancs folyamatosan futtatja a tárolót. Ez a példa ugyanazt az erőforráscsoportot használja a kulcstartó létrehozásához, de megadhat egy másikat.

az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity $RESOURCE_ID \
  --command-line "tail -f /dev/null"

Pár másodpercen belül az üzembe helyezés befejezéséről tájékoztató választ kell kapnia az Azure CLI-ről. Ellenőrizze az állapotát az az container show paranccsal.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

A identity kimenet szakasza a következőhöz hasonlóan néz ki, és az identitás be van állítva a tárolócsoportban. Az principalID alatta userAssignedIdentities található a Microsoft Entra-azonosítóban létrehozott identitás szolgáltatásnévje:

[...]
"identity": {
    "principalId": "null",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/xxxxxxxx-0903-4b79-a55a-xxxxxxxxxxxx/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
        "clientId": "xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx",
        "principalId": "xxxxxxxx-f25b-4895-b828-xxxxxxxxxxxx"
      }
    }
  },
[...]

Titkos kulcs lekérése a kulcstartóból felhasználó által hozzárendelt identitás használatával

Most már használhatja a felügyelt identitást a futó tárolópéldányon belül a kulcstartó eléréséhez. Először indítsa el a bash-rendszerhéjat a tárolóban:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Futtassa a következő parancsokat a tároló bash-rendszerhéjában. Ha egy hozzáférési jogkivonatot szeretne lekérni a Key Vaultban való hitelesítéshez a Microsoft Entra ID használatával, futtassa a következő parancsot:

client_id="xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx"
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net&client_id=$client_id" -H Metadata:true -s

Kimenet:

{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}

Ha a hozzáférési jogkivonatot egy változóban szeretné tárolni, amelyet a következő parancsokban szeretne használni a hitelesítéshez, futtassa a következő parancsot:

TOKEN=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')

Most használja a hozzáférési jogkivonatot a Key Vaultban való hitelesítéshez és egy titkos kód beolvasásához. Mindenképpen cserélje le a kulcstartó nevét az URL-címben (https://mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"

A válasz a következőhöz hasonlóan jelenik meg, a titkos kóddal együtt. A kódban elemezné ezt a kimenetet a titkos kód lekéréséhez. Ezután használja a titkos kulcsot egy későbbi műveletben egy másik Azure-erőforrás eléréséhez.

{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}

2. példa: Rendszer által hozzárendelt identitás használata az Azure Key Vault eléréséhez

Rendszer által hozzárendelt identitás engedélyezése tárolócsoporton

Futtassa az alábbi az container create parancsot egy tárolópéldány Létrehozásához a Microsoft rendszerképe azure-cli alapján. Ez a példa egy egytárolós csoportot biztosít, amelyet interaktív módon használhat az Azure CLI futtatásához más Azure-szolgáltatások eléréséhez.

A --assign-identity további érték nélküli paraméter lehetővé teszi a rendszer által hozzárendelt felügyelt identitást a csoportban. Az identitás hatóköre a tárolócsoport erőforráscsoportjára terjed ki. A hosszú ideig futó parancs folyamatosan futtatja a tárolót. Ez a példa ugyanazt az erőforráscsoportot használja a kulcstartó létrehozásához, amely az identitás hatókörében található.

# Get the resource ID of the resource group
RG_ID=$(az group show --name myResourceGroup --query id --output tsv)

# Create container group with system-managed identity
az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity --scope $RG_ID \
  --command-line "tail -f /dev/null"

Pár másodpercen belül az üzembe helyezés befejezéséről tájékoztató választ kell kapnia az Azure CLI-ről. Ellenőrizze az állapotát az az container show paranccsal.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

A identity kimenet szakasza a következőhöz hasonlóan néz ki, amely azt mutatja, hogy egy rendszer által hozzárendelt identitás jön létre a Microsoft Entra-azonosítóban:

[...]
"identity": {
    "principalId": "xxxxxxxx-528d-7083-b74c-xxxxxxxxxxxx",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
},
[...]

Állítson be egy változót az identitás értékére principalId (a szolgáltatásnév azonosítójára) a későbbi lépésekben való használathoz.

SP_ID=$(az container show \
  --resource-group myResourceGroup \
  --name mycontainer \
  --query identity.principalId --out tsv)

Tárolócsoport hozzáférésének biztosítása a kulcstartóhoz

Futtassa az alábbi az keyvault set-policy parancsot egy hozzáférési szabályzat beállításához a kulcstartóban. Az alábbi példa lehetővé teszi, hogy a rendszer által felügyelt identitás titkos kulcsokat szerezzen be a kulcstartóból:

 az keyvault set-policy \
   --name mykeyvault \
   --resource-group myResourceGroup \
   --object-id $SP_ID \
   --secret-permissions get

Titkos kulcs lekérése a kulcstartóból tárolócsoport-identitás használatával

Most már a felügyelt identitással is elérheti a kulcstartót a futó tárolópéldányon belül. Először indítsa el a bash-rendszerhéjat a tárolóban:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Futtassa a következő parancsokat a tároló bash-rendszerhéjában. Először jelentkezzen be az Azure CLI-be a felügyelt identitás használatával:

az login --identity

A futó tárolóból kérje le a titkos kulcsot a kulcstartóból:

az keyvault secret show \
  --name SampleSecret \
  --vault-name mykeyvault --query value

A rendszer lekéri a titkos kód értékét:

"Hello Container Instances"

Felügyelt identitás engedélyezése Resource Manager-sablonnal

Ha Resource Manager-sablonnal szeretné engedélyezni a felügyelt identitást egy tárolócsoportban, állítsa be az Microsoft.ContainerInstance/containerGroupsidentity objektum tulajdonságát egy ContainerGroupIdentity objektummal. Az alábbi kódrészletek a identity különböző forgatókönyvekhez konfigurált tulajdonságot mutatják be. Tekintse meg a Resource Manager-sablonreferenciát. Adja meg a minimális értéket apiVersion2018-10-01.

Felhasználó által hozzárendelt identitás

A felhasználó által hozzárendelt identitás az űrlap erőforrás-azonosítója:

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"

Egy vagy több felhasználó által hozzárendelt identitást engedélyezhet.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }

Rendszer által hozzárendelt identitás

"identity": {
    "type": "SystemAssigned"
    }

Rendszer- és felhasználó által hozzárendelt identitások

Egy tárolócsoporton engedélyezheti a rendszer által hozzárendelt identitást és egy vagy több felhasználó által hozzárendelt identitást is.

"identity": {
    "type": "System Assigned, UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }
...

Felügyelt identitás engedélyezése YAML-fájllal

Ha YAML-fájllal üzembe helyezett tárolócsoportban engedélyezni szeretné a felügyelt identitást , vegye fel a következő YAML-et. Adja meg a minimális értéket apiVersion2018-10-01.

Felhasználó által hozzárendelt identitás

A felhasználó által hozzárendelt identitás az űrlap erőforrás-azonosítója

'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'

Egy vagy több felhasználó által hozzárendelt identitást engedélyezhet.

identity:
  type: UserAssigned
  userAssignedIdentities:
    {'myResourceID1':{}}

Rendszer által hozzárendelt identitás

identity:
  type: SystemAssigned

Rendszer- és felhasználó által hozzárendelt identitások

Egy tárolócsoporton engedélyezheti a rendszer által hozzárendelt identitást és egy vagy több felhasználó által hozzárendelt identitást is.

identity:
  type: SystemAssigned, UserAssigned
  userAssignedIdentities:
   {'myResourceID1':{}}

Következő lépések

Ebben a cikkben megismerhette a felügyelt identitásokat az Azure Container Instancesben, és a következőket:

  • Felhasználó által hozzárendelt vagy rendszer által hozzárendelt identitás engedélyezése egy tárolócsoportban
  • Identitáshozzáférés biztosítása egy Azure Key Vaulthoz
  • Kulcstartó elérése a felügyelt identitással egy futó tárolóból
  • További információ az Azure-erőforrások felügyelt identitásairól.

  • Egy Azure Go SDK-példa arra, hogy felügyelt identitással férhet hozzá egy kulcstartóhoz az Azure Container Instances szolgáltatásból.