EC2パラメータストアを使用して、CloudFormationでサポートされ、ECS環境と統合できる安全なキーと値のペアを作成することを検討してください。
AWS Systems Manager Parameter Store
AWSシステムマネージャのパラメータStoreは、構成データの管理と秘密管理のための安全な、階層 ストレージを提供します。 には、パスワード、データベース文字列、およびライセンスコード などのデータをパラメータ値として格納できます。値をプレーンテキストまたは暗号化された データとして格納できます。パラメーターを作成したときに指定した の一意の名前を使用して値を参照できます。高度にスケーラブルで利用可能な と耐久性のあるパラメータストアは、AWSクラウドによってサポートされています。パラメータ 店舗は追加料金なしで提供されます。
パラメータStoreはアプリケーションの秘密を格納するための優れたセキュリティ機能を有しているが、また、などの公開鍵、環境設定、ライセンスコード、
そして、それが直接サポートされているように、非センシティブ・アプリケーションの文字列を格納するために使用することができ
CloudFormationにより、ECSがアクセスできるアプリケーション構成文字列を簡単に取得、保存、管理することができます。 このテンプレートは、コンソールまたはCLIを経由してスタックの作成時にパラメータストアキー値を提供することができます:
Description: Simple SSM parameter example
Parameters:
pSMTPServer:
Description: SMTP Server URL eg [email-smtp.us-east-1.amazonaws.com]:587
Type: String
NoEcho: false
SMTPServer:
Type: AWS::SSM::Parameter
Properties:
Name: my-smtp-server
Type: String
Value: !Ref pSMTPServer
どれAWSランタイム環境(EC2、ECS、ラムダ)は簡単に安全に値を取得することができます。コンソール側からは、パラメータのバージョン履歴を保持する優れたパラメータマネージャインターフェイスがあります。許可が標準IAMポリシーの構文を使用して制御されているように、その、IAMでintergated:
{
"Action": [
"ssm:GetParameterHistory",
"ssm:GetParameter",
"ssm:GetParameters",
"ssm:GetParametersByPath"
],
"Resource": [
"arn:aws:ssm:us-west-2:555513456471:parameter/smtp-server"
],
"Effect": "Allow"
},
{
"Action": [
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:us-west-2:555513456471:key/36235f94-19b5-4649-84e0-978f52242aa0a"
],
"Effect": "Allow"
}
最後に、このblog articleは、実行時にDockerfileに権限を読み込むための手法を示しています。 AWSパラメータストアを使用してDockerで環境変数を処理する安全な方法を提案しています。参考のために、私はここに彼らのDockerfile含む午前:
FROM grafana/grafana:master
RUN curl -L -o /bin/aws-env https://github.com/Droplr/aws-env/raw/master/bin/aws-env-linux-amd64 && \
chmod +x /bin/aws-env
ENTRYPOINT ["/bin/bash", "-c", "eval $(/bin/aws-env) && /run.sh"]
その呼び出しでは、各パラメータは、コンテナ内の環境変数として利用可能です。あなたは、環境変数からパラメータを読み込むためにラッパーが必要な場合とそうでない場合があります。
環境からキーペアを消費するクライアント/サービスはありますか?いくつのキーペアをパラメータとして注入する必要がありますか? –
@RodrigoMでは、キーと値のペアの量は動的ですが、私たちの場合、最大20の環境変数です。これらの環境変数は、これがあなたが求めているものなら、Dockerコンテナに渡されます。 – Ivan
私はちょうどプロセスのどこで参照されているのだろうかと思っていた。 Dockerファイルまたはランタイムアプリケーションで参照されている値はありますか?どちらも? –