You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -48,3 +48,11 @@
48
48
## Fixes
49
49
- Updated library golang.org/x/crypto to version v0.33.0 to address authorization bypass vulnerability (https://github.com/advisories/GHSA-v778-237x-gjrc)
- Update documentation for more clear instructions on deploying workloads to Azure Kubernetes Service and Google Kubernetes Engine, as well as permissions needed on Command Security Roles.
@@ -71,24 +71,36 @@ Command Issuer enrolls certificates by submitting a POST request to the Command
71
71
72
72
- If you don't have any suitable Certificate Templates, refer to the [Command documentation](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/Configuring%20Template%20Options.htm?Highlight=Certificate%20Template) or reach out to your Keyfactor support representative to learn more.
73
73
74
-
The Certificate Template that you shoose must be configured to allow CSR Enrollment.
74
+
The Certificate Template that you choose must be configured to allow CSR Enrollment.
75
75
76
76
You should make careful note of the allowed Key Types and Key Sizes on the Certificate Template. When creating cert-manager [Certificates](https://cert-manager.io/docs/usage/certificate/), you must make sure that the key `algorithm` and `size` are allowed by your Certificate Template in Command.
77
77
78
78
The same goes for **Enrollment RegExes** and **Policies** defined on your Certificate Template. When creating cert-manager [Certificates](https://cert-manager.io/docs/usage/certificate/), you must make sure that the `subject`, `commonName`, `dnsNames`, etc. are allowed and/or configured correctly by your Certificate Template in Command.
79
79
80
80
3.**Configure Command Security Roles and Claims**
81
81
82
-
In Command, Security Roles define groups of users or administrators with specific permissions. Users and subjects are identified by Claims. By adding a Claim to a Security Role, you can define what actions the user or subject can perform and what parts of the system it can interact with.
82
+
In Command, Security Roles define groups of users or administrators with specific permissions. Users and subjects are identified by Claims. By adding a Claim to a Security Role, you can define what actions the user or subject can perform and what parts of the system it can interact with.
83
+
84
+
The security role will need to be added as an Allowed Requester Security Role on the Certificate Authority and Certificate Template configured in the previous two steps.
83
85
84
86
- If you haven't created Roles and Access rules before, [this guide](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/SecurityOverview.htm?Highlight=Security%20Roles) provides a primer on these concepts in Command.
85
87
86
-
If your security policy requires fine-grain access control, Command Issuer requires the following Access Rules.
88
+
If your security policy requires fine-grain access control, Command Issuer requires the following Access Rules:
89
+
90
+
| Global Permissions | Permission Model (Version Two) | Permission Model (Version One) |
> Documentation for [Version Two Permission Model](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/SecurityRolePermissions.htm#VersionTwoPermissionModel) and [Version One Permission Model](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/SecurityRolePermissions.htm#VersionOnePermissionModel)
Azure Entra ID workload identity in Azure Kubernetes Service (AKS) allows Command Issuer to exchange a Kubernetes ServiceAccount Token for an Azure Entra ID access token, which is then used to authenticate to Command.
175
187
188
+
At this time, Azure Kuberentes Services workload identity federation is best supported by [User Assigned Managed Identities](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-manage-user-assigned-managed-identities?pivots=identity-mi-methods-azp). Other identity solutions such as Azure AD Service Principals are not supported.
189
+
190
+
Here is a guide on how to use Azure User Assigned Managed Identities to authenticate your AKS workload with your Keyfactor Command instance.
191
+
176
192
1. Reconfigure the AKS cluster to enable workload identity federation.
177
193
178
194
```shell
195
+
export CLUSTER_NAME=<cluster-name>
196
+
export RESOURCE_GROUP=<resource-group>
179
197
az aks update \
180
-
--name ${CLUSTER} \
198
+
--name ${CLUSTER_NAME} \
199
+
--resource-group ${RESOURCE_GROUP} \
181
200
--enable-oidc-issuer \
182
201
--enable-workload-identity
183
202
```
@@ -186,16 +205,28 @@ Azure Entra ID workload identity in Azure Kubernetes Service (AKS) allows Comman
186
205
>
187
206
> Refer to the [AKS documentation](https://learn.microsoft.com/en-us/azure/aks/workload-identity-deploy-cluster) for more information on the `--enable-workload-identity` feature.
188
207
189
-
2. Reconfigure or deploy Command Issuer with extra labels forthe Azure Workload Identity webhook, which will resultin the Command Issuer controller Pod having an extra volume containing a Kubernetes ServiceAccount token which it will exchange for a token from Azure.
208
+
2. Create a User Assigned Managed Identity in Azure.
209
+
210
+
```shell
211
+
export IDENTITY_NAME=command-issuer
212
+
az identity create --name "${IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}"
213
+
```
214
+
> Read more about [the `az identity` command](https://learn.microsoft.com/en-us/cli/azure/identity?view=azure-cli-latest).
215
+
216
+
3. Reconfigure or deploy Command Issuer with extra labels forthe Azure Workload Identity webhook, which will resultin the Command Issuer controller Pod having an extra volume containing a Kubernetes ServiceAccount token which it will exchange for a token from Azure.
@@ -226,35 +257,83 @@ Azure Entra ID workload identity in Azure Kubernetes Service (AKS) allows Comman
226
257
227
258
> Refer to [Azure Workload Identity docs](https://azure.github.io/azure-workload-identity/docs/installation/mutating-admission-webhook.html) more information on the role of the Mutating Admission Webhook.
228
259
229
-
3. Create a User Assigned Managed Identity in Azure.
230
-
231
-
```shell
232
-
export IDENTITY_NAME=command-issuer
233
-
az identity create --name "${IDENTITY_NAME}"
234
-
```
235
-
236
-
> Read more about [the `az identity` command](https://learn.microsoft.com/en-us/cli/azure/identity?view=azure-cli-latest).
237
-
238
260
4. Associate a Federated Identity Credential (FIC) with the User Assigned Managed Identity. The FIC allows Command Issuer to act on behalf of the Managed Identity by telling Azure to expect:
239
261
- The `iss` claim of the ServiceAccount token to match the cluster's OIDC Issuer. Azure will also use the Issuer URL to download the JWT signing certificate.
240
262
- The `sub` claim of the ServiceAccount token to match the ServiceAccount's name and namespace.
241
263
242
264
```shell
243
265
export SERVICE_ACCOUNT_NAME=command-cert-manager-issuer # This is the default Kubernetes ServiceAccount used by the Command Issuer controller.
244
266
export SERVICE_ACCOUNT_NAMESPACE=command-issuer-system # This is the default namespace for Command Issuer used in this doc.
245
-
export SERVICE_ACCOUNT_ISSUER=$(az aks show --resource-group $AZURE_DEFAULTS_GROUP --name $CLUSTER --query "oidcIssuerProfile.issuerUrl" -o tsv)
267
+
268
+
export SERVICE_ACCOUNT_ISSUER=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)
> Read more about [Workload Identity federation](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation) in the Entra ID documentation.
254
279
>
255
280
> Read more about [the `az identity federated-credential` command](https://learn.microsoft.com/en-us/cli/azure/identity/federated-credential?view=azure-cli-latest).
256
281
257
-
5. Add Microsoft Entra ID as an [Identity Provider in Command](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/IdentityProviders.htm?Highlight=identity%20provider), and [add the Managed Identity's Client ID as an `oid` claim to the Security Role](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/SecurityOverview.htm?Highlight=Security%20Roles) created/identified earlier.
282
+
5. Get the Managed Identity's Principal ID and Entra Identity Provider Information
export CURRENT_TENANT=$(az account show --query tenantId --output tsv)
287
+
echo "UAMI Principal ID: ${UAMI_PRINCIPAL_ID}"
288
+
289
+
echo "View then OIDC configuration for the Entra OIDC token issuer: https://login.microsoftonline.com/$CURRENT_TENANT/v2.0/.well-known/openid-configuration"
> **IMPORTANT NOTE**: The Microsoft Entra Identity Provider is associated with your Azure tenant ID. Multi-tenant Azure workloads will require a Command Identity Provider for each tenant.
295
+
296
+
6. Add the Microsoft Entra ID as an [Identity Provider in Command](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/IdentityProviders.htm?Highlight=identity%20provider) using the identity provider information from the previous step, and [add the Managed Identity's Principal ID as an `OAuth Subject` claim to the Security Role](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/SecurityOverview.htm?Highlight=Security%20Roles) created/identified earlier.
297
+
298
+
## Google Kubernetes Engine (GKE) Workload Identity
299
+
300
+
Google Kuberentes Engine (GKE) supports the ability to authenticate your GKE workloads using workload identity.
301
+
302
+
By default, GKE clusters are assigned the [default service account](https://cloud.google.com/compute/docs/access/service-accounts#token) for your Google project. This service account is used to generate an ID token for your workload. However, you may opt to use [Workload Identity Federation](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#metadata-server) to your GKE cluster.
303
+
304
+
1. Get the OAuth Client and Identity Provider for your GKE Cluster
305
+
306
+
Regardless if you are using the default service account or a custom service account, the following script will help you derive your GKE cluster's OAuth Client:
307
+
308
+
```shell
309
+
export CLUSTER_NAME=<cluster-name>
310
+
export GCLOUD_REGION=<region>
311
+
export GCLOUD_PROJECT_ID=$(gcloud config get-value project) # populate with the current PROJECT_ID context
echo "View the OIDC configuration for Google's OIDC token issuer: https://accounts.google.com/.well-known/openid-configuration"
332
+
333
+
echo "Authority: https://accounts.google.com"
334
+
```
335
+
336
+
2. Add Google as an [Identity Provider in Command](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/IdentityProviders.htm?Highlight=identity%20provider) using the identity provider information from the previous step, and [add the Service Account's OAuth Client ID as an `OAuth Subject` claim to the Security Role](https://software.keyfactor.com/Core-OnPrem/Current/Content/ReferenceGuide/SecurityOverview.htm?Highlight=Security%20Roles) created/identified earlier.
0 commit comments