2017-01-06 2 views
2

Cloudemix에 Cloudant 데이터 저장소가있는 Angular SPA를 구축하고 있습니다. 본OpenWhisk의 클라우드 쿼리 보안

  1. 이 통과 자격 증명의 패턴을 따라 OpenWhisk의 Bluemix 구현 VCAP 서비스를 사용하지 않기 때문에

    , 내 각도 응용 프로그램에 대한 cloudant 쿼리에 대한 내 API를 공급자로 OpenWhisk를 사용하는 3 개 가지 옵션 참조 https://github.com/IBM-Bluemix/nodejs-cloudant/blob/master/app.js

  2. 사용 여기에 본으로는 HTTP API : 여기에 : 나는 로컬로 실행 해요 것처럼 여기와 같이 https://github.com/IBM-Bluemix/openwhisk-visionapp (매우 흥미로운 접근 방식 BTW)
  3. 는 자격 증명을 포함합니다. 자격 증명을 전달하는 보안 문제를 강조 https://docs.cloudant.com/api.html (

내 서비스가 게시 목적이 아니기 때문에 (내 응용 프로그램 용) 내 생각에는 옵션 2가 "가장 나쁜 것"이라고 생각합니다. 내가 놓친 게 있니? 나의 생각은 변화하기 쉽지 만 신임장이 공개되지 않기 때문에 가장 안전하다고 생각합니다. 서버가없는 인프라는 해킹되어야합니다 ...

미리 감사드립니다!

(긴) 업데이트 : (미리 사과)

내가 더 함께하지만 여전히 아무 대답 좀 쪘 구만 - 실행에 붙어 지금.

분명히하기 위해, 내 목표는 응용 프로그램을 앵귤러 클라이언트 -> OpenWhisk -> 클라우드에서 흐르게하는 것입니다.

이 간단한 사용 예에서는 startTime 매개 변수와 endTime 매개 변수를 전달하고 OpenWhisk에서 모든 필드로 해당 시간 범위의 모든 레코드를 가져오고 선택한 필드를 다시 전달하도록하고 싶습니다. 예를 들어, USGS 지진 데이터가 수정 된 GeoJSON 형식으로되어 있습니다.

다음 기사의 정보에 따라 wsk 명령 줄 작업을 호출하고 Javascript 함수 내에서 설정 한 바인딩을 사용하여 데이터베이스에 내 자격 증명을 전달할 수 없다는 결론을 얻었습니다. 이것은 보안에 대한 척도를 제공합니다 (여전히 OpenWhisk 액션의 나머지 끝점에 질문을 던집니다).하지만 필자가 샘플을 실행하면 그 부분을 생각해냅니다. (작동)

내 명령 행 :
{ "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 (아래)에서 생성 된 작업은 내부 서버 오류를 반환 wsk action invoke /[email protected]_mybluemixspace/mycfAppName/exec-query-find --blocking --result --param dbname perils --param query {\"selector\":{\"_id\":{\"$gt\":0},\"properties.time\":{\"$gt\":1484190609500,\"$lt\":1484190609700}}}

이 성공적으로 다음과 같은 반환합니다. 때문에 exec-의 사용 http://infrastructuredevops.com/08-17-2016/news-openwhisk-uniq.html
유용한 : 여기

`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:'/[email protected]_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}); 
     }); 
    }); 
}` 

내 연구에 대한 링크입니다 : 나는 여기에 내 행동에 대한 코드의
{ "startTime": "1484161200000", "endTime": "1484190000000" }

로 입력 값을 전달 해요 쿼리 찾기 및 선택기 구문 사용뿐만 아니라 내 데이터를 채우기 위해 구축해야하는 업데이트 기능에 대해 멋지다!

https://www.raymondcamden.com/2016/12/23/going-serverless-with-openwhisk
@csantanapr

에 의해 참조 기사 건가요 내가 뭔가를 내려다?

감사합니다.

답변

2

브라우저에서 각 클라이언트 측 코드에서 직접 Cloudant DB에 액세스하려고한다고 가정합니다.

비즈니스 로직이 필요하지 않거나 Cloudant 기능 (디자인 문서,보기,지도, 축소 등)을 사용하지 않고 특정 액세스 권한이있는 Cloudant API 키를 생성하는 경우 (예 : 쓰기 읽기 대), 서버 또는 무단 미들웨어/계층이 필요하지 않습니다.

하지만 이제는 현실감을 얻으십시오. 대부분의 사람들은 그 계층을 필요로합니다. OpenWhisk를 찾고 있다면 행운을 빕니다. 이것은 매우 쉽게 할 수 있습니다.

OpenWhisk on Bluemix는 VCAP 서비스 자격 증명을 지원하지만 다른 방식입니다. 하자 이름 당신은 당신이 Bluemix의 공간 dev 아래 Cloudant 서비스를 추가하는 경우 OpenWhisk 네임 스페이스 [email protected]_dev

로 변환 할 Bluemix 조직 [email protected] 공간 dev, 이것은이 Cloudant 계정에 대한 서비스 키 인증서를 생성 할 수 있습니다. 이 신임장은 귀하가 관리자임을 나타내는 슈퍼 파워 액세스를 제공합니다.

OpenWhisk에서이 Cloudant 자격 증명을 사용하려면 cloudant 패키지로 생성 된 자동 바인딩을 사용할 수 있습니다. OpenWhisk CLI를 사용하여이 작업을 수행하려면 wsk package refresh을 실행하면 Cloudant 자격 증명을 가져오고 해당 패키지 아래의 모든 클라우드 작업에 대한 기본 매개 변수로 바인딩 된 자격 증명을 사용하여 새 패키지를 생성합니다. 이것은 위 # 1의 수정 된 버전

또 다른 대안은 기본 매개 변수로 패키지 또는 작업에 수동으로 자격 증명을 수동으로 바인딩하는 것입니다. 이는 슈퍼 파워 관리자 자격 증명을 사용하지 않으려는 경우에 유용합니다. 특정 데이터베이스에 대한 Cloudant API 키. 위의 옵션 # 1입니다.

내가 옵션 # 3의 소스 코드를 # 2

의 자격 증명을 넣어 권하고 싶지 않다, 어떤 안전하지 않은 것은 https://username:[email protected] 같은 URL의 일부로 자격 증명을 전달하는 것입니다,하지만 Authorization에 사용자 이름과 암호를 전달 https를 통한 헤더가 보호됩니다. 보안 전송 https를 사용하는 경우에도 URI/URL의 모든 항목이 암호화되지 않으므로 누구나 해당 값을 볼 수 있지만 보안 연결이 설정된 후 전송이므로 본문 또는 헤더에 암호를 전달하는 것이 일반적인 방법입니다.

그런 다음 OpenWhisk 작업의 매개 변수로 자격 증명을 사용하여 백엔드 비즈니스 논리를 작성하는 작업을 만듭니다.

그런 다음 브라우저에서이 백엔드에 액세스하는 방법을 잘 알고 있습니다. OpenWhisk는 experimental에서 CORS를 사용하는 공개 API로 작업을 공개 할 수있는 API 게이트웨이 기능을 제공합니다.

URL 만 노출되며 기본 매개 변수 인 자격 증명은 노출되지 않습니다.

당신은 그가 이온/각도 앱이 고양이의 자신의 Cloudant 데이터베이스에 접근 보여 체크 아웃 레이몬드 캠든 블로그 게시물에 대한 예제를 보려면 https://www.raymondcamden.com/2016/12/23/going-serverless-with-openwhisk

관련 문제