2016-09-01 68 views
0

我最近安裝了隨PowerShell附帶的AWS .NET SDK for AWS CLI增強功能。AWS的PowerShell從哪裏獲得憑據?

我繼續,並增加了IAM用戶生成密鑰對,然後安裝入SDK商店:

設置-AWSCredentails -AccessKey AAAAAAAAAAAAAA -SecretKey AAAAAAAAAA/AAAA -StoreAs默認

GET-EC2Instance

然後我通過使我知道我沒有訪問請求,測試我的憑據

...然後驚訝地發現打印出三個EC2實例。我不擁有的實例!我想這也:

GET-EC2Instance - 配置文件默認

其中產生期望的結果,無法獲得充分。爲了繼續測試,我添加了EC2FullAccess給我的用戶並重復了最後一行。它正確打印我的個人使用EC2實例:

GroupNames : {} 
Groups  : {} 
Instances  : {aws_personal} 
OwnerId  : 835586800000 
RequesterId : 
ReservationId : r-0e625fd77d0000000 

然而,每當我試圖聲明沒有-Profile default,我訪問另一個帳戶。沒有太多細節,我禁用了我在AWS Dashboard中訪問該帳戶的權限。現在命令產生這樣的輸出:

GET-EC2Instance:AWS無法驗證所提供的訪問憑據 在行:1個字符:1 + GET-EC2Instance

我沒有.AWS目錄在我的%UserProfile%。搜索我的電腦.awscredentials未能找到證明文件來解釋這一點。

+1

當您運行Get-AWSCredentials -ListStoredCredentials時會發生什麼?看到你不期望看到的東西? – crownedjitter

+0

@crownedjitter - 它顯示「默認」,這就是全部。 – Kivin

回答

1

我無法解釋爲什麼您在指定-ProfileName參數與不指定行爲之間存在不同的行爲,但我可以闡明證書的來源。

PowerShell工具可以從兩個憑據位置(以及在EC2實例上運行時的環境變量和EC2實例元數據)讀取。

首先存在位於C:\ Users \ userid \ AppData \ Local \ AWSToolkit \ RegisteredAccounts.json的加密的SDK憑證存儲文件 - 此文件在PowerShell工具,AWS SDK for .NET和適用於Visual Studio的AWS工具包。它還可以讀取ini格式的共享憑據文件(與AWS CLI和其他AWS軟件開發工具包共享)。請注意,儘管共享憑證文件可以在帳戶和計算機之間移動,但加密的SDK文件只能由擁有的用戶使用,並且只能在單臺計算機上使用。

雖然PowerShell工具目前只寫入一個存儲區 - .NET工具專用的加密文件。因此,當您設置憑據並使用-StoreAs選項時,配置文件將被寫入RegisteredAccounts.json文件。如果您在文本編輯器中打開該文件,則應該看到名爲「default」的配置文件以及兩個加密的blob,它們是您的訪問密鑰和密鑰。

當使用命令給出配置文件名稱時,工具首先在RegisteredAccounts.json中查找具有該名稱的配置文件,如果未找到,它將嘗試讀取%USERPROFILE%.aws \憑據(要繞過加密的存儲,您可以使用-ProfilesLocation參數指向要加載憑據的ini格式文件,如果該文件不在用戶配置文件的默認位置)。

如果未給出任何配置文件名稱,工具會探測以查找最接近的一組憑據 - 搜索「路徑」在博客文章https://blogs.aws.amazon.com/net/post/Tx2HQ4JRYLO7OC4/中進行了描述。如果您看到加載配置文件的引用,請記住這些工具首先在RegisteredAccounts.json中然後在共享憑據文件中檢查該配置文件。

HTH你追蹤工具找到憑據的地方。