Cara menggunakan identitas terkelola dengan Azure Container Instances

Gunakan identitas terkelola untuk sumber daya Azure untuk menjalankan kode di Azure Container Instances yang berinteraksi dengan layanan Azure lainnya - tanpa menyimpan rahasia atau info masuk dalam kode. Fitur ini menyediakan penyebaran Azure Container Instances dengan identitas terkelola secara otomatis di Azure Active Directory.

Dalam artikel ini, Anda mempelajari selengkapnya tentang identitas terkelola di Azure Container Instances dan:

  • Mengaktifkan identitas yang ditetapkan pengguna atau ditetapkan sistem pada grup kontainer
  • Memberikan akses identitas ke brankas kunci Azure
  • Menggunakan identitas terkelola untuk mengakses brankas kunci dari kontainer yang sedang berjalan

Menyesuaikan contoh untuk mengaktifkan dan menggunakan identitas di Azure Container Instances untuk mengakses layanan Azure lainnya. Contoh-contoh ini interaktif. Namun, dalam praktiknya gambar kontainer Anda akan menjalankan kode untuk mengakses layanan Azure.

Penting

Fitur ini masih dalam mode pratinjau. Pratinjau disediakan untuk Anda dengan syarat Anda menyetujui ketentuan penggunaan tambahan. Beberapa aspek dari fitur ini dapat berubah sebelum ketersediaan umum (GA). Saat ini, identitas terkelola pada Azure Container Instances, hanya didukung dengan kontainer Linux dan belum dengan kontainer Windows.

Mengapa menggunakan identitas terkelola?

Gunakan identitas terkelola dalam kontainer yang sedang berjalan untuk mengautentikasi ke layanan apa pun yang mendukung autentikasi Azure Active Directory tanpa mengelola info masuk dalam kode kontainer Anda. Untuk layanan yang tidak mendukung autentikasi AD, Anda dapat menyimpan rahasia di key vault Azure dan menggunakan identitas terkelola untuk mengakses brankas kunci untuk mengambil info masuk. Untuk informasi selengkapnya tentang menggunakan identitas terkelola, lihat Apa itu identitas terkelola untuk sumber daya Azure?

Mengaktifkan identitas terkelola

Saat Anda membuat grup kontainer, aktifkan satu atau beberapa identitas terkelola dengan mengatur properti ContainerGroupIdentity. Anda juga dapat mengaktifkan atau memperbarui identitas terkelola setelah grup kontainer berjalan - salah satu tindakan menyebabkan grup kontainer dimulai ulang. Untuk mengatur identitas pada grup kontainer baru atau yang sudah ada, gunakan Azure CLI, templat Resource Manager, file YAML, atau alat Azure lainnya.

Azure Container Instances mendukung kedua jenis identitas Azure terkelola: ditetapkan pengguna dan ditetapkan sistem. Pada grup kontainer, Anda dapat mengaktifkan identitas yang ditetapkan sistem, satu atau beberapa identitas yang ditetapkan pengguna, atau kedua jenis identitas. Jika Anda tidak terbiasa dengan identitas terkelola untuk sumber daya Azure, lihat bagian ikhtisar.

Menggunakan identitas terkelola

Untuk menggunakan identitas terkelola, identitas harus diberikan akses ke satu atau beberapa sumber daya layanan Azure (seperti aplikasi web, brankas kunci, atau akun penyimpanan) dalam langganan. Menggunakan identitas terkelola dalam kontainer yang sedang berjalan mirip dengan menggunakan identitas di Azure VM. Lihat panduan VM untuk menggunakan token, Azure PowerShell atau Azure CLI, atau SDK Azure.

Batasan

  • Saat ini Anda tidak dapat menggunakan identitas terkelola dalam grup kontainer yang disebarkan ke jaringan virtual.

Prasyarat

Anda dapat menggunakan Azure Cloud Shell atau Azure CLI lokal.

  • Artikel ini memerlukan Azure CLI versi 2.0.49 atau lebih baru. Jika ingin menggunakan Azure Cloud Shell, versi terbarunya sudah terinstal.

Membuat brankas kunci Azure

Contoh dalam artikel ini menggunakan identitas terkelola di Azure Container Instances untuk mengakses rahasia brankas kunci Azure.

Pertama, buat grup sumber daya bernama myResourceGroup di lokasi eastus dengan perintah buat grup az berikut:

az group create --name myResourceGroup --location eastus

Gunakan perintah az keyvault create untuk membuat brankas kunci. Pastikan untuk menentukan nama brankas kunci yang unik.

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

Simpan contoh rahasia di brankas kunci menggunakan perintah az keyvault secret set:

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

Lanjutkan dengan contoh berikut untuk mengakses brankas kunci menggunakan identitas terkelola yang ditetapkan pengguna atau yang ditetapkan sistem di Azure Container Instances.

Contoh 1: Menggunakan identitas yang ditetapkan pengguna untuk mengakses brankas kunci Azure

Buat identitas

Pertama, buat identitas di langganan Anda menggunakan perintah az identity create. Anda dapat menggunakan grup sumber daya yang sama dengan yang digunakan untuk membuat brankas kunci, atau menggunakan yang berbeda.

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

Untuk menggunakan identitas dalam langkah-langkah berikut, gunakan perintah az identity show untuk menyimpan ID perwakilan layanan dan ID sumber daya identitas dalam variabel.

# 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)

Memberikan akses identitas yang ditetapkan pengguna ke brankas kunci

Jalankan perintah az keyvault set-policy berikut untuk menetapkan kebijakan akses pada brankas kunci. Contoh berikut memungkinkan identitas yang ditetapkan pengguna untuk mendapatkan rahasia dari brankas kunci:

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

Mengaktifkan identitas yang ditetapkan pengguna pada grup kontainer

Jalankan perintah az container create berikut untuk membuat instans kontainer berdasarkan citra azure-cli Microsoft. Contoh ini menyediakan grup kontainer tunggal yang dapat Anda gunakan secara interaktif untuk menjalankan Azure CLI untuk mengakses layanan Azure lainnya. Di bagian ini, hanya sistem operasi dasar yang digunakan. Misalnya untuk menggunakan Azure CLI dalam kontainer, lihat Mengaktifkan identitas yang ditetapkan sistem pada grup kontainer.

Parameter --assign-identity meneruskan identitas terkelola yang ditetapkan pengguna ke grup. Perintah yang berjalan lama membuat kontainer tetap berjalan. Contoh ini menggunakan grup sumber daya yang sama yang digunakan untuk membuat brankas kunci, tetapi Anda dapat menentukan yang berbeda.

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

Dalam beberapa detik, Anda harus mendapatkan respons dari Azure CLI yang menunjukkan bahwa penyebaran telah selesai. Periksa statusnya dengan perintah az container show.

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

Bagian identity dalam output terlihat mirip dengan yang berikut ini, memperlihatkan identitas yang diatur dalam grup kontainer. principalID di userAssignedIdentities adalah perwakilan layanan identitas yang Anda buat di Azure Active Directory:

[...]
"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"
      }
    }
  },
[...]

Gunakan identitas yang ditetapkan pengguna untuk mendapatkan rahasia dari brankas kunci

Sekarang Anda dapat menggunakan identitas terkelola dalam instans kontainer yang sedang berjalan untuk mengakses brankas kunci. Pertama, luncurkan shell bash dalam kontainer:

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

Jalankan perintah berikut di shell bash dalam kontainer. Untuk mendapatkan token akses untuk menggunakan Azure Active Directory untuk mengautentikasi ke brankas kunci, jalankan perintah berikut:

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

Output:

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

Untuk menyimpan token akses dalam variabel yang akan digunakan dalam perintah berikutnya untuk mengautentikasi, jalankan perintah berikut:

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')

Sekarang gunakan token akses untuk mengautentikasi ke brankas kunci dan membaca rahasia. Pastikan untuk mengganti nama brankas kunci Anda di URL (https://mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=2016-10-01 -H "Authorization: Bearer $token"

Responsnya terlihat mirip dengan berikut ini, yang menunjukkan rahasianya. Dalam kode Anda, Anda akan mengurai output ini untuk mendapatkan rahasia. Lalu, gunakan rahasia tersebut dalam operasi berikutnya untuk mengakses sumber daya Azure lainnya.

{"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"}}

Contoh 2: Menggunakan identitas yang ditetapkan sistem untuk mengakses brankas kunci Azure

Mengaktifkan identitas yang ditetapkan sistem pada grup kontainer

Jalankan perintah az container create berikut untuk membuat instans kontainer berdasarkan citra azure-cli Microsoft. Contoh ini menyediakan grup kontainer tunggal yang dapat Anda gunakan secara interaktif untuk menjalankan Azure CLI untuk mengakses layanan Azure lainnya.

Parameter --assign-identity tanpa nilai tambahan memungkinkan identitas terkelola yang ditetapkan sistem pada grup. Identitas dicakup ke grup sumber daya grup kontainer. Perintah yang berjalan lama membuat kontainer tetap berjalan. Contoh ini menggunakan grup sumber daya yang sama yang digunakan untuk membuat brankas kunci, yang berada dalam lingkup identitas.

# 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"

Dalam beberapa detik, Anda harus mendapatkan respons dari Azure CLI yang menunjukkan bahwa penyebaran telah selesai. Periksa statusnya dengan perintah az container show.

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

Bagian identity dalam output terlihat mirip dengan yang berikut ini, yang menunjukkan bahwa identitas yang ditetapkan sistem dibuat di Azure Active Directory:

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

Atur variabel ke nilai principalId (ID perwakilan layanan) identitas, untuk digunakan di langkah-langkah selanjutnya.

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

Memberikan akses grup kontainer ke brankas kunci

Jalankan perintah az keyvault set-policy berikut untuk menetapkan kebijakan akses pada brankas kunci. Contoh berikut memungkinkan identitas yang ditetapkan sistem untuk mendapatkan rahasia dari brankas kunci:

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

Menggunakan identitas grup kontainer untuk mendapatkan rahasia dari brankas kunci

Sekarang Anda dapat menggunakan identitas terkelola untuk mengakses brankas kunci dalam instans kontainer yang sedang berjalan. Pertama, luncurkan shell bash dalam kontainer:

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

Jalankan perintah berikut di shell bash dalam kontainer. Pertama, masuk ke Azure CLI menggunakan identitas terkelola:

az login --identity

Dari kontainer yang sedang berjalan, ambil rahasia dari brankas kunci:

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

Nilai rahasia diambil:

"Hello Container Instances"

Mengaktifkan identitas terkelola menggunakan templat Resource Manager

Untuk mengaktifkan identitas terkelola dalam grup kontainer menggunakan templat Resource Manager, atur properti identity dari objek Microsoft.ContainerInstance/containerGroups dengan objek ContainerGroupIdentity. Cuplikan berikut menunjukkan properti identity yang dikonfigurasi untuk skenario yang berbeda. Lihat Referensi templat Resource Manager. Tentukan apiVersion minimal dari 2018-10-01.

Identitas yang ditetapkan pengguna

Identitas yang ditetapkan pengguna adalah ID sumber daya formulir:

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

Anda bisa mengaktifkan satu atau beberapa identitas yang ditetapkan pengguna.

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

identitas yang ditetapkan sistem

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

Identitas yang ditetapkan sistem dan pengguna

Pada grup kontainer, Anda dapat mengaktifkan identitas yang ditetapkan sistem, dan satu atau beberapa identitas yang ditetapkan pengguna.

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

Mengaktifkan identitas terkelola menggunakan file YAML

Untuk mengaktifkan identitas terkelola dalam grup kontainer yang disebarkan menggunakan file YAML, sertakan YAML berikut. Tentukan apiVersion minimal dari 2018-10-01.

Identitas yang ditetapkan pengguna

Identitas yang ditetapkan pengguna adalah ID sumber daya formulir

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

Anda bisa mengaktifkan satu atau beberapa identitas yang ditetapkan pengguna.

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

identitas yang ditetapkan sistem

identity:
  type: SystemAssigned

Identitas yang ditetapkan sistem dan pengguna

Pada grup kontainer, Anda dapat mengaktifkan identitas yang ditetapkan sistem, dan satu atau beberapa identitas yang ditetapkan pengguna.

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

Langkah berikutnya

Dalam artikel ini, Anda mempelajari tentang identitas terkelola di Azure Container Instances dan cara untuk:

  • Mengaktifkan identitas yang ditetapkan pengguna atau ditetapkan sistem pada grup kontainer
  • Memberikan akses identitas ke brankas kunci Azure
  • Menggunakan identitas terkelola untuk mengakses brankas kunci dari kontainer yang sedang berjalan