2014-08-29 90 views
3

我在訪問SDK存儲中的AWS憑證時遇到了一些問題,但在IIS下運行時似乎只是一個問題。如果我通過使用ReSharper調用NUnit測試來實現相同的代碼,則依賴注入工作並且S3客戶端能夠進行身份驗證。適用於.NET的AWS開發工具包無法使用IIS訪問憑證

IAmazonS3 s3Client = new AmazonS3Client(); 

有沒有其他人遇到過這個問題?你如何能夠獲得依賴注入的工作?

[編輯]

憑證文件的方法已被推薦爲與IIS使用,因爲SDK爲每個用戶存儲不同的加密證書。如果我硬編碼appSettings中我不想做的路徑,我只能得到一個憑證文件。

除了下面的路徑,SDK將在哪裏查找憑證文件?

C:\Users\<IIS_app_name>\.aws\credentials 
C:\Users\<my_domain_user>\.aws\credentials 
+0

SDK還將在inetpub \ wwwroot中查找web.config文件。 – 2015-09-30 18:11:08

回答

6

這個問題在Pavel的回答下得到了回答,但我會發佈一個答案讓信息更易於使用。您可以在webLocal.config中指定憑據文件的位置(如果沒有,我無法使其工作)。部署應用程序時,憑證文件位置將是無效路徑,SDK將故障轉移到EC2實例使用IAM角色。

webLocal.config

<?xml version="1.0"?> 
<appSettings> 
    <!-- AWS --> 
    <add key="AWSProfilesLocation" value="C:\Users\<IIS_app_name>\.aws\credentials" /> 
    <add key="AWSRegion" value="us-west-2" /> 
    <add key="S3Bucket" value="bucket." /> 
</appSettings> 

當你實例化一個客戶端不帶參數的依賴注入將正常工作。

IAmazonS3 s3Client = new AmazonS3Client(); 
+0

似乎不適用於我 - 或者我使用了錯誤的'IIS_app_name'。我如何獲得''?謝謝。 – zed 2017-10-16 14:56:44

6

的SDK商店保存C:\Users\<username>\AppData\Local\AWSToolkit文件夾下的憑證,所以除非IIS正在相同的帳戶作爲NUnit的測試下運行,IIS將無法訪問相同的憑據。

This blog討論了存儲和使用憑證的各種選項。就你而言,看起來更好的選擇是使用憑證文件。

+0

我曾嘗試在IIS用戶的文件夾下添加一個憑證文件,並且在那裏沒有運氣(C:\ Users \ \。aws \ credentials)。出於好奇,我也試着爲IIS用戶複製AWSToolkit文件夾(C:\ Users \ \ AppData \ Local \ AWSToolkit),我仍然收到相同的錯誤。在這一點上,我很難過。我希望我能看到哪些搜索路徑在錯誤消息中失敗。 – tponthieux 2014-08-29 22:36:11

+0

SDK Store具有與憑證文件不同的文件格式:它是JSON並加密。 因此,您的第一次嘗試將無法正常工作,因爲SDK Store(在IIS下)正在查找JSON文件,而不是aws \ credentials。 您的第二次嘗試將不起作用,因爲每個用戶對憑據進行不同的加密,所以IIS用戶無法解密您的憑證文件。 您需要創建aws \ credentials文件,然後在代碼或配置中指向它,如鏈接的博客文章中所示。 – 2014-08-29 23:17:43

+0

Pavel,如果證書對每個用戶的加密方式不同,那麼SDK存儲選項將不起作用,這很有意義,所以我很高興知道這一點。如果我在webLocal.config中硬編碼路徑,我只能夠獲得憑證文件的工作。在AWSProfilesLocation應用程序設置中使用'%HOMEDRIVE %% HOMEPATH%\。aws \ credentials'不適用於我。我在我的用戶文件夾和IIS應用程序用戶文件夾中有憑據文件。除了'C:\ Users \ \之外,還可以在哪裏搜索憑據文件。aws \ credentials'如果我不指定路徑? – tponthieux 2014-09-02 23:03:42

相關問題