Enable Role-Based Access Control (RBAC) Within Azure
More Info:
Ensure that RBAC is enabled on all Azure Kubernetes Services Instances
Risk Level
Medium
Address
Security
Compliance Standards
- CIS AZURE
- Cloudanix Best Practice
- HITRUST CSF
- SOC2
Triage and Remediation
- Remediation
Remediation
Using Console
To remediate the misconfiguration of enabling Role-Based Access Control (RBAC) within Azure Kubernetes Services, you can follow the below steps using the Azure console:
-
Open the Azure Portal and navigate to the Azure Kubernetes Service (AKS) cluster that needs to be remediated.
-
Click on the "Access Control (IAM)" option from the left-hand menu.
-
Click on the "Add" button and select "Add role assignment" from the dropdown menu.
-
In the "Add role assignment" blade, select the desired role from the "Role" dropdown menu. For example, "Owner", "Contributor" or "Reader".
-
In the "Select" box, search for the user or group that needs to be assigned the role.
-
Click on the "Save" button to assign the role to the selected user or group.
-
Repeat steps 4 to 6 to assign roles to other users or groups as needed.
-
Once all the roles have been assigned, click on the "Save" button to save the changes.
By following these steps, you will be able to enable Role-Based Access Control (RBAC) within Azure Kubernetes Services and remediate the misconfiguration.
Using CLI
To enable Role-Based Access Control (RBAC) within Azure Kubernetes Services (AKS) using AZURE CLI, please follow the below steps:
Step 1: Open the Azure CLI and login to your Azure account using the command:
az login
Step 2: Once you are logged in, set the subscription that contains the AKS cluster using the command:
az account set --subscription <subscription-id>
Step 3: After setting the subscription, enable RBAC on the AKS cluster using the following command:
az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --enable-rbac
Step 4: Verify that RBAC is enabled on the AKS cluster using the following command:
az aks show --resource-group <resource-group-name> --name <aks-cluster-name> --query "servicePrincipalProfile.role"
If the output of the above command is "Contributor", it means that RBAC is enabled on the AKS cluster.
By following the above steps, you can enable Role-Based Access Control (RBAC) within Azure Kubernetes Services (AKS) using AZURE CLI.
Using Python
To enable Role-Based Access Control (RBAC) within Azure Kubernetes Services using python, you can follow the below steps:
- Import the required libraries and authenticate to Azure using the Azure Identity library.
from azure.identity import DefaultAzureCredential
from azure.mgmt.containerservice import ContainerServiceClient
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.mgmt.authorization.models import RoleAssignmentCreateParameters
credential = DefaultAzureCredential()
container_service_client = ContainerServiceClient(credential, subscription_id)
authorization_client = AuthorizationManagementClient(credential, subscription_id)
- Get the resource group and AKS cluster details.
resource_group_name = "<resource-group-name>"
cluster_name = "<aks-cluster-name>"
cluster = container_service_client.managed_clusters.get(resource_group_name, cluster_name)
- Create a role assignment for the AKS cluster.
role_definition_id = "/subscriptions/{0}/providers/Microsoft.Authorization/roleDefinitions/{}".format(subscription_id, "b24988ac-6180-42a0-ab88-20f7382dd24c") # Contributor Role ID
principal_id = "<principal-id>" # Principal ID of the user or group to whom the role is assigned
role_assignment_parameters = RoleAssignmentCreateParameters(role_definition_id=role_definition_id, principal_id=principal_id)
result = authorization_client.role_assignments.create(resource_group_name, role_assignment_name, role_assignment_parameters)
Note: In the above code, replace the values of <resource-group-name>, <aks-cluster-name>, <principal-id> with the actual values.
- Verify the role assignment by listing all the role assignments for the resource group.
role_assignments = authorization_client.role_assignments.list_for_resource_group(resource_group_name)
for role_assignment in role_assignments:
print(role_assignment.name)
This will list all the role assignments for the resource group. You can verify that the role assignment created in step 3 is present in the list.
By following the above steps, you can enable Role-Based Access Control (RBAC) within Azure Kubernetes Services using python.
Using Terraform
resource "azurerm_kubernetes_cluster" "AKS_CLUSTER" {
name = "AKS_CLUSTER_NAME" # replace with your AKS cluster name
location = azurerm_resource_group.RG.location
resource_group_name = azurerm_resource_group.RG.name
dns_prefix = "AKS_DNS_PREFIX" # replace with your DNS prefix
sku_tier = "Free"
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_DS2_v2"
}
identity {
type = "SystemAssigned"
}
// This enables Kubernetes RBAC on the cluster
role_based_access_control_enabled = true
// Optional but recommended: integrate with Azure AD for RBAC
azure_active_directory_role_based_access_control {
managed = true
admin_group_object_ids = ["AAD_GROUP_OBJECT_ID"] # replace with Azure AD group object IDs
azure_rbac_enabled = false
}
}
Enabling role_based_access_control_enabled on an existing azurerm_kubernetes_cluster generally forces replacement of the AKS cluster; plan for downtime and data migration before applying.
For Azure App Service, this specific RBAC setting does not apply; RBAC for App Service is configured via Azure role assignments, not via an AKS-style flag in Terraform.
After updating Terraform, terraform plan should show role_based_access_control_enabled changing from false (or null) to true on the AKS cluster (and creation/update of the azure_active_directory_role_based_access_control block if added).