删除未使用的 Lambda 轮换函数 - AWS Secrets Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

删除未使用的 Lambda 轮换函数

在为密钥创建轮换函数后,有时,您可能决定不再需要轮换密钥。删除密钥可能是一个显而易见的步骤。不过,您可能还希望删除对密钥进行轮换的 Lambda 轮换函数。如果在多个密钥之间共享轮换函数,在删除该函数轮换的最后一个密钥后,您才会删除该函数。

如果您按本指南中所述使用 AWS Serverless Application Repository 模板创建轮换函数,您不应仅删除该函数。该函数是 Secrets Manager 作为 AWS CloudFormation 堆栈的一部分创建的。在删除堆栈时,将删除堆栈创建的所有内容。在这种情况下,Secrets Manager 同时删除 Lambda 函数以及为该函数授予权限的 IAM 角色。您必须手动执行下列步骤来彻底删除所有项。

删除使用 AWS Serverless Application Repository 模板创建的轮换函数

请按照以下选项卡之一中的步骤进行操作:

使用 AWS 管理控制台
最小权限

要删除您使用 AWS Serverless Application Repository 模板之一创建的 Lambda 轮换函数,您必须拥有导航到堆栈及删除其创建的全部组件所需的权限:

  • cloudformation:ListStacks

  • cloudformation:DescribeStack

  • cloudformation:ListStackResources

  • cloudformation:DeleteStack

  • lambda:ListFunctions

  • lambda:GetFunction

  • lambda:DeleteFunction

  • iam:ListRoles

  • iam:DetachRolePolicy

  • iam:DeleteRolePolicy

  • iam:DeleteRole

  • cloudformation:DeleteStack

您可以通过附加以下 AWS 托管策略来授予所有这些权限:

  1. 通过以下网址打开 AWS Lambda 控制台:https://console.amazonaws.cn/lambda/

  2. 导航到函数列表,然后选择要删除的函数名称。

  3. 在函数详细信息页面上,位于顶部的横幅显示此函数属于 CloudFormation 堆栈 aws-serverless-repository-SecretsManager<rotation_template_name><unique_guid>。请访问 CloudFormation 控制台来管理此堆栈

    选择 CloudFormation 控制台链接,以在 AWS CloudFormation 控制台中打开堆栈详细信息页面。

  4. 如果您将任何内联权限策略添加到 IAM 角色而不是编辑现有的内联策略,或者您附加任何额外的托管策略,则必须先删除或分离这些策略,然后 AWS CloudFormation 才能删除堆栈:

    1. 展开堆栈的资源部分,然后选择行的实体 ID 值,将类型设置为 AWS::IAM::Role。此时将在单独的选项卡中打开 IAM 控制台。

    2. 检查策略类型为内联策略的行。您应该看到附加的 AWSLambdaBasicExecutionRole AWS 托管函数。您还应看到一个或两个内联策略,名为 SecretsManager<template name>Policy0SecretsManager<template name>Policy1。如果您看到这些策略以外的任何策略,则 Secrets Manager 没有将其创建为堆栈的一部分。这些策略是在创建堆栈后手动添加的。您必须手动删除或分离策略。如果不这样做,则以下步骤中删除堆栈的请求可能失败。

    3. 返回到 AWS CloudFormation 控制台的堆栈详细信息页面。

  5. 选择其他操作,然后选择删除堆栈

  6. Delete Stack (删除堆栈) 确认对话框上,选择 Yes, Delete (是,删除)

    Status (状态) 更改为 DELETE_IN_PROGRESS。如果删除成功完成,状态最终将变为 DELETE_COMPLETE

  7. 在返回到堆栈列表时,您不再看到删除的堆栈。

使用 AWS CLI 或开发工具包操作
最小权限

要删除您使用 AWS Serverless Application Repository 模板之一创建的 Lambda 轮换函数,您必须具有所需的权限以执行以下步骤中列出的每个 AWS CLI 或等效 API 操作。您可以通过附加以下两个 AWS 托管策略来授予所有这些权限:

  1. 打开命令提示符以运行 AWS CLI 命令。

  2. 要确定哪个 AWS CloudFormation 堆栈包含特定函数,请运行以下命令并将函数名称作为 --physical-resource-id 参数传递。这会返回与拥有指定函数的堆栈关联的资源列表。

    $ aws cloudformation describe-stack-resources --physical-resource-id MyLambdaRotationFunction {{ "StackResources": [ { "StackName": "aws-serverless-repository-MyLambdaCreationStack", "StackId": "arn:aws-cn:cloudformation:us-east-1:123456789012:stack/aws-serverless-repository-MyLambdaCreationStack/EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", "LogicalResourceId": "SecretsManagerRotationTemplate", "PhysicalResourceId": "MySecretsManagerRotationFunction", "ResourceType": "AWS::Lambda::Function", "Timestamp": "2018-04-27T18:03:05.490Z", "ResourceStatus": "CREATE_COMPLETE" }, { "StackName": "aws-serverless-repository-MyLambdaCreationStack", "StackId": "arn:aws-cn:cloudformation:us-east-1:123456789012:stack/aws-serverless-repository-MyLambdaCreationStack/EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE", "LogicalResourceId": "SecretsManagerRotationTemplateRole", "PhysicalResourceId": "aws-serverless-repository-SecretsManagerRotationTe-<random-chars>", "ResourceType": "AWS::IAM::Role", "Timestamp": "2018-04-27T18:03:00.623Z", "ResourceStatus": "CREATE_COMPLETE" } ] }
  3. 查找与 "ResourceType" :"AWS::IAM::Role" 关联的 StackIdPhysicalResourceId 响应值,这是有权调用该函数的 IAM 角色的名称。如果您将任何内联权限策略添加到 IAM 角色而不是编辑现有的内联策略,或者您附加任何额外的托管策略,则必须先删除或分离这些策略,然后 AWS CloudFormation 才能删除堆栈。

    要确定您是否具有任何嵌入的内联策略,请运行以下命令。

    $ aws iam list-role-policies --role-name <role-name-from-PhysicalResourceId-on-previous-command> { "PolicyNames": [ "SecretsManagerRotationTemplateRolePolicy0", "SecretsManagerRotationTemplateRolePolicy1" ] }

    此处指定的内联策略是所需的策略,您不需要对其执行任何操作。

  4. 如果列出了这两个策略以外的任何其他策略,则必须将其从角色中删除,然后才能继续。

    $ aws iam delete-role-policy --role-name <role-name-from-PhysicalResourceId-on-previous-command> / --policy-name <policy-name-from-previous-command>
  5. 现在,检查您是否将任何托管策略附加到角色:

    $ aws iam list-attached-role-policies --role-name <role-name-from-PhysicalResourceId-on-previous-command>
  6. 如果在以前的命令输出中列出了任何策略,请运行该最终准备命令以将其与角色分离:

    $ aws iam detach-role-policy --role-name <role-name-from-PhysicalResourceId-on-previous-command> / --policy-arn <ARN-of-policy-discovered-in-previous-command>
  7. 现在,您可以删除堆栈,这会删除所有关联的资源。将您在步骤 2 中检索的堆栈名称传递为 --stack-name

    $ aws cloudformation delete-stack --stack-name aws-serverless-repository-MyLambdaCreationStack

    在您运行此命令后不久,AWS CloudFormation 删除 IAM 角色和 Lambda 轮换函数。