Identity claims:
This is a continuation of a series of articles on
Azure services from an operational engineering perspective with the most recent
introduction to Azure Functions with the link here. This article discusses Microsoft Identity
Model.
One of the most important aspects of code that
executes in the cloud is the identity invoking it along with the claims it
presents. Identity refers to a security principal that is protected and whose
access is well-managed. The data associated with this entity and its
representation falls under and identity and access management routines for a
cloud service. While the execution of code to provide certain
functionalities requires privileges and an identity must provide claims to show
that the code can be executed, services operate with the least privilege policy
so that unauthenticated users are refuted, and unauthorized access is
forbidden.
The use of principal and access is critical to
Azure Functions just as much as it is for any service. Code must not only
demand for privilege, but the identity must also provide adequate claims. This
is particularly relevant to the user management.
Roles provide a convenient form of bundling these privileges and
enabling access controls. Roles can also be graded to have incremental
privileges. Certain deployment actions can also be performed with incremental
privileges.
One of the fundamental aspects of privileged code execution is the
ability to add privilege on demand.
The following code illustrates a way to do this programmatically:
using
System.IO;
using
IdentityClaim = Microsoft.IdentityModel.Claims.Claim;
using
IdentityClaimTypes = Microsoft.IdentityModel.Claims.ClaimTypes;
using
IdentityClaimsPrincipal = Microsoft.IdentityModel.Claims.ClaimsPrincipal;
using
ClaimsIdentityCollection =
Microsoft.IdentityModel.Claims.ClaimsIdentityCollection;
IClaimsIdentity claimsIdentity = new ClaimsIdentity(Thread.CurrentPrincipal.Identity);
var claimValue = string.Format("claim://{0}@{1}", DsmsResourceRole.PrivilegedDeploymentOperator, "sample-resource-folder-test");
var identityClaim = new IdentityClaim(IdentityClaimTypes.Role, claimValue);
claimsIdentity.Claims.Add(identityClaim);
ClaimsIdentityCollection
claimsIdentityCollection = new ClaimsIdentityCollection(new List<IClaimsIdentity>() { claimsIdentity });
var newIcp = IdentityClaimsPrincipal.CreateFromIdentities(claimsIdentityCollection);
Thread.CurrentPrincipal = newIcp;
The above example uses the
Microsoft.IdentityModel namespace to describe the elevation of privilege to run
some code.
No comments:
Post a Comment