Skip to content

Commit ca2ad10

Browse files
authored
Merge pull request #213232 from MicrosoftDocs/release-ignite-2022-aks-workload-identity
[RELEASE PUBLISH] Release ignite 2022 aks workload identity
2 parents 7cc1f09 + 76b00d9 commit ca2ad10

17 files changed

+1153
-256
lines changed

articles/aks/TOC.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@
6262
href: tutorial-kubernetes-app-update.md
6363
- name: 7 - Upgrade cluster
6464
href: tutorial-kubernetes-upgrade-cluster.md
65+
- name: Security
66+
items:
67+
- name: Configure application to use workload identity
68+
href: learn/tutorial-kubernetes-workload-identity.md
6569
- name: Concepts
6670
items:
6771
- name: Core concepts
@@ -314,6 +318,14 @@
314318
href: enable-fips-nodes.md
315319
- name: Application security
316320
items:
321+
- name: Workload identity (preview)
322+
items:
323+
- name: Overview
324+
href: workload-identity-overview.md
325+
- name: Deploy and configure cluster
326+
href: workload-identity-deploy-cluster.md
327+
- name: Modernize your app with workload identity sidecar
328+
href: workload-identity-migration-sidecar.md
317329
- name: Use Azure AD pod identity (preview)
318330
href: use-azure-ad-pod-identity.md
319331
- name: Secure pod traffic with network policies

articles/aks/cluster-configuration.md

Lines changed: 49 additions & 64 deletions
Large diffs are not rendered by default.

articles/aks/cluster-extensions.md

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@ title: Cluster extensions for Azure Kubernetes Service (AKS)
33
description: Learn how to deploy and manage the lifecycle of extensions on Azure Kubernetes Service (AKS)
44
ms.service: container-service
55
ms.custom: event-tier1-build-2022
6-
ms.date: 05/13/2022
6+
ms.date: 09/29/2022
77
ms.topic: article
88
author: nickomang
99
ms.author: nickoman
1010
---
1111

1212
# Deploy and manage cluster extensions for Azure Kubernetes Service (AKS)
1313

14-
Cluster extensions provides an Azure Resource Manager driven experience for installation and lifecycle management of services like Azure Machine Learning (ML) on an AKS cluster. This feature enables:
14+
Cluster extensions provide an Azure Resource Manager driven experience for installation and lifecycle management of services like Azure Machine Learning (ML) on an AKS cluster. This feature enables:
1515

1616
* Azure Resource Manager-based deployment of extensions, including at-scale deployments across AKS clusters.
1717
* Lifecycle management of the extension (Update, Delete) from Azure Resource Manager.
1818

19-
In this article, you will learn about:
19+
In this article, you'll learn about:
2020
> [!div class="checklist"]
2121
2222
> * How to create an extension instance.
@@ -36,24 +36,18 @@ A conceptual overview of this feature is available in [Cluster extensions - Azur
3636
* [Azure CLI](/cli/azure/install-azure-cli) version >= 2.16.0 installed.
3737

3838
> [!NOTE]
39-
> If you have enabled [AAD-based pod identity][use-azure-ad-pod-identity] on your AKS cluster, please add the following `AzurePodIdentityException` to the release namespace of your extension instance on the AKS cluster:
40-
> ```yml
41-
> apiVersion: aadpodidentity.k8s.io/v1
42-
> kind: AzurePodIdentityException
43-
> metadata:
44-
> name: k8s-extension-exception
45-
> namespace: <release-namespace-of-extension>
46-
> spec:
47-
> podLabels:
48-
> clusterconfig.azure.com/managedby: k8s-extension
49-
> ```
50-
51-
### Setup the Azure CLI extension for cluster extensions
39+
> If you have enabled [AAD-based pod identity][use-azure-ad-pod-identity] on your AKS cluster or are considering implementing it,
40+
> we recommend you first review [Migrate to workload identity][migrate-workload-identity] to understand our
41+
> recommendations and options to set up your cluster to use an Azure AD workload identity (preview).
42+
> This authentication method replaces pod-managed identity (preview), which integrates with the Kubernetes native capabilities
43+
> to federate with any external identity providers.
44+
45+
### Set up the Azure CLI extension for cluster extensions
5246

5347
> [!NOTE]
5448
> The minimum supported version for the `k8s-extension` Azure CLI extension is `1.0.0`. If you are unsure what version you have installed, run `az extension show --name k8s-extension` and look for the `version` field.
5549
56-
You will also need the `k8s-extension` Azure CLI extension. Install this by running the following commands:
50+
You'll also need the `k8s-extension` Azure CLI extension. Install the extension by running the following command:
5751

5852
```azurecli-interactive
5953
az extension add --name k8s-extension
@@ -96,7 +90,7 @@ az k8s-extension create --name aml-compute --extension-type Microsoft.AzureML.Ku
9690
```
9791

9892
> [!NOTE]
99-
> The Cluster Extensions service is unable to retain sensitive information for more than 48 hours. If the cluster extension agents don't have network connectivity for more than 48 hours and cannot determine whether to create an extension on the cluster, then the extension transitions to `Failed` state. Once in `Failed` state, you will need to run `k8s-extension create` again to create a fresh extension instance.
93+
> The Cluster Extensions service is unable to retain sensitive information for more than 48 hours. If the cluster extension agents don't have network connectivity for more than 48 hours and can't determine whether to create an extension on the cluster, then the extension transitions to `Failed` state. Once in `Failed` state, you will need to run `k8s-extension create` again to create a fresh extension instance.
10094
10195
#### Required parameters
10296

@@ -112,15 +106,15 @@ az k8s-extension create --name aml-compute --extension-type Microsoft.AzureML.Ku
112106

113107
| Parameter name | Description |
114108
|--------------|------------|
115-
| `--auto-upgrade-minor-version` | Boolean property that specifies if the extension minor version will be upgraded automatically or not. Default: `true`. If this parameter is set to true, you cannot set `version` parameter, as the version will be dynamically updated. If set to `false`, extension will not be auto-upgraded even for patch versions. |
109+
| `--auto-upgrade-minor-version` | Boolean property that specifies if the extension minor version will be upgraded automatically or not. Default: `true`. If this parameter is set to true, you can't set `version` parameter, as the version will be dynamically updated. If set to `false`, extension won't be auto-upgraded even for patch versions. |
116110
| `--version` | Version of the extension to be installed (specific version to pin the extension instance to). Must not be supplied if auto-upgrade-minor-version is set to `true`. |
117-
| `--configuration-settings` | Settings that can be passed into the extension to control its functionality. They are to be passed in as space separated `key=value` pairs after the parameter name. If this parameter is used in the command, then `--configuration-settings-file` can't be used in the same command. |
111+
| `--configuration-settings` | Settings that can be passed into the extension to control its functionality. Pass values as space separated `key=value` pairs after the parameter name. If this parameter is used in the command, then `--configuration-settings-file` can't be used in the same command. |
118112
| `--configuration-settings-file` | Path to the JSON file having key value pairs to be used for passing in configuration settings to the extension. If this parameter is used in the command, then `--configuration-settings` can't be used in the same command. |
119-
| `--configuration-protected-settings` | These settings are not retrievable using `GET` API calls or `az k8s-extension show` commands, and are thus used to pass in sensitive settings. They are to be passed in as space separated `key=value` pairs after the parameter name. If this parameter is used in the command, then `--configuration-protected-settings-file` can't be used in the same command. |
113+
| `--configuration-protected-settings` | These settings are not retrievable using `GET` API calls or `az k8s-extension show` commands, and are thus used to pass in sensitive settings. Pass values as space separated `key=value` pairs after the parameter name. If this parameter is used in the command, then `--configuration-protected-settings-file` can't be used in the same command. |
120114
| `--configuration-protected-settings-file` | Path to the JSON file having key value pairs to be used for passing in sensitive settings to the extension. If this parameter is used in the command, then `--configuration-protected-settings` can't be used in the same command. |
121115
| `--scope` | Scope of installation for the extension - `cluster` or `namespace` |
122116
| `--release-namespace` | This parameter indicates the namespace within which the release is to be created. This parameter is only relevant if `scope` parameter is set to `cluster`. |
123-
| `--release-train` | Extension authors can publish versions in different release trains such as `Stable`, `Preview`, etc. If this parameter is not set explicitly, `Stable` is used as default. This parameter can't be used when `autoUpgradeMinorVersion` parameter is set to `false`. |
117+
| `--release-train` | Extension authors can publish versions in different release trains such as `Stable`, `Preview`, etc. If this parameter isn't set explicitly, `Stable` is used as default. This parameter can't be used when `autoUpgradeMinorVersion` parameter is set to `false`. |
124118
| `--target-namespace` | This parameter indicates the namespace within which the release will be created. Permission of the system account created for this extension instance will be restricted to this namespace. This parameter is only relevant if the `scope` parameter is set to `namespace`. |
125119

126120
### Show details of an extension instance
@@ -155,7 +149,7 @@ az k8s-extension update --name azureml --extension-type Microsoft.AzureML.Kubern
155149
| Parameter name | Description |
156150
|----------------|------------|
157151
| `--name` | Name of the extension instance |
158-
| `--extension-type` | The type of extension you want to install on the cluster. For example: Microsoft.AzureML.Kubernetes |
152+
| `--extension-type` | The type of extension you want to install on the cluster. For example: Microsoft.AzureML.Kubernetes |
159153
| `--cluster-name` | Name of the AKS cluster on which the extension instance has to be created |
160154
| `--resource-group` | The resource group containing the AKS cluster |
161155
| `--cluster-type` | The cluster type on which the extension instance has to be created. Specify `managedClusters` as it maps to AKS clusters|
@@ -164,14 +158,14 @@ az k8s-extension update --name azureml --extension-type Microsoft.AzureML.Kubern
164158

165159
| Parameter name | Description |
166160
|--------------|------------|
167-
| `--auto-upgrade-minor-version` | Boolean property that specifies if the extension minor version will be upgraded automatically or not. Default: `true`. If this parameter is set to true, you cannot set `version` parameter, as the version will be dynamically updated. If set to `false`, extension will not be auto-upgraded even for patch versions. |
161+
| `--auto-upgrade-minor-version` | Boolean property that specifies if the extension minor version will be upgraded automatically or not. Default: `true`. If this parameter is set to true, you cannot set `version` parameter, as the version will be dynamically updated. If set to `false`, extension won't be auto-upgraded even for patch versions. |
168162
| `--version` | Version of the extension to be installed (specific version to pin the extension instance to). Must not be supplied if auto-upgrade-minor-version is set to `true`. |
169-
| `--configuration-settings` | Settings that can be passed into the extension to control its functionality. Only the settings that require an update need to be provided. The provided settings would be replaced with the provided values. They are to be passed in as space separated `key=value` pairs after the parameter name. If this parameter is used in the command, then `--configuration-settings-file` can't be used in the same command. |
163+
| `--configuration-settings` | Settings that can be passed into the extension to control its functionality. Only the settings that require an update need to be provided. The provided settings would be replaced with the provided values. Pass values as space separated `key=value` pairs after the parameter name. If this parameter is used in the command, then `--configuration-settings-file` can't be used in the same command. |
170164
| `--configuration-settings-file` | Path to the JSON file having key value pairs to be used for passing in configuration settings to the extension. If this parameter is used in the command, then `--configuration-settings` can't be used in the same command. |
171-
| `--configuration-protected-settings` | These settings are not retrievable using `GET` API calls or `az k8s-extension show` commands, and are thus used to pass in sensitive settings. When updating a setting, all settings are expected to be provided. If some settings are omitted, those settings would be considered obsolete and deleted. They are to be passed in as space separated `key=value` pairs after the parameter name. If this parameter is used in the command, then `--configuration-protected-settings-file` can't be used in the same command. |
165+
| `--configuration-protected-settings` | These settings are not retrievable using `GET` API calls or `az k8s-extension show` commands, and are thus used to pass in sensitive settings. When you update a setting, all settings are expected to be specified. If some settings are omitted, those settings would be considered obsolete and deleted. Pass values as space separated `key=value` pairs after the parameter name. If this parameter is used in the command, then `--configuration-protected-settings-file` can't be used in the same command. |
172166
| `--configuration-protected-settings-file` | Path to the JSON file having key value pairs to be used for passing in sensitive settings to the extension. If this parameter is used in the command, then `--configuration-protected-settings` can't be used in the same command. |
173167
| `--scope` | Scope of installation for the extension - `cluster` or `namespace` |
174-
| `--release-train` | Extension authors can publish versions in different release trains such as `Stable`, `Preview`, etc. If this parameter is not set explicitly, `Stable` is used as default. This parameter can't be used when `autoUpgradeMinorVersion` parameter is set to `false`. |
168+
| `--release-train` | Extension authors can publish versions in different release trains such as `Stable`, `Preview`, etc. If this parameter isn't set explicitly, `Stable` is used as default. This parameter can't be used when `autoUpgradeMinorVersion` parameter is set to `false`. |
175169

176170
### Delete extension instance
177171

@@ -194,8 +188,8 @@ az k8s-extension delete --name azureml --cluster-name <clusterName> --resource-g
194188
[dapr-overview]: ./dapr.md
195189
[gitops-overview]: ../azure-arc/kubernetes/conceptual-gitops-flux2.md
196190
[k8s-extension-reference]: /cli/azure/k8s-extension
197-
[use-azure-ad-pod-identity]: ./use-azure-ad-pod-identity.md
198191
[use-managed-identity]: ./use-managed-identity.md
192+
[migrate-workload-identity]: workload-identity-overview.md
199193

200194
<!-- EXTERNAL -->
201195
[arc-k8s-regions]: https://azure.microsoft.com/global-infrastructure/services/?products=azure-arc&regions=all

articles/aks/concepts-identity.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@ title: Concepts - Access and identity in Azure Kubernetes Services (AKS)
33
description: Learn about access and identity in Azure Kubernetes Service (AKS), including Azure Active Directory integration, Kubernetes role-based access control (Kubernetes RBAC), and roles and bindings.
44
services: container-service
55
ms.topic: conceptual
6-
ms.date: 03/24/2021
6+
ms.date: 09/27/2022
77
author: palma21
88
ms.author: jpalma
99

1010
---
1111

1212
# Access and identity options for Azure Kubernetes Service (AKS)
1313

14-
You can authenticate, authorize, secure, and control access to Kubernetes clusters in a variety of ways.
15-
* Using Kubernetes role-based access control (Kubernetes RBAC), you can grant users, groups, and service accounts access to only the resources they need.
16-
* With Azure Kubernetes Service (AKS), you can further enhance the security and permissions structure via Azure Active Directory and Azure RBAC.
14+
You can authenticate, authorize, secure, and control access to Kubernetes clusters in a variety of ways:
15+
16+
* Using Kubernetes role-based access control (Kubernetes RBAC), you can grant users, groups, and service accounts access to only the resources they need.
17+
* With Azure Kubernetes Service (AKS), you can further enhance the security and permissions structure using Azure Active Directory and Azure RBAC.
1718

1819
Kubernetes RBAC and AKS help you secure your cluster access and provide only the minimum required permissions to developers and operators.
1920

@@ -22,6 +23,7 @@ This article introduces the core concepts that help you authenticate and assign
2223
## Kubernetes RBAC
2324

2425
Kubernetes RBAC provides granular filtering of user actions. With this control mechanism:
26+
2527
* You assign users or user groups permission to create and modify resources or view logs from running application workloads.
2628
* You can scope permissions to a single namespace or across the entire AKS cluster.
2729
* You create *roles* to define permissions, and then assign those roles to users with *role bindings*.
@@ -31,7 +33,8 @@ For more information, see [Using Kubernetes RBAC authorization][kubernetes-rbac]
3133
### Roles and ClusterRoles
3234

3335
#### Roles
34-
Before assigning permissions to users with Kubernetes RBAC, you'll define user permissions as a *Role*. Grant permissions within a namespace using roles.
36+
37+
Before assigning permissions to users with Kubernetes RBAC, you'll define user permissions as a *Role*. Grant permissions within a namespace using roles.
3538

3639
> [!NOTE]
3740
> Kubernetes roles *grant* permissions; they don't *deny* permissions.
@@ -82,7 +85,8 @@ With Azure RBAC, you create a *role definition* that outlines the permissions to
8285

8386
For more information, see [What is Azure role-based access control (Azure RBAC)?][azure-rbac]
8487

85-
There are two levels of access needed to fully operate an AKS cluster:
88+
There are two levels of access needed to fully operate an AKS cluster:
89+
8690
* [Access the AKS resource in your Azure subscription](#azure-rbac-to-authorize-access-to-the-aks-resource).
8791
* Control scaling or upgrading your cluster using the AKS APIs.
8892
* Pull your `kubeconfig`.
@@ -227,19 +231,22 @@ By default Node Access is not required for AKS. The following access is needed
227231

228232
| Access | Reason |
229233
|---|---|
230-
| `kubelet` | Required for customer to grant MSI access to ACR. |
234+
| `kubelet` | Required to grant MSI access to ACR. |
231235
| `http app routing` | Required for write permission to "random name".aksapp.io. |
232-
| `container insights` | Required for customer to grant permission to the Log Analytics workspace. |
236+
| `container insights` | Required to grant permission to the Log Analytics workspace. |
233237

234238
## Summary
235239

236240
View the table for a quick summary of how users can authenticate to Kubernetes when Azure AD integration is enabled. In all cases, the user's sequence of commands is:
241+
237242
1. Run `az login` to authenticate to Azure.
238243
1. Run `az aks get-credentials` to download credentials for the cluster into `.kube/config`.
239-
1. Run `kubectl` commands.
244+
1. Run `kubectl` commands.
245+
240246
* The first command may trigger browser-based authentication to authenticate to the cluster, as described in the following table.
241247

242248
In the Azure portal, you can find:
249+
243250
* The *Role Grant* (Azure RBAC role grant) referred to in the second column is shown on the **Access Control** tab.
244251
* The Cluster Admin Azure AD Group is shown on the **Configuration** tab.
245252
* Also found with parameter name `--aad-admin-group-object-ids` in the Azure CLI.

0 commit comments

Comments
 (0)