如何使用 Powershell 在 Azure API Management 中禁用订阅密钥
How to disable subscription key in Azure API Managment with Powershell
我们正在使用 Azure API 管理和 Powershell 通过脚本在门户上导入配置,但是每当导入 API 时,都会启用来自门户的 "Subscription required" 检查(API 需要订阅密钥)。我们现在没有在 API 上使用订阅功能,所以我们需要在导入时禁用它。我们使用 Import-AzApiManagementApi
和 Set-AzApiManagementApi
以及以下代码:
Set-AzApiManagementApi -ApiId $apiId -Context $context -Protocols @('https') -ServiceUrl $serviceBase$path -Name $api.Name
Set-AzApiManagementPolicy -Context $context -ApiId $apiId -PolicyFilePath "$pwd/src/private/security_policy.xml"
我们还没有在 documentation 中找到导入 API 的方法而不需要这个检查。是否有任何脚本可以通过 powershell 禁用此功能?
您可以使用 Arm 模块命令 Set-AzureRmApiManagementProduct 或 Az 模块命令 Set-AzApiManagementProduct 来禁用所需的订阅选项
检查以下文件
更新
我可以看到 set-azapimanagementapi 现在支持 SubscriptionRequired 参数
Set-AzApiManagementApi
-Context <PsApiManagementContext>
-ApiId <String>
[-Name <String>]
[-Description <String>]
[-ServiceUrl <String>]
[-Path <String>]
[-Protocols <PsApiManagementSchema[]>]
[-AuthorizationServerId <String>]
[-AuthorizationScope <String>]
[-OpenIdProviderId <String>]
[-BearerTokenSendingMethod <String[]>]
[-SubscriptionKeyHeaderName <String>]
[-SubscriptionKeyQueryParamName <String>]
[-SubscriptionRequired]
[-PassThru]
[-DefaultProfile <IAzureContextContainer>]
[<CommonParameters>]
快速补充。以下 Powershell 命令会将 API 的 Subscription Required 属性 设置为 false。不过请注意:这目前不适用于 Azure DevOps 管道。管道将成功声明任务 运行,如果您 运行 在管道中回显 $api,它将显示 api 具有 SubscriptionRequired:False。但是,如果您去检查 Azure 中的 api,它仍将设置为 True(默认行为)。
# get context
$apimContext = New-AzApiManagementContext -ResourceGroupName "targetResourceGroup" -ServiceName "targetApimInstance"
$api = Get-AzApiManagementApi -Context $apimContext -Name "Name of Api"
# set subscriptionRequired to false
$api.SubscriptionRequired=$false
我无法按照 的建议使用 Set-AzApiManagementApi 将导入的 API 上的 SubscriptionRequired 更改为 false。由于 SubscriptionRequired 是一个开关参数,我无法将其指定为 false。
但是, 的变体起作用了。 @RomericRobo 的回答缺少用于保存更改的最终 Set-AzApiManagementApi 命令(抱歉,我无法编辑或评论他的回答)。我完整的工作解决方案是:
# get context
$apimContext = New-AzApiManagementContext -ResourceGroupName "targetResourceGroup" -ServiceName "targetApimInstance"
$api = Get-AzApiManagementApi -Context $apimContext -ApiId "api-id"
# set subscriptionRequired to false
$api.SubscriptionRequired=$false
Set-AzApiManagementApi -InputObject $api
我们正在使用 Azure API 管理和 Powershell 通过脚本在门户上导入配置,但是每当导入 API 时,都会启用来自门户的 "Subscription required" 检查(API 需要订阅密钥)。我们现在没有在 API 上使用订阅功能,所以我们需要在导入时禁用它。我们使用 Import-AzApiManagementApi
和 Set-AzApiManagementApi
以及以下代码:
Set-AzApiManagementApi -ApiId $apiId -Context $context -Protocols @('https') -ServiceUrl $serviceBase$path -Name $api.Name
Set-AzApiManagementPolicy -Context $context -ApiId $apiId -PolicyFilePath "$pwd/src/private/security_policy.xml"
我们还没有在 documentation 中找到导入 API 的方法而不需要这个检查。是否有任何脚本可以通过 powershell 禁用此功能?
您可以使用 Arm 模块命令 Set-AzureRmApiManagementProduct 或 Az 模块命令 Set-AzApiManagementProduct 来禁用所需的订阅选项
检查以下文件
更新
我可以看到 set-azapimanagementapi 现在支持 SubscriptionRequired 参数
Set-AzApiManagementApi
-Context <PsApiManagementContext>
-ApiId <String>
[-Name <String>]
[-Description <String>]
[-ServiceUrl <String>]
[-Path <String>]
[-Protocols <PsApiManagementSchema[]>]
[-AuthorizationServerId <String>]
[-AuthorizationScope <String>]
[-OpenIdProviderId <String>]
[-BearerTokenSendingMethod <String[]>]
[-SubscriptionKeyHeaderName <String>]
[-SubscriptionKeyQueryParamName <String>]
[-SubscriptionRequired]
[-PassThru]
[-DefaultProfile <IAzureContextContainer>]
[<CommonParameters>]
快速补充。以下 Powershell 命令会将 API 的 Subscription Required 属性 设置为 false。不过请注意:这目前不适用于 Azure DevOps 管道。管道将成功声明任务 运行,如果您 运行 在管道中回显 $api,它将显示 api 具有 SubscriptionRequired:False。但是,如果您去检查 Azure 中的 api,它仍将设置为 True(默认行为)。
# get context
$apimContext = New-AzApiManagementContext -ResourceGroupName "targetResourceGroup" -ServiceName "targetApimInstance"
$api = Get-AzApiManagementApi -Context $apimContext -Name "Name of Api"
# set subscriptionRequired to false
$api.SubscriptionRequired=$false
我无法按照
但是,
# get context
$apimContext = New-AzApiManagementContext -ResourceGroupName "targetResourceGroup" -ServiceName "targetApimInstance"
$api = Get-AzApiManagementApi -Context $apimContext -ApiId "api-id"
# set subscriptionRequired to false
$api.SubscriptionRequired=$false
Set-AzApiManagementApi -InputObject $api