AWS SSMによる秘密管理
2194 ワード
Serverlessなアーキテクチャで働いている間、私が遭遇している最も燃えている質問の1つは「Serverlessなアプリケーションの秘密を管理する正しい方法です」?質問は、アプリケーションにハードコーディングのような多くの答えを持っているかもしれません.env変数または専用の秘密ファイルを使用します.
しかし、それらのすべては、あなたが作業しているファイルに秘密を書く必要があります、あなたが無意識にGithubにプッシュするファイルです.それで、どんなより良い方法もありませんか?答えは:ある!AWS SSMの下に提供されたパラメータストアを使用します.私たちは、OnGoDB接続ストリングを保存して、取り出すために、AWS CLI/AWSコンソール、AWS SDKとNODEJSを使用しています.
パラメータストアでは、String型キー値ペア、StringList型のキー値ペアのような秘密の異なるタイプを作成できます.MongoDB接続文字列が単純なキー値のペアがトリックを行うように、我々は単純な文字列型を使用します.
システムマネージャとのポップアップがあり、それをクリックし、SSMメインページに転送されます.左側では、パラメータストアを見つけることができます.これをクリックした後、まだ作成された秘密を持っていない場合はCreateパラメーターと呼ばれるオプションがあります.既に作成された秘密を持っている場合は、Create Parameterオプションを使用してリストを表示し、Create Parameterをクリックします.
CREATEパラメータをクリックすると、以下のような画面が表示されます.
今、その値を埋めるためにその時間.適切な名前を付けてください.私の場合はNoteAppChord ConnLung文字列を書きます.説明は省略可能です.その空白を残すことができます.標準のティアと文字列を選択し、Mongo接続文字列を貼り付けます.また、完全に任意のタグを与えることができるので、ちょうど作成パラメータを打つことができます.
今、私たちのLamda機能を介してアクセスするためにその時間.パラメータストアにアクセスするには、まずいくつかのIAM許可を与えなければなりません.
インサイド・ユー.IamroleStatementセクションの「プロバイダー」セクションの下のYMLファイルは、次のポリシーをコピー/ペーストします.
しかし、それらのすべては、あなたが作業しているファイルに秘密を書く必要があります、あなたが無意識に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アプリケーションの秘密を管理する方法ですReference
この問題について(AWS SSMによる秘密管理), 我々は、より多くの情報をここで見つけました https://dev.to/rajandmr/managing-secrets-with-aws-ssm-44e1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol