

# CloudFormation 的安全最佳实践
<a name="security-best-practices"></a>

Amazon CloudFormation 提供了在您开发和实施自己的安全策略时需要考虑的大量安全功能。以下最佳实践是一般指导原则，并不代表完整安全解决方案。这些最佳实践可能不适合环境或不满足环境要求，请将其视为有用的考虑因素而不是惯例。

**Topics**
+ [使用 IAM 控制访问](#use-iam-to-control-access)
+ [请勿将凭证嵌入您的模板](#creds)
+ [使用 Amazon CloudTrail 记录 CloudFormation 调用](#cloudtrail)

## 使用 IAM 控制访问
<a name="use-iam-to-control-access"></a>

IAM 是一项可用于管理 Amazon 中的用户及其权限的 Amazon 服务。您可以将 IAM 与 CloudFormation 结合使用来指定用户可以执行哪些 CloudFormation 操作，例如查看堆栈模板、创建堆栈或删除堆栈。此外，管理 CloudFormation 堆栈的任何人都需要具备对这些堆栈中的资源执行操作的权限。例如，如果用户想使用 CloudFormation 启动、更新或终止 Amazon EC2 实例，则他们必须拥有调用相关 Amazon EC2 操作的权限。

在大多数情况下，用户需要完全访问权限来管理模板中的所有资源。CloudFormation 可代表用户发出调用，来创建、修改和删除这些资源。要分隔用户和 CloudFormation 服务之间的权限，请使用服务角色。CloudFormation 使用服务角色的策略发出调用，而不是通过用户的策略。有关更多信息，请参阅 [Amazon CloudFormation 服务角色](using-iam-servicerole.md)。

## 请勿将凭证嵌入您的模板
<a name="creds"></a>

我们建议您在堆栈模板中使用*动态引用*，而不是在 CloudFormation 模板中嵌入敏感信息。

动态引用提供了一种简洁、功能强大的方法，用于引用在其他服务（例如 Amazon Systems Manager Parameter Store 或 Amazon Secrets Manager）中存储和管理的外部值。当您使用动态引用时，CloudFormation 会在堆栈和更改集合操作期间根据需要检索指定引用的值，并将值传递到相应的资源。但是，CloudFormation 从不存储实际引用值。有关更多信息，请参阅 [使用动态引用获取存储在其他服务中的值](dynamic-references.md)。

[Amazon Secrets Manager](https://docs.amazonaws.cn/secretsmanager/latest/userguide/intro.html) 帮助您安全地加密、存储和检索数据库和其他服务的凭证。[Amazon Systems Manager Parameter Store](https://docs.amazonaws.cn/systems-manager/latest/userguide/systems-manager-parameter-store.html) 提供安全的分层存储，用于配置数据管理。

有关定义模板参数的信息，请参阅[CloudFormation 模板 Parameters 语法](parameters-section-structure.md)。

## 使用 Amazon CloudTrail 记录 CloudFormation 调用
<a name="cloudtrail"></a>

Amazon CloudTrail 跟踪在您的 Amazon Web Services 账户中进行 CloudFormation API 调用的任何人。当任何人使用 CloudFormation API、CloudFormation 控制台、后端控制台或 CloudFormation Amazon CLI 命令时，系统将会记录 API 调用。启用日志记录并指定用于存储日志的 Amazon S3 存储桶。这样一来，在需要时，您可以审核在您的账户中发起 CloudFormation 调用的人员。有关更多信息，请参阅 [使用 Amazon CloudTrail 记录 Amazon CloudFormation API 调用](cfn-api-logging-cloudtrail.md)。