[英]Security of cloudant query from OpenWhisk
我正在使用 Bluemix 上的 Cloudant 數據存儲構建一個 Angular SPA。
由於 OpenWhisk 的 Bluemix 實現不使用 VCAP 服務,因此我看到了 3 個選項來使用 OpenWhisk 作為我的 api 提供程序來為我的 Angular 應用程序進行 cloudant 查詢:
由於我的服務不用於發布(它用於我自己的應用程序),因此我認為選項 2 是我的“萬無一失”的選擇。 我錯過了什么嗎? 我的想法是,雖然易受變化影響,但它是最安全的,因為憑證不會公開傳遞。 無服務器基礎設施將不得不被黑客入侵......
提前致謝!
(冗長)更新:(提前道歉)
我已經走得更遠了,但仍然沒有答案 - 現在卡在執行中。
澄清一下,我的目標是讓應用程序從 Angular Client -> OpenWhisk -> Cloudant 流動。
在這個最簡單的用例中,我想傳遞一個 startTime 參數和一個 endTime 參數,讓 OpenWhisk 獲取該時間范圍內所有字段的所有記錄,並傳回選定的字段。 在我的示例中,我擁有經過修改的 GeoJSON 格式的 USGS 地震數據。
根據以下文章中的信息,我得出結論,我可以調用 wsk 命令行操作並使用我從 Javascript 函數中設置的綁定,因此不會將我的憑據傳遞給數據庫。 這為我提供了一定程度的安全性(仍然質疑我的 OpenWhisk 操作的其余端點),但我認為一旦我運行了我的示例,我就會考慮其中的那一部分。
我的命令行(有效): wsk action invoke /my@orgname.com_mybluemixspace/mycfAppName/exec-query-find --blocking --result --param dbname perils --param query {\\"selector\\":{\\"_id\\":{\\"$gt\\":0},\\"properties.time\\":{\\"$gt\\":1484190609500,\\"$lt\\":1484190609700}}}
這成功返回以下內容:
{ "docs": [ { "_id": "eq1484190609589", "_rev": "1-b4fe3de75d9c5efc0eb05df38f056a65", "dbSaveTime": 1.484191201099e+12, "fipsalpha": "AK", "fipsnumer": "02", "geometry": { "coordinates": [ -149.3691, 62.5456, 0 ], "type": "Point" }, "id": "ak15062242", "properties": { "alert": null, "cdi": null, "code": "15062242", "detail": "http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak15062242.geojson", "dmin": null, "felt": null, "gap": null, "ids": ",ak15062242,", "mag": 1.4, "magType": "ml", "mmi": null, "net": "ak", "nst": null, "place": "45km ENE of Talkeetna, Alaska", "rms": 0.5, "sig": 30, "sources": ",ak,", "status": "automatic", "time": 1.484190609589e+12, "title": "M 1.4 - 45km ENE of Talkeetna, Alaska", "tsunami": 0, "type": "earthquake", "types": ",geoserve,origin,", "tz": -540, "updated": 1.484191127265e+12, "url": "http://earthquake.usgs.gov/earthquakes/eventpage/ak15062242" }, "type": "Feature" } ] }
我在 OpenWhisk(如下)中創建的操作返回內部服務器錯誤。 我將輸入值傳遞為{ "startTime": "1484161200000", "endTime": "1484190000000" }
這是我的操作代碼:
`var openWhisk = require('openwhisk');
var ow = openWhisk({
api_key:'im really a host'
});
function main(params) {
return new Promise(function(resolve, reject) {
ow.actions.invoke({
actionName:'/my@orgname.com_mybluemixspace/mycfAppName/exec-query-find',
blocking:true,
parameters:{
dbname: 'perils',
query: {
"selector": {
"_id": {
"$gt": 0
},
"properties.time": {
"$gt": params.startTime,
"$lt": params.endTime
}
}
}
}
}).then(function(res) {
//get the raw result
var raw = res.response.result.rows;
//lets make a new one
var result = [];
raw.forEach(function(c) {
result.push({id:c.docs._id, time:c.docs.properties.time, title:c.docs.properties.title});
});
resolve({result:result});
});
});
}`
以下是我的研究鏈接: http : //infrastructuredevops.com/08-17-2016/news-openwhisk-uniq.html
有用,因為使用了 exec-query-find 和選擇器語法用法,而且對於我需要構建以填充我的數據的更新函數也很酷!
https://www.raymondcamden.com/2016/12/23/going-serverless-with-openwhisk
@csantanapr 引用的文章
我是否忽略了什么?
謝謝!
我假設您想要做的是直接從瀏覽器的角度客戶端代碼訪問您的 Cloudant 數據庫。
如果您不需要任何業務邏輯,或者您可以通過使用 Cloudant 功能(設計文檔、視圖、映射、縮減等)來擺脫困境,並且您正在生成具有特定訪問權限(即寫入與讀取)的 Cloudant API 密鑰,那么您就不需要服務器或無服務器中間件/層。
但現在讓我們現實一點,大多數人都需要該層,如果您正在尋找 OpenWhisk,那么您很幸運,這很容易做到。
Bluemix 上的 OpenWhisk 支持 VCAP 服務憑證,但方式不同。 讓我們命名您有一個 Bluemix Org carlos@example.com
和 space dev
,它將轉換為 OpenWhisk 名稱空間carlos@example.com_dev
如果您在 Bluemix 中的 space dev
下添加 Cloudant 服務,這將為此 Cloudant 帳戶生成服務密鑰憑證。 此憑據為您提供超級權力訪問權限,這意味着您是管理員。
如果您想在 OpenWhisk 中使用此 Cloudant 憑證,您可以使用由 cloudant 包生成的自動綁定。 要使用 OpenWhisk CLI 執行此操作,運行wsk package refresh
這將拉取 Cloudant 憑據並為您創建一個新包,其中憑據綁定為該包下所有 cloudant 操作的默認參數。 這是上面#1的修改版本
另一種替代方法是將憑證手動綁定到包或操作作為默認參數,當您不想使用超級管理員憑證並且您為特定數據庫生成了 Cloudant API 密鑰時,這是有意義的。 這是上面的選項#1。
我不建議將憑據放在源代碼中 #2
對於選項 #3,不安全的是將您的憑據作為 URL 的一部分(如https://username:password@user.cloudant.com )傳遞,但通過 https 在Authorization
標頭中傳遞用戶名和密碼是安全的。 這是因為即使您使用安全傳輸 https,URI/URL 中的所有內容都未加密,任何人都可以看到該值,但在正文或標頭中傳遞機密是標准做法,因為這是在建立安全連接后進行傳輸。
然后,您創建使用憑據作為 OpenWhisk 操作中的參數的操作,以便為您的后端構建業務邏輯。
那么如何從瀏覽器訪問這個后端,OpenWhisk 有一個實驗性的 API 網關功能,允許您將您的操作公開為啟用 CORS 的公共 API。
只有一個 url 是公開的,您的憑據作為默認參數永遠不會公開。
如果您想查看有關查看 Raymond Camden 博客文章的示例,其中他展示了 Ionic/Angular 應用程序訪問他的 Cloudant 貓數據庫https://www.raymondcamden.com/2016/12/23/going-serverless-with-openwhisk
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.