все.
Я новичок в Интернете и Azure. У меня вопрос о добавлении сертификата в прослушиватель шлюза приложений Azure с Python. Я подробно описываю свою проблему следующим образом.
1. Фон
Я использую среду Azure:
Resource group name: My_ResourceGroup
Subscription ID: sub_id
Tenant ID: tenant_id
Client: my_client
Service principal password: sp_password
2. Верхний домен и субдомен
В группе ресурсов My_ResourceGroup
есть два поставщика Azure DNS с зонами contoso.com
и chen.contoso.com
соответственно. contoso.com
- это верхний домен, а chen.contoso.com
- поддомен.
Для chen.contoso.com
я создал запись A с именем www
и IP 10.10.10.10
(обратите внимание, что этот IP используется только для тестирования). Я также создал сертификат (файл cert.pfx
) для этого домена, чтобы использовать HTTPS.
3. Установите cert.pfx
сертификат на прослушиватель
У меня есть готовый шлюз приложений Azure contoso-appgw
в группе ресурсов My_ResourceGroup
. В этом шлюзе есть прослушиватель contoso-appgw-hl
, и в этом прослушивателе был сертификат cert0.pfx
.
Я хочу добавить (или установить) cert.pfx
сертификат в прослушиватель contoso-appgw-hl
с помощью Azure Python SDK. После этой операции в прослушивателе contoso-appgw-hl
: cert0.pfx
(старый) должно быть два сертификата. и cert.pfx
(новый).
4. Мой код и ссылки
Мой код Python выглядит следующим образом:
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.network import NetworkManagementClient
# Replace this with your subscription id
subscription_id = 'sub_id'
# Tenant ID for your Azure subscription
TENANT_ID = 'tenant_id'
# Your service principal App ID
CLIENT = 'client'
# Your service principal password
KEY = 'sp_password'
credentials = ServicePrincipalCredentials(
client_id = CLIENT,
secret = KEY,
tenant = TENANT_ID
)
network_client = NetworkManagementClient(credentials, subscription_id)
network_client.application_gateways.create_or_update(
'My_ResourceGroup',
'contoso-appgw',
{
'location': 'East US 2',
'http_listeners': [
{
'name': 'contoso-appgw-hl',
'protocol': 'Https',
'ssl_certificate': {
'data': 'cert.pfx',
'name': 'chenkui',
'password': '123abc'
}
}
]
}
)
Я написал свой код на основе следующих ресурсов:
- Пример кода: приложение Azure для управления образцом кода
- Документ Azure: определение функции create_or_update
Обратите внимание, что cert.pfx
в моем коде является сертификатом формата Base-64, потому что на основе документа требуется сертификат формата Base-64.
5. Сообщение об ошибке
Приведенный выше код не работает. Сообщение об ошибке, показанное в Azure Portal --> contoso-appgw --> Activity log
приведенного выше кода:
Operation name:
Create or Update Application Gateway
Error code:
InvalidRequestFormat
Message:
Cannot parse the request.
Даже если я использую портал Azure (т.е. вместо кода Python используйте портал с графическим интерфейсом пользователя в браузере), добавить сертификат также не удается. Сообщение об ошибке, показанное в Azure Portal --> contoso-appgw --> Activity log
:
Operation name:
Create or Update Application Gateway
Error code:
ApplicationGatewaySslCertificateDataMustBeSpecified
Message:
Data must be specified for Certificate /subscriptions/c72b5b1b-771e-4b65-ba34-a7db981c9dcf/resourceGroups/My_ResourceGroup/providers/Microsoft.Network/applicationGateways/contoso-appgw/sslCertificates/chenkui.
6. Мой вопрос
Мои вопросы даются следующим образом:
- Что означают эти сообщения об ошибках?
- Почему приводятся эти ошибки?
- В чем проблема моего кода и как ее решить?
Большое спасибо!
create_or_update
используется неправильно. При обновлении существующего ресурса мы должны сначалаget
это сделать. Я дам решение следующим образом. - person zchenkui   schedule 13.09.2019