2012-10-10 53 views
3

我有一個Windows/.NET彈性beanstalk實例,在負載平衡器上安裝了SSL證書設置。默認情況下,這會創建一個從https/443到http/80的端口轉發。我希望負載平衡器上的443/https轉發到beanstalk實例上的443 https。彈性beanstalk實例能否將彈性負載平衡器向前端口443連接到端口443?

我試圖做here:

我重新配置相應的EC2實例EC2是什麼文件 - >負載平衡器 - >監聽器,這樣HTTPS着HTTPS與我的SSL證書配置,是問題,當我嘗試並在此之後發出HTTPS請求即可超時。看起來ElasticBeanstalk實例不喜歡我修改EC2偵聽器。

任何想法?

回答

2

爲了讓SSL的負載平衡器和彈性魔豆之間的工作,我需要幾件事情:

  1. 配置EC2負載平衡器轉發端口443到端口443(SSL的)。我在上面的問題中已經有了這部分內容。

  2. 像使用SSL的任何其他站點一樣配置EC2實例上的IIS: a)。在IIS中的EC2實例上安裝SSL Cert。 b)。使用SSL證書添加https/443綁定。

問題是我期待#2免費。在Windows Azure上,當您在您的實例上配置證書時,這非常免費,但截至目前,AMZN ElasticBeanstalk for Windows並非如此。

我也希望#2可以腳本化,所以我可以擴大或縮小實例,而無需手動做#2。我正在尋找一些簡單的方法來綁定我的EB實例上的Power-Shell腳本,但他們顯然沒有這個功能。

我最終的解決方案是創建一個自定義虛擬機映像(AMI),SSL證書安裝了已經添加的https綁定。如果我這樣做,我可以使用已經設置好的SSL東西部署ElasticBeanstalk映像。這樣做可以讓我在沒有任何配置的情況下進行放大或縮小。

0

這對我來說是一個特殊的問題,在我的ASP.NET MVC項目中有各種OAuth提供者。基本上,任何應該使用https的內容在Elastic Beanstalk下都被破壞了。我試圖通過尋找X-Forwarded-Proto HTTP頭來編碼,但它非常討厭。所以我真的希望SSL直通我的EC2實例。

它可能花了我3小時才知道如何做到這一點,而不使用AMI,所以希望這可以幫助某人。

我以前嘗試過定製AMI方法和,雖然它的工作原理,它提出了兩個問題:

  1. 我需要修補和維護我自己的AMI這是費時。如果我使用標準圖像,則可以在更新的圖像可用時重建環境。
  2. 我無法源代碼控制我的配置設置 - 它們只是嵌入在雲中某個不透明的AMI中。

我改編了這個從this post

首先,您需要將一個目錄添加到您的Visual Studio Web項目的根目錄中,名爲:.ebextensions

它裏面,創建一個名爲environment.config的文本文件 - 我們要在這裏使用YAML,所以不要在Visual Studio中的情況下,它認爲它是一個應用程序配置文件,並添加標籤編輯 - YAML是空白敏感。該文件的語法記錄爲on Amazon

我的文件有一堆的調諧IIS其他設置,但相關有點類似於:

container_commands: 
    site_add_ssl_binding: 
    command: PowerShell -ExecutionPolicy Bypass -File "C:\\inetpub\\wwwroot\\.ebextensions\\ssl.ps1" 

這將執行名爲ssl.ps1定製的PowerShell腳本。因此,讓我們創建一個在.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文件導入證書存儲區,然後創建SSL在您的網站的端口443綁定。

隨着我引用的原始代碼,我遇到了各種各樣的問題,包括字符編碼不良的問題。因此,如果您複製/粘貼此示例並且它不起作用,則可以通過遠程登錄到EC2實例,打開命令提示符並直接執行命令來測試它:PowerShell -ExecutionPolicy Bypass -File "C:\inetpub\wwwroot\.ebextensions\ssl.ps1"

您需要添加.pfx文件也到.ebextensions目錄。在Visual Studio中,確保所有文件都包含在項目中,並且具有內容構建操作(提示在解決方案資源管理器中選擇該文件,然後按F4鍵)。該解決方案資源管理器應該是這樣的:

  • 網絡project.csproj
    • .ebextensions
      • environment.config
      • 我-certificate.pfx
      • ssl.ps1
  • ...

然後使用AWS Toolkit for Visual Studio,右鍵單擊您的項目並選擇Publish to AWS並按照提示進行操作。這會將您的部署包上傳到您的Elastic Beanstalk環境,並進行安裝。您的定製將在部署期間執行,或者每當調配一個新的EC2實例時執行。

成功執行後,.ebextensions目錄被刪除。

如果您不想在Visual Studio項目中包含.pfx文件,original example將使用PowerShell從S3實例下載.pfx文件。您還可以通過引用Elastic Beanstalk環境變量來避免將密碼嵌入到.ps1中。

得到這個工作結束到最後,你還需要:

  1. 配置您的負載平衡器轉發您的EC2實例443通信端口443 - 默認交換機端口80。
  2. 將安全組從負載均衡器中配置爲允許443個通信。
  3. 將安全組配置到EC2實例中以允許443個通信。
相關問題