Skip to content

Commit d211d46

Browse files
Merge pull request #250402 from RichardChen820/appconfig/junbchen/addWorkloadIdentitySupport
[App Configuration] Add workload identity support in K8s provider
2 parents 1894f3e + e0e401f commit d211d46

File tree

1 file changed

+60
-10
lines changed

1 file changed

+60
-10
lines changed

articles/azure-app-configuration/reference-kubernetes-provider.md

Lines changed: 60 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,19 @@ The `spec.target` property has the following child property.
3232
|---|---|---|---|
3333
|configMapName|The name of the ConfigMap to be created|true|string|
3434

35-
If the `spec.auth` property isn't set, the system-assigned managed identity is used. It has the following child properties. Only one authentication method should be set.
35+
The `spec.auth` property isn't required if the connection string of your App Configuration store is provided by setting the `spec.connectionStringReference` property. Otherwise, one of the identities, service principal, workload identity, or managed identity, will be used for authentication. The `spec.auth` has the following child properties. Only one of them should be specified. If none of them are set, the system-assigned managed identity of the virtual machine scale set will be used.
3636

3737
|Name|Description|Required|Type|
3838
|---|---|---|---|
39-
|managedIdentityClientId|The Client ID of user-assigned managed identity|false|string|
4039
|servicePrincipalReference|The name of the Kubernetes Secret that contains the credentials of a service principal|false|string|
40+
|workloadIdentity|The settings for using workload identity|false|object|
41+
|managedIdentityClientId|The Client ID of user-assigned managed identity of virtual machine scale set|false|string|
42+
43+
The `spec.auth.workloadIdentity` property has the following child property.
44+
45+
|Name|Description|Required|Type|
46+
|---|---|---|---|
47+
|managedIdentityClientId|The Client ID of the user-assigned managed identity associated with the workload identity|true|string|
4148

4249
The `spec.keyValues` has the following child properties. The `spec.keyValues.keyVaults` property is required if any Key Vault references are expected to be downloaded.
4350

@@ -72,17 +79,19 @@ If the `spec.keyValues.keyVaults.auth` property isn't set, the system-assigned m
7279

7380
|Name|Description|Required|Type|
7481
|---|---|---|---|
75-
|managedIdentityClientId|The client ID of a user-assigned managed identity used for authentication with vaults that don't have individual authentication methods specified|false|string|
7682
|servicePrincipalReference|The name of the Kubernetes Secret that contains the credentials of a service principal used for authentication with vaults that don't have individual authentication methods specified|false|string|
83+
|workloadIdentity|The settings of the workload identity used for authentication with vaults that don't have individual authentication methods specified. It has the same child properties as `spec.auth.workloadIdentity`|false|object|
84+
|managedIdentityClientId|The client ID of a user-assigned managed identity of virtual machine scale set used for authentication with vaults that don't have individual authentication methods specified|false|string|
7785
|vaults|The authentication methods for individual vaults|false|object array|
7886

79-
The authentication method of each *vault* can be specified with the following properties. One of `managedIdentityClientId` and `servicePrincipalReference` must be provided.
87+
The authentication method of each *vault* can be specified with the following properties. One of `managedIdentityClientId`, `servicePrincipalReference` or `workloadIdentity` must be provided.
8088

8189
|Name|Description|Required|Type|
8290
|---|---|---|---|
8391
|uri|The URI of a vault|true|string|
84-
|managedIdentityClientId|The client ID of a user-assigned managed identity used for authentication with a vault|false|string|
8592
|servicePrincipalReference|The name of the Kubernetes Secret that contains the credentials of a service principal used for authentication with a vault|false|string|
93+
|workloadIdentity|The settings of the workload identity used for authentication with a vault. It has the same child properties as `spec.auth.workloadIdentity`|false|object|
94+
|managedIdentityClientId|The client ID of a user-assigned managed identity of virtual machine scale set used for authentication with a vault|false|string|
8695

8796
The `spec.keyValues.refresh` property has the following child properties.
8897

@@ -102,10 +111,12 @@ The `spec.keyValues.refresh.monitoring.keyValues` is an array of objects, which
102111

103112
### Authentication
104113

105-
#### Use System-Assigned Managed Identity
114+
#### Use system-assigned managed identity of virtual machine scale set
106115

107116
1. [Enable the system-assigned managed identity in the virtual machine scale set](/azure/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vmss#enable-system-assigned-managed-identity-on-an-existing-virtual-machine-scale-set) used by the Azure Kubernetes Service (AKS) cluster.
117+
108118
1. [Grant the system-assigned managed identity **App Configuration Data Reader** role](/azure/azure-app-configuration/howto-integrate-azure-managed-service-identity#grant-access-to-app-configuration) in Azure App Configuration.
119+
109120
1. Deploy the following sample `AzureAppConfigurationProvider` resource to the AKS cluster.
110121

111122
``` yaml
@@ -119,11 +130,14 @@ The `spec.keyValues.refresh.monitoring.keyValues` is an array of objects, which
119130
configMapName: configmap-created-by-appconfig-provider
120131
```
121132
122-
#### Use User-Assigned Managed Identity
133+
#### Use user-assigned managed identity of virtual machine scale set
123134
124135
1. [Create a user-assigned managed identity](/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities#create-a-user-assigned-managed-identity) and note down its client ID after creation.
136+
125137
1. [Assign the user-assigned managed identity to the virtual machine scale set](/azure/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vmss#user-assigned-managed-identity) used by the Azure Kubernetes Service (AKS) cluster.
138+
126139
1. [Grant the user-assigned managed identity **App Configuration Data Reader** role](/azure/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vmss#user-assigned-managed-identity) in Azure App Configuration.
140+
127141
1. Set the `spec.auth.managedIdentityClientId` property to the client ID of the user-assigned managed identity in the following sample `AzureAppConfigurationProvider` resource and deploy it to the AKS cluster.
128142

129143
``` yaml
@@ -139,11 +153,14 @@ The `spec.keyValues.refresh.monitoring.keyValues` is an array of objects, which
139153
managedIdentityClientId: <your-managed-identity-client-id>
140154
```
141155

142-
#### Use Service Principal
156+
#### Use service principal
143157

144158
1. [Create a Service Principal](/azure/active-directory/develop/howto-create-service-principal-portal)
159+
145160
1. [Grant the service principal **App Configuration Data Reader** role](/azure/azure-app-configuration/howto-integrate-azure-managed-service-identity#grant-access-to-app-configuration) in Azure App Configuration.
161+
146162
1. Create a Kubernetes Secret in the same namespace as the `AzureAppConfigurationProvider` resource and add *azure_client_id*, *azure_client_secret*, and *azure_tenant_id* of the service principal to the Secret.
163+
147164
1. Set the `spec.auth.servicePrincipalReference` property to the name of the Secret in the following sample `AzureAppConfigurationProvider` resource and deploy it to the Kubernetes cluster.
148165

149166
``` yaml
@@ -159,10 +176,43 @@ The `spec.keyValues.refresh.monitoring.keyValues` is an array of objects, which
159176
servicePrincipalReference: <your-service-principal-secret-name>
160177
```
161178

162-
#### Use Connection String
179+
#### Use workload identity
180+
181+
1. [Enable Workload Identity](/azure/aks/workload-identity-deploy-cluster#update-an-existing-aks-cluster) on the Azure Kubernetes Service (AKS) cluster.
182+
183+
1. [Get the OIDC issuer URL](/azure/aks/workload-identity-deploy-cluster#retrieve-the-oidc-issuer-url) of the AKS cluster.
184+
185+
1. [Create a user-assigned managed identity](/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities#create-a-user-assigned-managed-identity) and note down its client ID after creation.
186+
187+
1. Create the federated identity credential between the managed identity, OIDC issuer, and subject using the Azure CLI.
188+
189+
``` azurecli
190+
az identity federated-credential create --name "${FEDERATED_IDENTITY_CREDENTIAL_NAME}" --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:azappconfig-system:az-appconfig-k8s-provider --audience api://AzureADTokenExchange
191+
```
192+
193+
1. [Grant the user-assigned managed identity **App Configuration Data Reader** role](/azure/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vmss#user-assigned-managed-identity) in Azure App Configuration.
194+
195+
1. Set the `spec.auth.workloadIdentity.managedIdentityClientId` property to the client ID of the user-assigned managed identity in the following sample `AzureAppConfigurationProvider` resource and deploy it to the AKS cluster.
196+
197+
``` yaml
198+
apiVersion: azconfig.io/v1beta1
199+
kind: AzureAppConfigurationProvider
200+
metadata:
201+
name: appconfigurationprovider-sample
202+
spec:
203+
endpoint: <your-app-configuration-store-endpoint>
204+
target:
205+
configMapName: configmap-created-by-appconfig-provider
206+
auth:
207+
workloadIdentity:
208+
managedIdentityClientId: <your-managed-identity-client-id>
209+
```
210+
211+
#### Use connection string
163212

164213
1. Create a Kubernetes Secret in the same namespace as the `AzureAppConfigurationProvider` resource and add Azure App Configuration connection string with key *azure_app_configuration_connection_string* in the Secret.
165-
2. Set the `spec.connectionStringReference` property to the name of the Secret in the following sample `AzureAppConfigurationProvider` resource and deploy it to the Kubernetes cluster.
214+
215+
1. Set the `spec.connectionStringReference` property to the name of the Secret in the following sample `AzureAppConfigurationProvider` resource and deploy it to the Kubernetes cluster.
166216

167217
``` yaml
168218
apiVersion: azconfig.io/v1beta1

0 commit comments

Comments
 (0)