Iva*_*van 7 amazon-web-services amazon-ecs aws-cloudformation
在创建ECS基础架构时,我们使用CloudFormation 描述我们的任务定义.我们希望能够将环境变量作为参数动态传递给模板.根据文档,Environment具有KeyValuePair类型,但CloudFormation参数不具有此类型.我们无法将环境变量硬编码到模板中,因为此模板用作嵌套堆栈,因此环境变量将在其中动态传递.
到目前为止,我看到的唯一可能的方法是将所有参数作为CommaDelimitedList传递,然后使用CloudFormation函数以某种方式解析和映射它.我可以Fn ::拆分键和值中的每个实体,但是如何在CloudFormation中动态构建KeyValuePair数组?
或者也许有一种更简单的方法,我错过了一些东西?提前感谢任何想法.
您可能需要考虑使用 EC2 Parameter Store 创建安全的键/值对,这在 CloudFormation 中受支持,并且可以与 ECS 环境集成。
AWS Systems Manager Parameter Store 为配置数据管理和机密管理提供安全的分层存储。您可以将密码、数据库字符串和许可证代码等数据存储为参数值。您可以将值存储为纯文本或加密数据。然后,您可以使用创建参数时指定的唯一名称来引用值。Parameter Store 具有高度可扩展性、可用性和持久性,由 AWS 云提供支持。参数存储免费提供。
虽然 Parameter 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
Run Code Online (Sandbox Code Playgroud)
任何 AWS 运行时环境(EC2、ECS、Lambda)都可以轻松安全地检索值。从控制台一侧,有一个很棒的参数管理器界面,可以维护参数版本历史记录。它与 IAM 集成,因此权限由标准 IAM 策略语法控制:
{
"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"
}
Run Code Online (Sandbox Code Playgroud)
最后,这篇博客文章展示了一种在运行时将权限读取到 Dockerfile 中的技术。他们提出了一种使用 AWS Parameter Store 处理 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"]
Run Code Online (Sandbox Code Playgroud)
通过该调用,每个参数都可以作为容器中的环境变量使用。您的应用程序可能需要也可能不需要包装器来从环境变量中读取参数。
归档时间: |
|
查看次数: |
2280 次 |
最近记录: |