AWS SSMによる秘密管理

2194 ワード

Serverlessなアーキテクチャで働いている間、私が遭遇している最も燃えている質問の1つは「Serverlessなアプリケーションの秘密を管理する正しい方法です」?質問は、アプリケーションにハードコーディングのような多くの答えを持っているかもしれません.env変数または専用の秘密ファイルを使用します.
しかし、それらのすべては、あなたが作業しているファイルに秘密を書く必要があります、あなたが無意識にGithubにプッシュするファイルです.それで、どんなより良い方法もありませんか?答えは:ある!AWS SSMの下に提供されたパラメータストアを使用します.私たちは、OnGoDB接続ストリングを保存して、取り出すために、AWS CLI/AWSコンソール、AWS SDKとNODEJSを使用しています.
パラメータストアでは、String型キー値ペア、StringList型のキー値ペアのような秘密の異なるタイプを作成できます.MongoDB接続文字列が単純なキー値のペアがトリックを行うように、我々は単純な文字列型を使用します.
mongodb+srv://user:[email protected]/dbname
今、その時間は私たちの秘密を作成します.秘密を作成するには、AWSコンソールを使用します.それで、AWSコンソールに行って、SSMを捜してください.
システムマネージャとのポップアップがあり、それをクリックし、SSMメインページに転送されます.左側では、パラメータストアを見つけることができます.これをクリックした後、まだ作成された秘密を持っていない場合はCreateパラメーターと呼ばれるオプションがあります.既に作成された秘密を持っている場合は、Create Parameterオプションを使用してリストを表示し、Create Parameterをクリックします.
CREATEパラメータをクリックすると、以下のような画面が表示されます.

今、その値を埋めるためにその時間.適切な名前を付けてください.私の場合はNoteAppChord ConnLung文字列を書きます.説明は省略可能です.その空白を残すことができます.標準のティアと文字列を選択し、Mongo接続文字列を貼り付けます.また、完全に任意のタグを与えることができるので、ちょうど作成パラメータを打つことができます.
今、私たちのLamda機能を介してアクセスするためにその時間.パラメータストアにアクセスするには、まずいくつかのIAM許可を与えなければなりません.
インサイド・ユー.IamroleStatementセクションの「プロバイダー」セクションの下のYMLファイルは、次のポリシーをコピー/ペーストします.
iamRoleStatements:
    - Effect: Allow
      Action:
        - "ssm:GetParameter*"
      Resource: "*"
今、我々のハンドラ関数の中で、我々は何をするか、我々は簡単にコンソールをログに記録されますが、アクセスすることができます何かを行うことができます.したがって、ハンドラファイルは次のようになります.
const AWS = require("aws-sdk");
const ssm = new AWS.SSM();

let param = {
  Name: "NOTEAPP_CONN_STRING", // Our Secret Name
  WithDecryption: true,
};

module.exports.handler = async (event) => {
    let request = await ssm.getParameter(param).promise();
    let conn_string = request.Parameter.Value;

   console.log(conn_string);
}
それで、我々のコードで我々の秘密の跡が全くないとわかります、しかし、それはAWSに格納されます.これは、Serverlessアプリケーションの秘密を管理する方法です