Azure Cloud Services で HTTPS 通信を有効にする (延長サポート)
[アーティクル] 11/20/2024
2 人の共同作成者
フィードバック
この記事の内容
Microsoft Azure Cloud Services (延長サポート) との通信は、ハイパーテキスト転送プロトコル セキュア (HTTPS) プロトコルを使用して行われます。 この記事では、Cloud Services (延長サポート) の HTTPS 通信を有効にする方法について説明します。
前提条件
プロジェクト配置の一般的な手順
Cloud Services (延長サポート) プロジェクトを Azure にデプロイする一般的な手順は次のとおりです。
証明書を準備します。
プロジェクトを構成する。
プロジェクト ファイルをクラウド サービスのサービス定義 (.csdef)、サービス構成 (.cscfg)、サービス パッケージ (.cspkg) ファイルにパッケージ化します。
必要に応じて、Cloud Services (延長サポート) リソースの構成を変更します。 たとえば、次のいずれかの変更を行うことができます。
パッケージの URL を更新します。
URL 設定を構成します。
オペレーティング システムシークレットの設定を更新します。
新しいプロジェクトを Azure にデプロイして更新します。
Note
プロジェクトは、次のツールを使用するなど、いくつかの異なる方法で配置できます。
デプロイ方法に関係なく、一般的な展開手順は同じです。
これらの手順の最初の 2 つはすべてのデプロイ方法に必要です。 これらの手順については、「 Code の変更 」セクションで説明します。 残りの手順も重要ですが、常に手動によるユーザー介入が必要なわけではありません。 たとえば、手順は Visual Studio などのツールによって自動的に実行される場合があります。 これらの手順の最後の 3 つについては、「 Configuration changes 」セクションで説明します。
コードの変更
コードを変更して証明書を準備し、プロジェクトを構成するには、次の手順を実行します。
手順 6 で証明書をキー コンテナーに アップロードする手順に従います。
証明書の拇印 (40 桁の 16 進数文字列) を書き留めます。
プロジェクトの service 構成 (.cscfg) ファイル で、証明書を使用するロールに証明書の拇印を追加します。 たとえば、証明書を SSL 証明書として使用して WebRole と通信する場合は、ルート ServiceConfiguration
要素の最初の子として、WebRole1
の次のスニペットのような XML コードを追加できます。
<Role name="WebRole1">
<Instances count="1" />
<Certificates>
<Certificate
name="Certificate1"
thumbprint="0123456789ABCDEF0123456789ABCDEF01234567"
thumbprintAlgorithm="sha1"
/>
</Certificates>
</Role>
証明書の名前はカスタマイズできますが、サービス定義 (.csdef) ファイルで使用される証明書名と一致している必要があります。
service definition (.csdef) ファイルで 次の要素を追加します。
親 XPath
追加する要素
使用する属性
/ServiceDefinition/WebRole/Sites/Site/Bindings
Binding
name 、 endpointName
/ServiceDefinition/WebRole/Endpoints
InputEndpoint
name 、 protocol 、 port 、 certificate
/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
の入力エンドポイントがバインドされます。 Certificate1
証明書は、My
の名前を持つストアに使用され、アクセス許可レベルが制限された場所または昇格されたアクセス許可レベルに対してLocalMachine
の場所が使用されます。 InputEndpoint
要素とCertificate
要素内の証明書名は相互に一致します。 また、前の手順のサービス構成 (.cscfg) ファイルで使用された証明書名と一致します。
構成の変更
クラウド サービスの構成を変更する手順は、クラウド サービスのデプロイ方法によって異なります。 これらの手順は、次のタブに表示されます。 各タブは、異なるデプロイ方法を表します。
先に進む前に、「 Azure portal を使用して Azure Cloud Services (延長サポート) をデプロイする を参照してください。 次に、次の手順に従って、Azure portal を使用して正しい構成を変更します。
「 ARM テンプレートを使用した従来のクラウド サービスからクラウド サービス拡張サポートへの移行」というタイトルのブログ エントリに移動し 手順 7 から 9 に従います。 これらの手順では、次の手順を実行する方法について説明します。
Azure ポータルで クラウド サービスの Overview ページに戻り、Update を選択します。
Update クラウド サービス ページで、Basics タブで次の変更を行います。
Package/構成/サービス定義の場所 フィールドで、[BLOB から を選択します。
パッケージのアップロード (.cspkg、.zip) フィールドで、次の手順に従います。
Browse リンクを選択します。
ファイルをアップロードしたストレージ アカウントとコンテナーを選択します。
コンテナー ページで、対応するファイル (この場合は <project-name>.cspkg ) を選択し、 Select ボタンを選択します。
構成 (.cscfg) フィールド (および ServiceConfiguration.Cloud.cscfg ファイル) について、前の手順で説明したサブ手順を繰り返します。
サービス定義 (.csdef) フィールド (および ServiceDefinition.csdef ファイル) をアップロードする場合は、サブ手順をもう一度繰り返します。
[構成] タブを選択します。
Key コンテナー フィールドで、証明書をアップロードしたキー コンテナーを選択します (Code の変更 セクションで前述)。 選択したキー コンテナーで証明書が見つかると、一覧表示された証明書に Status Found が表示されます。
新しく構成されたプロジェクトをデプロイするには、 Update ボタンを選択します。
先に進む前に、「 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 テンプレートを使用した従来のクラウド サービスからクラウド サービス拡張サポートへの移行」というタイトルのブログ エントリに移動し 手順 7 から 10 に従います。 これらの手順では、次の手順を実行する方法について説明します。
プロジェクトをパッケージ化してください。
生成されたサービス パッケージ (<project-name>.cspkg ) とクラウド サービス構成 (ServiceConfiguration.Cloud.cscfg ) ファイルをクラウド サービスのストレージ アカウント コンテナーにアップロードします。
アップロードされた各ファイルの Shared Access Signature (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 テンプレート パラメーター ファイル を確認します。 次に、デプロイが完了するまで待ちます。
Note
パブリック IP アドレスが使用されていることを示すエラー メッセージが表示される場合は、サービス構成 (.cscfg) ファイルと ARM テンプレート パラメーター ファイルからパブリック IP アドレスを削除します。 ARM テンプレート ファイル自体からパブリック IP アドレス宣言を削除しないでください。
先に進む前に、 Azure SDK を使用した Cloud Services (延長サポート) のデプロイ に関するページを参照してください。
Note
このセクションには、公式の SDK サンプル コードから書き換えられたコードが含まれています。このコードは、Azure Cloud Services (延長サポート) の GitHub サンプル コード ページ 参照できます。
このセクションでは、Azure SDK と C# を使用して正しい構成を変更する方法について説明します。 SDK を使用してクラウド サービス プロジェクトをデプロイし、関連する構成を変更するには、Microsoft Entra ID でアプリケーションを登録する必要があります。 登録を行うには、「 ポータルを使用して、リソースにアクセスできる Microsoft Entra アプリケーションとサービス プリンシパルを作成します 記事を参照してください。 次の表は、実行する具体的な手順と、その記事で読む対応するサブセクションの概要を示しています。
正しい構成変更を行うには、次の手順に従います。
「 ARM テンプレートを使用した従来のクラウド サービスからクラウド サービス拡張サポートへの移行」というタイトルのブログ エントリに移動し 手順 7 から 10 に従います。 これらの手順では、次の手順を実行する方法について説明します。
プロジェクトをパッケージ化してください。
生成されたサービス パッケージ (<project-name>.cspkg ) ファイルをクラウド サービスのストレージ アカウント コンテナーにアップロードします。
Note
手順に記載されている内容にもかかわらず、クラウド サービス構成 (ServiceConfiguration.Cloud.cscfg ) ファイルをアップロードする必要はありません。 ここでアップロードする必要があるのはサービス パッケージ ファイルだけです。
アップロードされたサービス パッケージ ファイルの Shared Access Signature (SAS) URL を生成します。
Azure portal のキー コンテナー証明書ページから次の値を取得します。
Key Vault 証明書の URL
サブスクリプション ID
キー コンテナーがデプロイされているリソース グループの名前
キー コンテナーのサービス名
サンプル プロジェクト (圧縮アーカイブ ファイル) をダウンロードし、その内容を抽出します。
テキスト エディターで SDKSample\CreateCloudService\CreateCloudService\LoginHelper.cs ファイルを開きます。 InitializeServiceClient
メソッドで、tenantId
、clientId
、およびclientCredentials
文字列変数の値をそれぞれテナント 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 ソリューション エクスプローラー ペインで、プロジェクト ノードを右クリックし、Manage NuGet パッケージ を選択します。 [ Browse タブで、次のパッケージを検索、選択、インストールします。
Microsoft.Azure.Management.ResourceManager
Microsoft.Azure.Management.Compute
Microsoft.Azure.Management.Storage
Azure.Identity
Microsoft.Rest.ClientRuntime.Azure.Authentication
プロジェクトを実行し、メッセージが Output ペインに表示されるまで待ちます。 ウィンドウに "exit with code 0" (コード 0 で終了) と表示される場合、更新プログラムとデプロイは正常に動作します。 "コード 1 で終了" と表示される場合は、エラー メッセージを確認して問題を確認する必要がある場合があります。
先に進む前に、「 Visual Studio で Cloud Services (延長サポート) に作成してデプロイする を参照してください。
Visual Studio では、2 つの構成変更を行う必要があります。 ローカル コンテキストがクラウド コンテキストと一致するようにサービス構成を設定し、キー コンテナーの場所を指定します。
サービス構成の場合は、クラウド コンテキストの内容 ( ServiceConfiguration.Cloud.cscfg ファイル) をコピーし、ローカル コンテキスト ( ServiceConfiguration.Local.cscfg ファイル) に貼り付けます。 別の構成があるか、または他の用途にローカル構成ファイルが必要ですか? いずれかの条件が true の場合は、既存のローカル コンテキストから certificate
要素を保持します。
Visual Studio ソリューション エクスプローラー ペインで、プロジェクト ノードを右クリックし、Publish を選択します。 Settings タブに移動するまで、Publish Azure アプリlication ウィザードに進みます。そのタブで、Key コンテナー フィールドをキー コンテナーが保存されている場所に設定します。 最後に、 Publish ボタンを選択し、デプロイが完了するまで待ちます。
構成を変更すると、顧客は HTTPS プロトコルを使用してクラウド サービス Web サイトと通信できるようになります。 証明書が自己署名されている場合、ブラウザーは証明書がセキュリティで保護されていないという警告を報告する可能性がありますが、ブラウザーは接続をブロックしません。
質問がある場合やヘルプが必要な場合は、サポート要求を作成 するか、Azure コミュニティ サポート にお問い合わせください。 Azure フィードバック コミュニティ に製品フィードバックを送信することもできます。