Azure Cloud Services で HTTPS 通信を有効にする (延長サポート)
[アーティクル] 04/13/2024
2 人の共同作成者
フィードバック
この記事の内容
Microsoft Azure Cloud Servicesとの通信 (延長サポート) は、Hypertext Transfer Protocol Secure (HTTPS) プロトコルを使用して行われます。 この記事では、Cloud Services (延長サポート) に対して HTTPS 通信を有効にする方法について説明します。
前提条件
プロジェクトの配置の一般的な手順
Cloud Services (延長サポート) プロジェクトを Azure にデプロイする一般的な手順は次のとおりです。
証明書を準備します。
プロジェクトを構成します。
プロジェクト ファイルをクラウド サービスのサービス定義 (.csdef)、サービス構成 (.cscfg)、およびサービス パッケージ (.cspkg) ファイルにパッケージ化します。
必要に応じて、Cloud Services (延長サポート) リソースの構成を変更します。 たとえば、次のいずれかの変更を行うことができます。
パッケージ URL を更新します。
URL 設定を構成します。
オペレーティング システム シークレットの設定を更新します。
新しいプロジェクトを Azure にデプロイして更新します。
注:
プロジェクトは、次のツールを使用するなど、いくつかの異なる方法でデプロイできます。
デプロイ方法に関係なく、一般的なデプロイ手順は同じです。
これらの手順の最初の 2 つはすべてのデプロイ方法に必要です。 これらの手順については、「コードの 変更 」セクションで説明します。 残りの手順も重要ですが、必ずしも手動によるユーザー介入が必要とは限りません。 たとえば、手順は Visual Studio などのツールによって自動的に実行される場合があります。 これらの手順の最後の 3 つは、「構成の 変更」 セクションで説明されています。
コードの変更
コードを変更して証明書を準備し、プロジェクトを構成するには、次の手順を実行します。
手順 6. の手順に従って 、証明書をキー コンテナーにアップロード します。
証明書の拇印 (40 桁の 16 進文字列) を書き留めます。
プロジェクトの サービス構成 (.cscfg) ファイル で、証明書を使用するロールに証明書の拇印を追加します。 たとえば、証明書を SSL 証明書として使用して WebRole と通信する場合は、 の次のスニペット WebRole1
のような XML コードをルート ServiceConfiguration
要素の最初の子として追加できます。
<Role name="WebRole1">
<Instances count="1" />
<Certificates>
<Certificate
name="Certificate1"
thumbprint="0123456789ABCDEF0123456789ABCDEF01234567"
thumbprintAlgorithm="sha1"
/>
</Certificates>
</Role>
証明書の名前はカスタマイズできますが、サービス定義 (.csdef) ファイルで使用される証明書名と一致する必要があります。
サービス定義 (.csdef) ファイルに 、次の要素を追加します。
親 XPath
追加する要素
使用する属性
/ServiceDefinition/WebRole/Sites/Site/Bindings
Binding
name 、 endpointName
/ServiceDefinition/WebRole/Endpoints
InputEndpoint
名前 、 プロトコル 、 ポート 、 証明書
/ServiceDefinition/WebRole
Certificates/Certificate
name , storeLocation , storeName , permissionLevel
要素は Certificates
、終了 Endpoints
タグの直後に追加する必要があります。 属性は含まれません。 子 Certificate
要素のみが含まれています。
たとえば、サービス定義ファイルは次の XML コードのようになります。
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="CSESOneWebRoleHTTPS" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="WebRole1" vmsize="Standard_D1_v2">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
<Binding name="HttpsIn" endpointName="HttpsIn" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
<InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="Certificate1" />
</Endpoints>
<Certificates>
<Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" permissionLevel="limitedOrElevated" />
</Certificates>
</WebRole>
</ServiceDefinition>
この例では、サービス定義ファイルを変更して、ポート 443 の HTTPS プロトコルの の入力エンドポイント HttpsIn
をバインドします。 制限付きまたは昇格されたアクセス許可レベルに対して のMy
名前と の場所LocalMachine
を持つストアに証明書を使用Certificate1
します。 要素と Certificate
要素のInputEndpoint
証明書名は相互に一致します。 また、前の手順のサービス構成 (.cscfg) ファイルで使用された証明書名と一致します。
構成の変更
クラウド サービスの構成を変更する手順は、クラウド サービスのデプロイ方法によって異なります。 これらの手順は、次のタブに表示されます。 各タブは、異なるデプロイ方法を表します。
続行する前に、Azure portalを使用して Azure Cloud Services (延長サポート) をデプロイする方法に関するページを 参照してください。 次に、次の手順に従って、Azure portalを使用して正しい構成を変更します。
「従来のクラウド サービスからクラウド サービス拡張サポートと ARM テンプレートを使用した手動移行 」というタイトルのブログ エントリに移動し、手順 7 から 9 に従います。 これらの手順では、次の手順を実行する方法について説明します。
Azure portal で、クラウド サービスの [概要 ] ページに戻り、[更新 ] を選択します。
[ クラウド サービスの更新 ] ページで、[ 基本 ] タブで次の変更を行います。
[ Package/configuration/service definition location]\(パッケージ/構成/サービス定義の場所\ ) フィールド で、[BLOB から ] を選択します。
[ パッケージのアップロード (.cspkg、.zip)] フィールドで、次の手順を実行します。
[参照] リンクを選択 します 。
ファイルをアップロードしたストレージ アカウントとコンテナーを選択します。
コンテナー ページで、対応するファイル (この場合は <project-name.cspkg> ) を選択し、[選択] ボタンを選択 します。
[ 構成のアップロード (.cscfg)] フィールド ( および ServiceConfiguration.Cloud.cscfg ファイル) で、前の手順で説明したサブプロファイルを繰り返します。
[ サービス定義のアップロード (.csdef)] フィールド ( および ServiceDefinition.csdef ファイル) で、サブプロファイルをもう一度繰り返します。
[ 構成 ] タブを選択します。
[ キー コンテナー ] フィールドで、証明書をアップロードしたキー コンテナーを選択します (前の「コードの 変更 」セクションで)。 選択したキー コンテナーで証明書が見つかったら、一覧表示された証明書に [状態] が [見つかりました] と 表示されます。
新しく構成されたプロジェクトをデプロイするには、[ 更新 ] ボタンを選択します。
続行する前に、「Azure PowerShellを使用してクラウド サービス (延長サポート) をデプロイする」 を参照してください。 次に、PowerShell スクリプトを使用して構成を変更するには、次の手順に従います。
「従来のクラウド サービスからクラウド サービス拡張サポートと ARM テンプレートを使用した手動移行 」というタイトルのブログ エントリに移動し、手順 7 から 9 に従います。 これらの手順では、次の手順を実行する方法について説明します。
Connect-AzAccount コマンドレットを実行して Azure にサインインします。
次の PowerShell スクリプトで、スクリプトの先頭にあるプレースホルダーを各変数の実際の値に置き換え、スクリプトを実行してクラウド サービスを更新します。
# Enter values for placeholders in the following variables.
$vaultName = "<key-vault-resource-name>"
$resourceGroupKeyVault = "<resource-group-name-where-key-vault-is-deployed>"
$certificateName = "<name-of-certificate-saved-in-key-vault>"
$cloudService = @{
Name = "<name-of-cloud-service>"
ResourceGroupName = "<resource-group-name-where-cloud-service-is-deployed>"
SubscriptionId = "<subscription-guid>"
}
$cscfgFilePath = "<local-path-to-your-service-configuration-file-cscfg>"
$cspkgUrl = "<sas-token-url-of-the-service-package-file-cspkg>"
# Code execution
$keyVault = Get-AzKeyVault -VaultName $vaultName -ResourceGroupName $resourceGroupKeyVault
$certificate = Get-AzKeyVaultCertificate -VaultName $vaultName -Name $certificateName
$vaultSecretGroupObject = @{
CertificateUrl = $certificate.SecretId
Id = $keyVault.ResourceId
}
$secretGroup = New-AzCloudServiceVaultSecretGroupObject @vaultSecretGroupObject
$osProfile = @{secret = @($secretGroup)}
$cses = Get-AzCloudService @cloudService
$cses.Configuration = Get-Content $cscfgFilePath | Out-String
$cses.PackageUrl = $cspkgUrl
$cses.OSProfile = $osProfile
$cses | Update-AzCloudService
続行する前に、「 ARM テンプレートを使用したクラウド サービスのデプロイ (延長サポート)」 を参照してください。 次に、次の手順に従って ARM テンプレートを構成します。
「従来のクラウド サービスからクラウド サービスへの手動移行 」というタイトルのブログ エントリに移動し、ARM テンプレートを使用した Cloud Service 拡張サポートに移動し、手順 7 から 10 に従います。 これらの手順では、次の手順を実行する方法について説明します。
プロジェクトをパッケージ化します。
生成されたサービス パッケージ (<project-name.cspkg> ) とクラウド サービス構成 (ServiceConfiguration.Cloud.cscfg ) ファイルをクラウド サービスのストレージ アカウント コンテナーにアップロードします。
アップロードされた各ファイルの共有アクセス署名 (SAS) URL を生成します。
Azure portalのキー コンテナー証明書ページから次の値を取得します。
Key Vault 証明書の URL
サブスクリプション ID
キー コンテナーがデプロイされるリソース グループの名前
キー コンテナーのサービス名
クラウド サービス用の元の ARM テンプレートで、 プロパティを osProfile
見つけます。 元のクラウド サービス プロジェクトで HTTP 通信のみがサポートされている場合、 osProfile
プロパティは空です ("osProfile": {}
)。 クラウド サービスが正しいキー コンテナーから正しい証明書を取得できるようにするには、ARM テンプレート内で使用するキー コンテナーを指定します。 パラメーターを使用して、この値を表すことができます。 または、次の例に示すように、値を ARM テンプレートにハードコードできます。
"osProfile": {
"secrets": [
{
"sourceVault": {
"id": "/subscriptions/88889999-aaaa-bbbb-cccc-ddddeeeeffff/resourceGroups/cstocses/providers/Microsoft.KeyVault/vaults/cstocses"
},
"vaultCertificates": [
{
"certificateUrl": "https://cstocses.vault.azure.net/secrets/csescert/0123456789abcdef0123456789abcdef"
}
]
}
]
}
ARM テンプレートの JSON テキストでは、パラメーターのsourceVault
値は、id
Azure portalのKey Vault ページの URL の一部です。 値は certificateUrl
、前に見つけたキー コンテナー証明書の URL です。 これらの値のテキスト形式を次の表に示します。
パラメーター
フォーマット
ソース コンテナー ID
/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<key-vault-name>
Key Vault 証明書の URL
https://<key-vault-name>.vault.azure.net/secrets/<certificate-name>/<certificate-secret>
パッケージ SAS トークン、構成 SAS トークンなど、新しいパラメーターを含む更新された ARM テンプレートをデプロイします。 これらのパラメーターを宣言して指定する方法を確認するには、 ARM テンプレート ファイルの例 と ARM テンプレート パラメーター ファイルの例 を確認します。 次に、デプロイが完了するまで待ちます。
注:
パブリック IP アドレスが使用されていることを示すエラー メッセージが表示される場合は、サービス構成 (.cscfg) ファイルと ARM テンプレート パラメーター ファイルからパブリック IP アドレスを削除します。 ARM テンプレート ファイル自体からパブリック IP アドレス宣言を削除しないでください。
続行する前に、「Azure SDK を使用したCloud Servicesのデプロイ (延長サポート)」 を参照してください。
このセクションでは、Azure SDK と C# を使用して正しい構成を変更する方法について説明します。 SDK を使用してクラウド サービス プロジェクトをデプロイし、関連する構成を変更するには、アプリケーションをMicrosoft Entra IDに登録する必要があります。 登録を行うには、「ポータルを使用して、リソースにアクセスできるMicrosoft Entra アプリケーションとサービス プリンシパルを作成する 」の記事を参照してください。 次の表は、実行する具体的な手順と、その記事で読む対応するサブセクションの概要を示しています。
正しい構成変更を行うには、次の手順に従います。
「従来のクラウド サービスからクラウド サービス拡張サポートと ARM テンプレートを使用した手動移行 」というタイトルのブログ エントリに移動し、手順 7 から 10 に従います。 これらの手順では、次の手順を実行する方法について説明します。
プロジェクトをパッケージ化します。
生成されたサービス パッケージ (<project-name.cspkg> ) ファイルをクラウド サービスのストレージ アカウント コンテナーにアップロードします。
注:
手順に記載されているものの、クラウド サービス構成 (ServiceConfiguration.Cloud.cscfg ) ファイルをアップロードする必要はありません。 サービス パッケージ ファイルのみをここにアップロードする必要があります。
アップロードされたサービス パッケージ ファイルの共有アクセス署名 (SAS) URL を生成します。
Azure portalのキー コンテナー証明書ページから次の値を取得します。
Key Vault 証明書の URL
サブスクリプション ID
キー コンテナーがデプロイされるリソース グループの名前
キー コンテナーのサービス名
サンプル プロジェクト (圧縮アーカイブ ファイル) をダウンロードし、その内容を抽出します。
テキスト エディターで SDKSample\CreateCloudService\CreateCloudService\LoginHelper.cs ファイルを開きます。
InitializeServiceClient
メソッドで、、clientId
、および clientCredentials
文字列変数のtenantId
値をそれぞれテナント ID、アプリケーション ID、アプリケーション シークレットの値で上書きします。 これらの値は、アプリケーションを登録したときにコピーした値です。
テキスト エディターで SDKSample\CreateCloudService\CreateCloudService\Program.cs ファイルを開きます。 メソッドで Main
、 メソッドの先頭で宣言された変数の初期化された値の一部を上書きします。 次の表に、変数名と、それらに使用する必要がある値を示します。
変数名
新しい値
m_subId
クラウド サービスを含むサブスクリプションの ID
csrgName
クラウド サービスを含むリソース グループの名前
csName
クラウド サービス リソース名
kvrgName
キー コンテナー リソースを含むリソース グループの名前
kvName
キー コンテナーのリソース名
kvsubid
キー コンテナーを含むサブスクリプションの ID (クラウド サービスサブスクリプション ID とは異なる場合があります)
secretidentifier
キー コンテナー証明書の URL
filename
サービス構成ファイルへのローカル パス (ServiceConfiguration.Cloud.cscfg )
packageurl
サービス パッケージ ファイルの SAS URL (<project-name.cspkg> )
[Visual Studio ソリューション エクスプローラー ] ウィンドウで、プロジェクト ノードを右クリックし、[NuGet パッケージの管理 ] を選択します。 [ 参照 ] タブで、次のパッケージを検索、選択、インストールします。
Microsoft.Azure.Management.ResourceManager
Microsoft.Azure.Management.Compute
Microsoft.Azure.Management.Storage
Azure.Identity
Microsoft.Rest.ClientRuntime.Azure.Authentication
プロジェクトを実行し、[ 出力 ] ウィンドウにメッセージが表示されるのを待ちます。 ウィンドウに "コード 0 で終了" と表示された場合、更新とデプロイは正常に動作しているはずです。 "コード 1 で終了" と表示される場合は、エラー メッセージをチェックして問題を確認する必要がある場合があります。
続行する前に、「Visual Studio でCloud Services (延長サポート) に作成してデプロイする」 を参照してください。
Visual Studio では、2 つの構成変更を行う必要があります。 ローカル コンテキストがクラウド コンテキストに合うようにサービス構成を設定し、キー コンテナーの場所を指定します。
サービス構成の場合は、クラウド コンテキスト ( ServiceConfiguration.Cloud.cscfg ファイル) の内容をコピーし、ローカル コンテキスト ( ServiceConfiguration.Local.cscfg ファイル) に貼り付けます。 別の構成がありますか、それとも他の用途にローカル構成ファイルが必要ですか? いずれかの条件が true の場合は、既存の certificate
ローカル コンテキストの要素を保持します。
[Visual Studio ソリューション エクスプローラー ] ウィンドウで、プロジェクト ノードを右クリックし、[発行] を選択します 。 [設定] タブに到達するまで、Azure アプリケーションの発行 ウィザードを続行します。そのタブで、[キー コンテナー] フィールドを、キー コンテナー が保存されている場所に設定します。 最後に、[ 発行 ] ボタンを選択し、デプロイが完了するまで待ちます。
構成を変更すると、顧客は HTTPS プロトコルを使用してクラウド サービス Web サイトと通信できるようになります。 証明書が自己署名の場合、証明書がセキュリティで保護されていないという警告がブラウザーから報告される場合がありますが、ブラウザーは接続をブロックしません。
質問がある場合やヘルプが必要な場合は、サポート要求を作成 するか、Azure コミュニティ サポート にお問い合わせください。
Azure フィードバック コミュニティ に製品フィードバックを送信することもできます。