これは、さまざまなOAuthプロバイダーを使用したASP.NETMVCプロジェクトでの私にとって特に問題でした。基本的に、httpsを使用する必要があるものはすべてElasticBeanstalkで壊れていました。X-Forwarded-Proto HTTPヘッダーを探してコーディングしようとしましたが、かなり厄介でした。そのため、SSLをEC2インスタンスに直接接続したかったのです。
AMIを使用せずにこれを行う方法を理解するのにおそらく3時間かかったので、これが誰かに役立つことを願っています。
以前にカスタムAMIアプローチを試しましたが、機能しますが、2つの問題があります。
- 自分のAMIにパッチを適用して維持する必要があり、これには時間がかかります。標準のイメージを使用すると、新しいイメージが利用可能になったときに環境を再構築できます。
- 構成設定をソース管理できません。クラウドのどこかにある不透明なAMIに埋め込まれているだけです。
私はこの投稿からこれを適応させました。
まず、VisualStudioWebプロジェクトのルートに次のディレクトリを追加する必要があります.ebextensions
。
その中に、というテキストファイルを作成しますenvironment.config
-ここではYAMLを使用するので、アプリケーション構成ファイルであると見なしてタブを追加する場合に備えて、VisualStudioで編集しないでください-YAMLは空白に依存します。ファイルの構文はAmazonに記載されています。
私のファイルにはIISを調整するための他の設定がたくさんありますが、関連するビットは次のようになります。
container_commands:
site_add_ssl_binding:
command: PowerShell -ExecutionPolicy Bypass -File "C:\\inetpub\\wwwroot\\.ebextensions\\ssl.ps1"
これにより、と呼ばれるカスタムPowerShellスクリプトが実行されssl.ps1
ます。.ebextensions
それでは、ディレクトリ内にそれを作成しましょう。
# If there is no existing SSL binding
if ( -not(Get-WebBinding "Default Web Site" -Port 443) ) {
# Import the .pfx file into the certificate store
$securepwd = ConvertTo-SecureString -String "YOUR_PFX_PASSWORD_HERE" -Force -AsPlainText
$cert = Import-PfxCertificate -FilePath C:\inetpub\wwwroot\.ebextensions\my-certificate.pfx cert:\localMachine\my -Password $securepwd
# Create site binding in IIS
New-WebBinding -Name "Default Web Site" -IP "*" -Port 443 -Protocol https
New-Item IIS:SslBindings\0.0.0.0!443 -value $cert
}
このコマンドを実行すると、.pfxファイルが証明書ストアにインポートされ、Webサイトのポート443にSSLバインディングが作成されます。
私が参照した元のコードでは、危険な文字エンコードに関してあらゆる種類の問題がありました。したがって、このサンプルをコピーして貼り付けても機能しない場合は、EC2インスタンスにリモート接続し、コマンドプロンプトを開いて、コマンドを直接実行することでテストできます。PowerShell -ExecutionPolicy Bypass -File "C:\inetpub\wwwroot\.ebextensions\ssl.ps1"
.pfxファイルもディレクトリに追加する必要があります.ebextensions
。Visual Studioで、すべてのファイルがプロジェクトに含まれていること、およびコンテンツのビルドアクションがあることを確認します(ソリューションエクスプローラーでファイルを選択し、F4キーを押します)。ソリューションエクスプローラーは次のようになります。
- web-project.csproj
- .ebextensions
- environment.config
- my-certificate.pfx
- ssl.ps1
- ..。
次に、AWS Toolkit for Visual Studioを使用して、プロジェクトを右クリックしPublish to AWS
、プロンプトを選択して実行します。これにより、デプロイメントパッケージがElastic Beanstalk環境にアップロードされ、インストールされます。カスタマイズは、デプロイ中、または新しいEC2インスタンスがプロビジョニングされるたびに実行されます。
正常に実行されると、.ebextensions
ディレクトリは削除されます。
Visual Studioプロジェクト内に.pfxファイルを含めたくない場合、 元の例ではPowerShellを使用してS3インスタンスから.pfxファイルをダウンロードします。Elastic Beanstalk環境変数を参照することで、.ps1にパスワードが埋め込まれないようにすることもできます。
これをエンドツーエンドで機能させるには、次のことも行う必要があります。
- EC2インスタンスのポート443に443トラフィックを転送するようにロードバランサーを設定します。デフォルトではポート80に切り替わります。
- 443トラフィックを許可するように、ロードバランサーからセキュリティグループを構成します。
- 443トラフィックを許可するようにセキュリティグループをEC2インスタンスに設定します。