有人可以帮助我了解在 AAD 中创建应用注册时创建的服务主体与在应用服务的标识边栏选项卡上启用“系统分配”时创建的托管标识之间的区别吗?
我们有一个正在开发的应用服务,我们已经为其创建了应用注册,并且我们还启用了系统分配的身份。当我们进入 AAD 下的企业应用程序并搜索我们的应用程序时,它会出现 2 个条目。一个用于托管身份,另一个用于作为应用注册的一部分创建的服务主体。我们试图了解我们将使用哪一个来授予应用程序写入 Azure SQL DB 的权限。
我正在尝试创建一个 az cli 查询,它可以评估我是否登录到正确的租户和订阅。我知道我必须使用?
和&&
运算符,但还无法将它们组合成正确的组合。当我使用下面的行查询单个值时,工作正常:
az account list --query "[?id=='my_subscription_id']" --output json
Run Code Online (Sandbox Code Playgroud)
但是当我尝试下面的任何一行时,它告诉我它是无效的 jmespath_type 值:
az account list --query "[?id=='my_subscription_id' && ?tenantId=='my_tenant_id']" --output json
az account list --query "[(?id=='my_subscription_id') && (?tenantId=='my_tenant_id')]" --output json
Run Code Online (Sandbox Code Playgroud)
当我尝试下面的行时,它给了我错误] was unexpected at this time
:
az account list --query "[(?id=='my_subscription_id')&&(?tenantId=='my_tenant_id')]" --output json
Run Code Online (Sandbox Code Playgroud)
我知道这是可以做到的,只是似乎还找不到合适的混合物。
更新信息:
经过进一步的测试,我取得了一些进展,但仍然不完全符合我的预期。假设租户ID是123,我想要的订阅ID是ABC,我的帐户也可以访问订阅ID EFG。运行以下命令时:
az account list --query "[].{subscriptionId:id,tenantId:tenantId}"
Run Code Online (Sandbox Code Playgroud)
我得到输出:
{
"subscriptionId": "ABC",
"tenantId": "123"
},
{
"subscriptionId": "EFG",
"tenantId": "123"
}
Run Code Online (Sandbox Code Playgroud)
我希望运行下面的命令,只会返回匹配的单个记录:
az account list --query "[?id == …
Run Code Online (Sandbox Code Playgroud) 尝试az cli
使用服务主体执行登录并抛出错误说明No subscriptions found for <Service_Principal_AppId>. If this is expected, use '--allow-no-subscriptions'
. 此代码以前运行良好,但现在似乎不再起作用。正在使用的命令行如下:
$sp_appid = (Get-AzureRmADServicePrincipal -DisplayName $spDisplayName).ApplicationId.Guid
$sp_secret = (Get-AzureKeyVaultSecret -VaultName $kvName -Name $appKeySecretName).SecretValueText
az login --service-principal --username $sp_appid --password $sp_secret --tenant $tenant_Id
Run Code Online (Sandbox Code Playgroud)
我验证了Contributor
在订阅级别为服务主体分配了角色。
我的variables.tf
文件中声明了一个变量,如下所示:
variable "linux_jb_0" {
description = "Linux jump box settings"
type = object(
{
vm_size = string
adm_acct = string
}
)
default = {
vm_size = "Standard_A1"
adm_acct = null
}
}
Run Code Online (Sandbox Code Playgroud)
我试图确定如何adm_acct
从命令行将值传递给该变量的属性。我已经尝试过以下方法,但它不起作用:
terraform apply -var "linux_jb_0={"adm_acct":$account","vm_size":"Standard_A1"}"
Run Code Online (Sandbox Code Playgroud)
这个命令告诉我Variables not allowed
。在这种情况下真的不允许使用变量还是我的语法不正确?
我正在 Azure 中的 bash cloud shell 中使用 Terraform。我正在尝试将外部数据源添加到我的 Terraform 配置文件中,该文件将用于az cli
查询virtualip
模板部署的 Microsoft.Web/hostingEnvironment 上的对象。
AZ CLI 命令行:
az resource show --ids /subscriptions/<subscription Id>/resourceGroups/my-ilbase-rg/providers/Microsoft.Web/hos
tingEnvironments/my-ilbase/capacities/virtualip
从命令行运行时的输出:
{
"additionalProperties": {
"internalIpAddress": "10.10.1.11",
"outboundIpAddresses": [
"52.224.70.119"
],
"serviceIpAddress": "52.224.70.119",
"vipMappings": []
},
"id": null,
"identity": null,
"kind": null,
"location": null,
"managedBy": null,
"name": null,
"plan": null,
"properties": null,
"sku": null,
"tags": null,
"type": null
}
Run Code Online (Sandbox Code Playgroud)
在我的 Terraform 配置中,我为--ids
值创建一个变量:
variable ilbase_resourceId {
default = "/subscriptions/<subscription Id>/resourceGroups/my-ilbase-rg/providers/Microsoft.Web/hostingEnvironments/my-ilbase/capacities/virtualip"
}
Run Code Online (Sandbox Code Playgroud)
然后我以这种方式构建数据源:
data …
Run Code Online (Sandbox Code Playgroud) 我试图在创建具有 4 个子网的虚拟网络的模块中输出每个子网的引用 ID。我可以得到第一个,[0]
但是当我尝试输出其他的时,[1], [2], [3]
部署失败并抛出错误:
The language expression property array index "1" is out of bounds
以下是创建 virtualNetwork 和子网的代码:
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2018-11-01' = {
name: vNetName
location: location
tags: tags
properties: {
addressSpace: {
addressPrefixes: [
addressPrefix
]
}
subnets: subnets
}
}
Run Code Online (Sandbox Code Playgroud)
subnets
是数组类型的变量:
var subnets = [
{
name: mgmtSubnetName
properties: {
addressPrefix: mgmtSubnetAddressPrefix
}
}
{
name: intSubnetName
properties: {
addressPrefix: intSubnetAddressPrefix
}
}
{
name: extSubnetName
properties: {
addressPrefix: extSubnetAddressPrefix
} …
Run Code Online (Sandbox Code Playgroud) 我是Terraform的新手,所以甚至不确定这样的事情是否可行。举例来说,假设我有一个模板,该模板中部署了一个Azure资源组和一个密钥库。然后说我有另一个模板,可以将虚拟机部署到同一资源组中。是否可以在不破坏密钥库和资源组的情况下使用虚拟机模板进行破坏?我们试图将大型解决方案的各个部分划分开来,而不必将其全部放在一个模板中,并且我们希望能够独立管理每个部分而又不影响其他部分。
在相关说明中...我们将状态文件存储在Azure存储帐户中。如果我们将部署分解为多个分区的部署...每个部署应该有自己的状态文件还是应该都使用相同的状态文件?
我们正在使用 Terraform 将 Web 应用程序部署到 Azure,并希望不再使用 web.config 进行配置设置。我相信我们可以在部署时使用资源app_settings
参数来实现这些azurerm_app_service
,但尝试找到如何正确格式化它的示例。