使用 Amazon CloudFormation 注册表 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon CloudFormation 注册表

CloudFormation 注册表可让您管理可在 Amazon Web Services 账户 中使用的公有和私有扩展,例如资源、模块和挂钩。目前,您可以在 Amazon 注册表中使用以下扩展类型:资源类型模块挂钩。注册表使您可以更轻松地在 Amazon CloudFormation 模板中发现和预置扩展,就像使用 Amazon 提供的资源一样。

公有和私有扩展

扩展类型可注册为公共或私有。目前,注册表提供以下扩展类型:

  • 资源类型 - 使用 CloudFormation 中的堆栈将自定义逻辑建模并预置为资源。

  • 模块 - 以透明、易管理和可重复的方式打包资源配置以便跨堆栈模板实现包含。

  • 挂钩 - 在预置之前主动检查 Amazon 资源的配置。

公有扩展类型

公有扩展是在注册表中公开发布以供所有 CloudFormation 用户使用的扩展。这包括 Amazon 和第三方扩展发布者发布的扩展。

有两种公有扩展:

  • Amazon 公有扩展 - Amazon 发布的扩展始终为公有且默认已激活,因此您无需执行任何操作即可在账户中使用它们。此外,Amazon 控制扩展的版本控制,因此您始终使用最新的可用版本。

  • 第三方公有扩展 - 这些扩展可供 Amazon 以外的发布者通用。

有关更多信息,请参阅使用公有扩展

私有扩展类型

私有扩展是指您已显式激活以在 Amazon Web Services 账户 中使用的第三方扩展。

有两种私有扩展:

  • 已激活的私有扩展 - 是您的账户和区域已激活的第三方扩展的本地副本。激活第三方公有扩展时,CloudFormation 会在您账户的注册表中创建该扩展的本地副本。

  • 已注册的私有扩展 - 也可以激活未在公共 CloudFormation 注册表中列出的私有扩展。这些可能是您自己创建的扩展,也可能是贵组织或其他第三方与您共享的扩展。要在您的账户中使用此类私人扩展,您必须先注册该扩展。注册扩展会将其副本上传到您账户中的 CloudFormation 注册表并激活它。

有关更多信息,请参阅使用私有扩展

通过 CloudFormation 注册表管理扩展

使用 CloudFormation 注册表来管理账户中的扩展,包括:

  • 查看可用且已激活的扩展。

  • 注册私有扩展。

  • 激活公有扩展。

在 CloudFormation 控制台中查看扩展

  1. 登录到 Amazon Web Services Management Console 并打开 Amazon CloudFormation 控制台 https://console.aws.amazon.com/cloudformation

  2. CloudFormation 导航窗格的 Registry(注册表)下,选择要查看的扩展类别:

    • Public extensions(公有扩展)显示账户中可用的公有扩展。

      1. 选择您的扩展类型:Resource types(资源类型)、Modules(模块)或 Hooks(挂钩)。

      2. 选择发布者:AmazonThird party(第三方)。

      3. 使用 Filter(筛选条件)选项进一步选择要查看的扩展。

    • Activated extensions(已激活的扩展)显示账户中已激活的公有和私有扩展。

      1. 选择您的扩展类型:Resource types(资源类型)、Modules(模块)或 Hooks(挂钩)。

      2. 使用 Filter(筛选条件)下拉菜单进一步选择要查看的扩展:

        • Amazon - 列出 Amazon 发布的扩展。Amazon 发布的扩展默认已激活。

        • Third-party(第三方)- 列出此账户中已激活、除 Amazon 以外任何发布者的所有公有扩展。

        • Registered(已注册)- 列出此账户中已激活的所有私有扩展。

    • Publisher(发布者)显示使用此账户已发布的所有公有扩展。有关更多信息,请参阅《扩展开发用户指南》中的发布扩展

  3. 搜索或选择扩展名称以查看扩展详细信息。

在 Amazon Config 中记录资源类型

您可以指定 Amazon Config 自动跟踪您的私有资源类型,并将对这些资源的更改作为配置项记录。这使您能够查看这些私有资源类型的配置历史记录,此外还可以编写 Amazon Config 规则 规则以验证配置最佳实践。挂钩扩展需要 Amazon Config。

要让 Amazon Config 自动跟踪您的私有资源类型,请执行以下操作:

  • 通过 CloudFormation 管理资源。这包括通过 CloudFormation 执行所有资源创建、更新和删除操作。

    注意

    如果您使用 IAM 角色执行堆栈操作,则该 IAM 角色必须有权调用以下 Amazon Config 操作:

  • 配置 Amazon Config 以记录所有资源类型。有关更多信息,请参阅《Amazon Config 开发人员指南》中的记录第三方资源的配置

    注意

    如果私有资源包含同时定义为必需只写的属性,Amazon Config 不支持记录这些私有资源。

    根据设计,定义为只写的资源属性不会在用于创建 Amazon Config 配置项的架构中返回。因此,包含定义为只写和必需的属性将导致配置项创建失败,因为必需的属性不存在。要查看用于创建配置项的架构,您可以查看 DescribeType 操作的 schema 属性。

有关配置项的更多信息,请参阅《Amazon Config 开发人员指南》中的配置项

防止在配置项目中记录敏感属性

您的资源类型可能包含您视为敏感信息(如密码、密钥或其他敏感数据)的属性,您不希望在配置项目中记录这些属性。要防止在配置项目中记录属性,您可以将该属性包括在资源类型架构的 writeOnlyproperties 列表中。作为 writeOnlyproperties 列出的资源属性可由用户指定,但不会由 readlist 请求返回。

有关更多信息,请参阅《CloudFormation 命令行界面用户指南》中的资源提供程序架构

混淆代理问题防范

混淆座席问题是一个安全性问题,即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在 Amazon 中,跨服务模拟可能会导致混淆座席问题。一个服务(呼叫服务) 调用另一项服务(所谓的服务)时,可能会发生跨服务模拟。可以操纵调用服务以使用其权限对另一个客户的资源进行操作,否则该服务不应有访问权限。为了防止这种情况,Amazon 提供可帮助您保护所有服务的服务委托人数据的工具,这些服务委托人有权限访问账户中的资源。

我们建议在资源策略中使用 aws:SourceArnaws:SourceAccount 全局条件上下文键,以限制 Amazon CloudFormation 为其他服务提供的扩展访问权限。如果 aws:SourceArn 值不包含账户 ID,例如 Amazon S3 桶 Amazon 资源名称(ARN),您必须使用两个全局条件上下文键来限制权限。如果同时使用全局条件上下文密钥和包含账户 ID 的 aws:SourceArn 值,则 aws:SourceAccount 值和 aws:SourceArn 值中的账户在同一策略语句中使用时,必须使用相同的账户 ID。如果您只希望将一个资源与跨服务访问相关联,请使用 aws:SourceArn。如果您想允许该账户中的任何资源与跨服务使用操作相关联,请使用 aws:SourceAccount

aws:SourceArn 的值必须使用扩展的 ARN。

防范混淆代理问题最有效的方法是使用 aws:SourceArn 全局条件上下文键和资源的完整 ARN。如果不知道扩展的完整 ARN,或者正在指定多个扩展,请针对 ARN 未知部分使用带有通配符(*)的 aws:SourceArn 全局上下文条件键。例如,arn:aws:cloudformation:*:123456789012:*

注意

对于注册表服务,CloudFormation 调用 Amazon Security Token Service(Amazon STS)以在您的账户中担任角色。此角色是为 RegisterType 操作中的 ExecutionRoleArn 以及 LoggingConfig 操作中的 LogRoleArn 集而配置。

以下示例演示如何使用 Amazon CloudFormation 中的 aws:SourceArnaws:SourceAccount 全局条件上下文键来防范混淆代理问题。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "resources.cloudformation.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "StringLike": { "aws:SourceArn": "arn:aws:cloudformation:us-east-1:123456789012:type/resource/Organization-Service-Resource/*" } } } ] }