我可以强制 CloudFormation 解析 Secrets Manager 中的值吗?

2024-04-23

在下面(缩写为 CloudFormation 模板)中,我尝试配置 AWS Lambda 函数以从注入其环境的 AWS Secrets Manager 获取值:

Resources:
  Function:
    Type: AWS::Serverless::Function
    Properties:
      Environment:
        Variables:
          SECRET_KEY: !Sub '{{resolve:secretsmanager:${Secret}:SecretString:KEY}}'

  Secret:
    Type: AWS::SecretsManager::Secret
    Properties:
      Name: 'very-secret-thing'
      SecretString: '{"KEY":"dummy"}'

使用此模板创建堆栈时,一切都会按预期进行。然后,我去 CloudFormation 之外更改秘密的值,因为我并不真正希望将秘密签入源代码管理。这是完全有可能的,并且文档 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-secretsmanager-secret.html#cfn-secretsmanager-secret-secretstring意味着,只要我避免更改虚拟值,后续的 CloudFormation 堆栈更新就不会触及密钥的值SecretString在模板中。

因此,在 AWS 控制台中设置实际密钥后,我需要触发 Lambda 函数的重新部署,以便 CloudFormation 解析新的密钥值并在函数的环境中设置。我怎么做?

执行中aws cloudformation deploy失败并显示消息:无需进行任何更改即可部署。

我怀疑 CloudFormation 正在将模板的“原始”版本与最后部署的版本进行比较,而没有首先解析对 Secrets Manager 的引用。是这样吗?是否有一些技巧可以强制提前解除引用?

Footnote: I am well aware that using Secrets Manager this way will cause the secret value to be visible in the AWS Lambda Console, and that getting the value from Secrets Manager at runtime would be the more secure approach. That just happens to be out-of-scope for what I am hoping to do.


你可以人为地改变别的东西 on the AWS::Serverless::Function资源以在您进行部署时强制其更新。

例如,说一个时间戳:

Parameters:
  DeployTimestamp: { Type: String }

Resources:
  Function:
    Type: AWS::Serverless::Function
    Properties:
      Environment:
        Variables:
          SECRET_KEY: !Sub '{{resolve:secretsmanager:${Secret}:SecretString:KEY}}'
          SECRET_KEY_UPDATED: !Ref DeployTimestamp

假设您从脚本进行部署,那么您会执行类似的操作aws cloudformation deploy --parameter-overrides "DeployTimestamp=$(date)"每次更改该值。

当然,这样做的缺点是该函数将更新每个部署,即使秘密尚未更新。如果这让你烦恼,你可以变得更漂亮并注射aws secretsmanager describe-secret --query LastChangedDate作为参数而不是当前时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以强制 CloudFormation 解析 Secrets Manager 中的值吗? 的相关文章

  • AWS CLI 创建 Lambda 函数无法解压缩上传的文件

    我正在尝试使用 AWS CLI 创建 AWS Lambda 函数 所以我生成了 JSON 输入框架以供使用aws lambda create function函数通过传入 generate cli skeleton参数 然后相应地替换值 问
  • 使用 CMK 的 SQS 加密

    我正在尝试从加密的 SQS 读取消息 对象落在 S3 存储桶上 gt 触发 S3 事件 gt 消息发送到 SQS gt SQS 触发 Lambda 进行处理 我已经使用 AWS 托管的 CMK 完成了这项工作 但是 我无法使用 AWS 拥有
  • 自动缩放时如何更改新实例标签名称

    我在我的设备上创建了一个新闹钟AWS基于我也创建的指标的帐户 我用这个警报来自动缩放 当启动我正在使用的新实例时User Data字段来设置这个新实例 我面临的唯一问题是我无法修改标签 特别是标签Name 这个新实例 如果我不更改它 所有新
  • 使用 AWS Lambda 从 AWS S3 读取并提取巨大的 zip 文件

    我正在开发数据管理应用程序 客户可以上传zip file approx 250 MB 与多个text files approx 1500 MB on AWS S3 但由于记忆有限aws lamda 最大 1536MB 大小 我能够提取 50
  • AWS EMR 引导操作为 sudo

    我需要更新 etc hosts适用于我的 EMR 集群 EMR AMI 4 3 中的所有实例 整个脚本无非就是 bin bash echo e ip1 uri1 gt gt etc hosts echo e ip2 uri2 gt gt e
  • 为什么从浏览器上传到 S3 时出现 403 错误?

    因此 我尝试查看此处之前的答案 但似乎没有任何效果 我正在使用 Dropzone 它似乎发出 OPTIONS 请求来获取所有允许的 CORS 相关信息 但它似乎没有正确返回 因此 通过查看 Chrome 开发工具 我有以下请求标头 Host
  • 避免在 AWS Lambda 上使用 netcore2.0 和 Serilog 进行两次日志记录

    将我的 netcore 项目升级到 2 0 后 当我的应用程序在使用 Serilog 框架的 AWS Lambda 上运行时 我会看到双日志 请参阅下面我的设置 public void ConfigureServices IServiceC
  • AWS CDK 授予堆栈外部资源的权限

    我对 AWS CDK 相当陌生 并且没有太多使用 AWS 的经验 在我正在编写的 CDK 堆栈中 我必须向使用其他 CDK 模板构建且已位于 aws 中的资源授予权限 假设我的堆栈 A 包含一个 lambda 该 lambda 将从另一个服
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • AWS Lambda。延迟调用

    我需要使用亚马逊工具构建 任务调度程序 主要问题是我需要执行一次任务 延迟很大 可能是几个小时或几周 我尝试研究如何使用 CloudWatch 和 Lambda 函数构建它 据我了解 我需要使用单独的规则来执行一次超时 但 AWS 只允许我
  • 正确的 aws cli 语法以在非默认 VPC 中查找 VPC 安全组

    这是来自的后续问题在describe vpcs中按标签过滤的正确语法是什么 https stackoverflow com questions 27057932 what is the correct syntax for filterin
  • AWS API Gateway - Lambda - 内部服务器错误

    我正在通过 lambda 将图像上传到 s3 一切正常 没有错误 但 API Gateway 的响应是 500 内部服务器错误 我按照本教程配置了 api gateway 对与 Amazon API Gateway 的 API 集成的二进制
  • 使用实例配置文件凭证的 AWS CLI

    在我的 EC2 实例中使用 AWS CLI 时 如何指定要使用实例配置文件凭证 文档说 Instance profile credentials these credentials can be used on EC2 instances
  • CNAME 速度慢吗?

    我将 CNAME 与 S3 CloudFront 一起使用来提供一些静态文件 例如 js css 图像等 我这样做是为了使存储桶的 URL 更漂亮 因为我认为最好将所有内容都定位到我的网站 以防万一将来我想移动这些文件 更改应该是透明的 今
  • 向多个 EC2 实例发送 AWS CloudWatch 警报

    我想要应用 CloudWatch 警报来停止我们的预生产环境中未使用的实例 我们经常会遇到实例被启动 使用然后保持打开状态 这确实开始花费我们相当多的钱 CloudWatch 警报有一个方便的功能 我们可以根据一些指标停止 这太棒了 我想用
  • 从 AWS CloudWatch 指标数学 SEARCH 函数获取单个时间序列

    我正在尝试创建一个 CloudWatch 警报 以判断组中的任何实例是否超过所用内存的 x 并构建了以下指标数学查询来执行此操作 SEARCH CWAgent InstanceId MetricName mem used percent M
  • 通过django s3中间件保存文件时获取Http403(但可以在shell中使用boto保存)

    我一直在尝试通过 django 应用程序将用户上传的文件保存到我的 s3 存储桶中 我正在使用django s3 storage https github com etianen django s3 storage中间件 但我不断收到 S3
  • DynamodB:如何更新排序键?

    该表有两个键 filename 分区键 和eventTime 排序键 我要更新eventTime对于某些filename Tried put item and update item 发送相同的filename与新的eventTime但这些
  • Chrome 驱动程序和 Chromium 二进制文件无法在 aws lambda 上运行

    我陷入了一个问题 我需要在 AWS lambda 上做一些抓取工作 所以我按照下面提到的博客及其代码库作为起点 这非常有帮助 并且在运行时环境 Python 3 6 的 AWS lambda 上对我来说工作得很好 https manivan
  • AWS - 有没有办法“挂钩”第一次创建联合身份的时间?

    我有一个 Cognito 身份池 用于对我的前端用户进行身份验证 并在我的应用程序中授予他们某些权限 但是 我在授予这些用户访问 IoT 的权限时遇到了问题 其中涉及调用 Lambda 调用iot addPrincipalPolicy 一旦

随机推荐