Felügyelt identitások használata az Azure Container Instancesszel

Az Azure-erőforrások felügyelt identitásaival olyan kódot futtathat Azure Container Instances, 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 funkció egy Azure Container Instances üzembe helyezést biztosít egy automatikusan felügyelt identitással az Azure Active Directoryban.

Ebből a cikkből többet is megtudhat a felügyelt identitásokról a Azure Container Instances és a következőben:

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

A példákat úgy alakíthatja át, hogy engedélyezze és használja az identitásokat Azure Container Instances 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 Azure AD hitelesítést támogató szolgáltatások hitelesítéséhez anélkül, hogy a tárolókódban kezelne hitelesítő adatokat. Az AD-hitelesítést nem támogató szolgáltatások esetén 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. A felügyelt identitások használatáról további információt a Mi az Azure-erőforrások felügyelt identitásai?

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ások a tárolócsoport futtatása után is engedélyezhetők vagy frissíthetők – bármelyik művelet miatt újraindul a tárolócsoport. Ha új vagy meglévő tárolócsoport identitásait szeretné beállítani, használja az Azure CLI-t, egy Resource Manager sablont, egy YAML-fájlt vagy egy másik Azure-eszközt.

Azure Container Instances a felügyelt Azure-identitások mindkét típusát támogatja: felhasználó által hozzárendelt és rendszer által hozzárendelt. Egy tárolócsoportban engedélyezheti a rendszer által hozzárendelt identitást, 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

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 egy futó tárolóban való használata hasonló az Azure-beli virtuális gépek identitásához. Tekintse meg a virtuális gép tokenek, Azure PowerShell vagy Azure CLI vagy Azure SDK-k használatára vonatkozó útmutatóját.

Előfeltételek

  • Ehhez a cikkhez az Azure CLI 2.0.49-es vagy újabb verziója szükséges. 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 a Azure Container Instances 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 Azure Container Instances.

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 másikat is.

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
spID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query principalId --output tsv)

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

Felhasználó által hozzárendelt identitás hozzáférésének biztosítása a kulcstartóhoz

Futtassa az alábbi az keyvault set-policy parancsot a hozzáférési szabályzat kulcstartón való beállításához. 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 $spID \
    --secret-permissions get

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

Futtassa az alábbi az container create parancsot a Microsoft rendszerképe azure-cli alapján létrehozott tárolópéldány létrehozásához. Ez a példa egy egytárolós csoportot biztosít, amelyet interaktív módon használhat az Azure CLI más Azure-szolgáltatások eléréséhez való futtatásához. Ebben a szakaszban csak az alap operációs rendszert használjuk. Az Azure CLI tárolóban való használatára vonatkozó példát lásd: Rendszer által hozzárendelt identitás engedélyezése egy tárolócsoporton.

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 $resourceID \
  --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 az alábbihoz hasonlóan néz ki, és az identitás be van állítva a tárolócsoportban. Az principalID alábbi userAssignedIdentities az Azure Active Directoryban 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 key vaultból felhasználó által hozzárendelt identitással

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 le szeretne szerezni egy hozzáférési jogkivonatot, amely az Azure Active Directoryt használja a Key Vaultban való hitelesítéshez, 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 olvasá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=2016-10-01 -H "Authorization: Bearer $token"

A válasz a következőhöz hasonlóan néz ki, és a titkos kód látható. 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 a Microsoft rendszerképe azure-cli alapján létrehozott tárolópéldány létrehozásához. Ez a példa egy egytárolós csoportot biztosít, amelyet interaktív módon használhat az Azure CLI más Azure-szolgáltatások eléréséhez való futtatásához.

A --assign-identity további érték nélküli paraméter lehetővé teszi a rendszer által hozzárendelt felügyelt identitás használatát 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
rgID=$(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 $rgID \
  --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 kimenetben lévő szakasz az alábbihoz hasonlóan néz ki, amely azt mutatja, hogy egy rendszer által hozzárendelt identitás jön létre az Azure Active Directoryban:

[...]
"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), hogy a későbbi lépésekben használhassa.

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

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

Futtassa az alábbi az keyvault set-policy parancsot a hozzáférési szabályzat kulcstartón való beállításához. 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 $spID \
   --secret-permissions get

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

Most már a felügyelt identitással 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 kódot 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 sablon használatával

Ha Resource Manager sablonnal szeretné engedélyezni a felügyelt identitást egy tárolócsoportban, állítsa be az identityMicrosoft.ContainerInstance/containerGroups 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 apiVersion értéket.2018-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ájl használatával

Ha engedélyezni szeretné a felügyelt identitást egy YAML-fájllal üzembe helyezett tárolócsoportban, adja meg a következő YAML-t. Adja meg a minimális apiVersion értéket.2018-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 a Azure Container Instances felügyelt identitásairól és a következő útmutatókról tanult:

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