セキュリティ保護されたストアの使用

セキュリティで保護されたストアサービス API を使用する

セキュリティで保護されたストアサービスでは、バックエンド サービスのセキュリティ認証情報などの機密データを不正利用から保護できる暗号化形式で格納できます。このセキュリティで保護されたストレージは「資格情報コンテナ」と呼ばれ、Apigee Edge では、組織レベルまたは環境レベルでスコープを設定できます。

たとえば、データベース サーバーなどの保護されているリソースに到達するために、Node.js アプリケーションで必要なパスワードの格納にセキュリティで保護されたストアを使用できます。デプロイ前に API を使用してセキュリティで保護されたストアにパスワードを保存すると、アプリケーションの実行時にその値を参照できます。

こうすることで、ソースコード管理システムにパスワードを含めたり、Apigee Edge に Node.js のソースコードと一緒にパスワードをデプロイしたりする必要がなくなります。このような処理を行うのではなく、Apigee によってパスワードの値が暗号化形式で格納され、アプリケーションで必要な場合にのみ値が取得されます。

セキュアストア API のドキュメントについては、Vault をご覧ください。以降のセクションでは、セキュアストア API の使い方について簡単に説明します。

組織別のデータの格納

各 Apigee Edge 組織には、一連のセキュリティで保護されたストアがあり、各環境には追加ストアが 1 つあります。このようにして、バックエンドごとにセキュリティ要件が異なる組織で、さまざまなセキュリティで保護された値を格納できます。このセクションでは、組織別の格納について説明します。

使用方法

  • 次のコマンドでは、すべてのセキュリティで保護されたストアの名前を取得します。
GET /o/{organization}/vaults
  • 次のコマンドでは、指定された資格情報コンテナからエントリ(ただし、エントリの暗号化された値ではない)のリストを取得します。
GET /o/{organization}/vaults/{name}
  • 単一のエントリ(ただし、エントリの暗号化された値ではない)を取得します。

GET /o/{organization}/vaults/{name}/entries/{entryname}
  • 値のない name という名前の新しい資格情報コンテナを作成します。

POST /o/{organization}/vaults

{ "name": "{name}" }

curl https://api.enterprise.apigee.com/v1/o/testorg/vaults
  -H "Content-Type: application/json"
  -d '{"name": "test2" }' -X POST
  • セキュリティで保護された値と一緒に、指定された名前で新しいエントリを資格情報コンテナに配置します。

POST /o/{organization}/vaults/{vaultname}/entries

{ "name": "{entryname}", "value": "{securevalue}" }

curl https://api.enterprise.apigee.com/v1/o/testorg/vaults/test2/entries
  -H "Content-Type: application/json"
  -d '{"name": "value1", "value": "verysecret" }' -X POST
  • 指定されたエントリの値を新しい値に置き換えます。

PUT /o/{organization}/vaults/{vaultname}/entries/{entryname}

curl https://api.enterprise.apigee.com/v1/o/testorg/vaults/test2/entries/value1

  -d 'verymoresecret' -X PUT
  • 指定された値がストア内の値と一致する場合は true が返され、一致しない場合は false が返されます。いずれの場合も、200 の HTTP ステータス コードが使用されます。これは、ストアの内容を検証するために使用できます。格納後に、暗号化されていない値を取得する API はありません。

    POST /o/{organization}/vaults/{vaultname}/entries/{entryname}?action=verify
    
    curl https://api.enterprise.apigee.com/v1/o/testorg/vaults/test2/entries/value1?action=verify
      -d 'verymoresecret'  -X POST
    
  • 次のコマンドでは、指定された資格情報コンテナのエントリを削除します。
DELETE /o/{organization}/vaults/{vaultname}/entries/{entryname}
  • 資格情報コンテナ全体を削除します。

    DELETE /o/{organization}/vaults/{name}
    

環境別のデータの格納

Apigee Edge 環境別にデータを保存することもできます。この場合、データのスコープは環境(prod など)に設定されます。この機能を使用すると、Node.js スクリプトが実行されている場所に応じて、実行時に異なる値を格納できます。

使用方法

GET /o/{organization}/e/{env}/vaults

GET /o/{organization}/e/{env}/vaults/{name}

GET /o/{organization}/e/{env}/vaults/{name}/entries/{entryname}

POST /o/{organization}/e/{env}/vaults

POST /o/{organization}/e/{env}/vaults/{vaultname}/entries

PUT /o/{organization}/e/{env}/vaults/{vaultname}/entries/{entryname}

POST /o/{organization}/e/{env}/vaults/{vaultname}/entries/{entryname}?action=verify

DELETE /o/{organization}/e/{env}/vaults/{vaultname}/entries/{entryname}

DELETE /o/{organization}/e/{env}/vaults/{name}

Node.js でのセキュリティで保護されたストアからの値の取得

apigee-access のインストール

Node.js コードで apigee-access を使用するには、まずそれをインストールする必要があります。例:

  1. cd で、プロジェクトのルート ディレクトリに移動します。
  2. npm install apigee-access --save を実行します。

関数

apigee-access getVault() 関数は、組織ごとまたは Node.js コードが実行されている現在の環境に基づいて、特定の資格情報コンテナを取得するために使用されます。

getVault() は、次の 2 つのパラメータを使用します。

  • 取得するセキュリティで保護されたストアの名前。
  • スコープ(organization または environment)。指定しない場合は、organization とみなされます。

getVault() によって返されるオブジェクトには、次の 2 つの関数があります。

  • getKeys(callback): 指定された資格情報コンテナ内のすべてのキーの名前を含む配列を返します。コールバック関数は 2 つの引数で呼び出されます。最初の引数は、オペレーションが失敗した場合に error、オペレーションが失敗していない場合に undefined になります。2 つ目の引数は実際の配列です。
  • get(key, callback): 特定のキーに関連付けられたセキュリティ保護された値を返します。コールバック関数は 2 つの引数で呼び出されます。最初の引数は、オペレーションが失敗した場合に error、オペレーションが失敗していない場合に undefined になります。2 つ目の引数は実際の値です。

次の例は、資格情報コンテナから値を取得する方法を示す Node.js のサンプルです。前述のように、このコードを機能させるために、apigee-access モジュールがインストールされます。

var apigee = require('apigee-access');
   var orgVault = apigee.getVault('vault1', 'organization');
   orgVault.get('key1', function(err, secretValue) {
   // use the secret value here
});