由于我是Azure的新手,这个问题可能很傻。我正在尝试构建一个提供和管理虚拟机集群的服务。出于安全考虑,我不想在每个集群上放一些敏感数据。因此我决定为每个集群提供一个Azure密钥库来存储这些数据,并创建一个MSI(managed identity)并分派给集群的每个节点,这样vm就可以访问密钥库来获取机密。
在服务端,我需要提供vms、密钥库和MSI。将MSI分配给每个VM,同时授予MSI访问AKV的权限。以下是我的问题:
1.系统分配的托管标识和用户分配的托管标识有什么区别?
根据我的研究,系统分配的托管标识是直接在Azure服务实例上启用的。系统分配的标识的生命周期直接绑定到启用它的Azure服务实例。如果实例被删除,Azure会自动清理Azure AD中的凭据和标识。
但是,用户分配的托管标识是作为独立的Azure资源创建的。创建标识后,可以将标识分配给一个或多个Azure服务实例。用户分配的标识的生命周期与分配给它的Azure服务实例的生命周期是分开管理的。
Azure CLI
az login
az identity create -g <RESOURCE GROUP> -n <USER ASSIGNED IDENTITY NAME>
Azure REST API A。使用Azure CLI获取访问令牌
az login
az account get-access-token
b.调用rest api
curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroup
s/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>?api-version=2015-08-31-preview' -X PUT -d '{"loc
ation": "<LOCATION>"}' -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
az login
az account get-access-token
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}?api-version=2018-02-14
Header :
Content-Type: application/json
Authorization: Bearer <ACCESS TOKEN>
Body
{
"location": "westus",
"properties": {
"tenantId": "<your tenant id>",
"sku": {
"family": "A",
"name": "standard"
},
"accessPolicies": [
{
"tenantId": "<your tenant id>",
"objectId": "<the object id of the MSI>",
"permissions": {
"keys": [
"encrypt",
"decrypt",
"wrapKey",
"unwrapKey",
"sign",
"verify",
"get",
"list",
"create",
"update",
"import",
"delete",
"backup",
"restore",
"recover",
"purge"
],
"secrets": [
"get",
"list",
"set",
"delete",
"backup",
"restore",
"recover",
"purge"
],
"certificates": [
"get",
"list",
"delete",
"create",
"import",
"update",
"managecontacts",
"getissuers",
"listissuers",
"setissuers",
"deleteissuers",
"manageissuers",
"recover",
"purge"
]
}
}
],
"enabledForDeployment": true,
"enabledForDiskEncryption": true,
"enabledForTemplateDeployment": true
}
}
az login
az ad sp create-for-rbac -n "MyApp" --role contributor --sdk-auth
b.代码。更多详情请参阅示例
// please install package Microsoft.Azure.Management.Fluent
var credentials = SdkContext.AzureCredentialsFactory
.FromServicePrincipal(<the sp app id>,
<the sp password>,
tenantId,
AzureEnvironment.AzureGlobalCloud);
var azure = Microsoft.Azure.Management.Fluent.Azure
.Configure()
.Authenticate(credentials)
.WithSubscription ("<your subscription id>");
var vault =await azure.Vaults.Define("")
.WithRegion(Region.AsiaSouthEast)
.WithExistingResourceGroup("groupname")
.DefineAccessPolicy()
.ForObjectId("the object id of msi")
.AllowCertificateAllPermissions()
.AllowKeyAllPermissions()
.AllowSecretAllPermissions()
.Attach()
.WithDeploymentEnabled()
.WithDiskEncryptionEnabled()
.WithTemplateDeploymentEnabled()
.WithSku(Microsoft.Azure.Management.KeyVault.Fluent.Models.SkuName.Standard)
.CreateAsync()
我正在python中构建由事件网格事件触发的Azure函数,它应该能够从Kay Vault收集秘密。 我将系统分配的托管标识添加到我的功能应用程序中,然后我可以在密钥库访问策略中选择我的应用程序。我授予它如下所示的权限: (我尝试了不同的组合在这一个)
是否有一种方法可以使用Delphi访问Azure密钥库?我可以使用柏林的data.cloud.azureapi单元访问数据库和blob存储,但想从密钥库中获取数据库连接字符串,但似乎找不到任何用于此操作的代码。
我试图在Visual Studio中本地运行Docker中的。NET Core3.1应用程序。应用程序需要访问Azure密钥库。 参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/53D4D1E1-3360-4735-8AAD-21C6155F528A。异常消息:试图使用Azure CLI获取令牌
我想通过托管服务标识(MSI)从我的Service Fabric应用程序访问密钥库。我已经在Azure门户中设置的虚拟机规模上启用了MSI,并授予它访问我的密钥库资源的权限。这就像一个云中的魅力。然而,我的本地开发环境有问题。 据我所知,我可以授予自己对密钥库的访问权,并在Azure CLI中运行。唉,当在本地Service Fabric集群中运行应用程序时,这就不起作用了。我假设这是因为一个本地
我已经能够通过外部web应用程序使用oauth rest api访问azure key vault,但出于某种原因,我无法从密钥中检索机密。经过长时间的研究,我发现用powershell和C#可以做到这一点,但还没有找到用Python解决方案。有人知道python是否有可能,或者有一种方法可以模拟powershell正在做什么吗?以下是检索秘密的代码: 此外,我已经在azure portal中注册
这在调试期间也有效,但是当我发布到Azure时,它也会失败,因为我的密钥返回null。 任何帮助在哪里我应该看看如何解决这将是伟大的。为什么在生产中会得到null,而在提供相同凭据时却不进行调试?