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

使用 AWS CloudFormation 注册表

CloudFormation 注册表列出可以在您的 CloudFormation 账户中使用的私有和公有资源 (AWS)。

私有和公有资源提供程序

私有 资源提供程序是您明确注册以在您的 AWS 账户中使用的资源提供程序。这些可能是您自己创建的资源提供程序,以及与您共享的资源提供程序。您可以使用 CloudFormation CLI(用于资源管理的开源工具)以创建私有资源提供程序。有关更多信息,请参阅 CloudFormation 命令行界面用户指南

注意

私有资源提供程序实施在资源创建、读取、更新、列出和删除操作期间运行的自定义逻辑。因此,在 CloudFormation 堆栈中使用私有资源提供程序时,将会在您的账户中产生费用。这不包括创建的资源产生的任何费用。有关更多信息,请参阅 AWS CloudFormation 定价

公有 资源提供程序是 AWS 提供的提供程序,用于管理特定的 AWS 服务资源。虽然注册表列出使用开源资源提供程序框架实施的 AWS 资源,但可以在您的 CloudFormation 账户中使用资源和属性类型参考中包含的所有资源。

在 CloudFormation 中注册资源提供程序

要使用私有资源提供程序(您自己开发的提供程序或与您共享的提供程序),您必须先在要使用这些提供程序的账户和区域的 CloudFormation 中注册它们。在注册资源提供程序后,它将显示在该账户和区域的 CloudFormation 注册表中,您可以在堆栈模板中使用该提供程序。

您可以使用 AWS CLI 的 register-type 命令或 CloudFormation CLI 的 submit 命令注册资源提供程序。要使用 CloudFormation CLI 注册资源提供程序,请参阅 CloudFormation CLI 用户指南 中的注册资源提供程序

用于注册资源提供程序的 IAM 权限

作为注册资源提供程序的一部分,您可以指定包含架构处理程序包的 S3 存储桶。此程序包包含要注册的资源提供程序的架构、事件处理程序和关联文件。CloudFormation 需要以下 IAM 权限才能访问此 S3 存储桶和架构处理程序包。(无论您使用 AWS CLI 的 register-type 命令还是 CloudFormation CLI 的 submit 命令都是如此)。

  • s3:ListBucket

  • s3:GetObject

在尝试注册资源提供程序之前,请确保您向 cloudformation.amazonaws.com 服务授予了相应 S3 存储桶的这些权限。例如:

ArtifactCopyPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref ArtifactBucket PolicyDocument: Version: "2012-10-17" Statement: - Sid: Allow CloudFormation to copy artifacts from the bucket Effect: Allow Principal: Service: cloudformation.amazonaws.com Action: - s3:ListBucket - s3:GetObject Resource: - !Sub "arn:${AWS::Partition}:s3:::${ArtifactBucket}" - !Sub "arn:${AWS::Partition}:s3:::${ArtifactBucket}/*"

有关更多信息,请参阅 AWS Identity and Access Management 用户指南 中的 Amazon S3 的操作、资源和条件键

此外,您在注册资源提供程序时指定的执行角色日志记录角色都必须指定了可信关系,允许 CloudFormation 服务委托人代入该角色。例如:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "resources.cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

有关更多信息,请参阅 AWS Identity and Access Management 用户指南 中的创建角色以向 AWS 服务委托权限

使用 AWS CLI 注册资源提供程序

  1. 找到包含要在您的账户中注册的资源提供程序的资源提供程序包的 S3 存储桶。

  2. 使用 register-type 命令在您的账户中注册资源提供程序:

    RegisterType 是一个异步操作并返回一个注册令牌,您可以使用该令牌跟踪注册请求进度。

    注意

    如果您的资源类型在其任何处理程序中调用 AWS API,您必须创建一个包含调用这些 AWS API 所需的权限的 IAM 执行角色,并在您的账户中预置该执行角色。然后,您可以使用 --execution-role-arn 参数指定该执行角色。接下来,CloudFormation 担任该执行角色,以便为您的资源类型提供相应的凭证。

    例如,以下命令在当前 AWS 账户中注册 My::Resource::Example 资源类型:

    aws cloudformation register-type --type-name My::Resource::Example --schema-handler-package [s3 object path] --type RESOURCE { "RegistrationToken": "f5525280-104e-4d35-bef5-8f1fexample" }
  3. 可选:将注册令牌与 describe-type-registration 命令一起使用以跟踪注册请求进度。

    在 CloudFormation 完成注册请求时,它将请求的进度状态设置为 COMPLETE

    以下示例使用上面的 RegisterType 命令返回的注册令牌以返回注册状态信息。

    aws cloudformation describe-type-registration --registration-token f5525280-104e-4d35-bef5-8f1fexample { "ProgressStatus": "COMPLETE", "TypeArn": "arn:aws:cloudformation:us-east-1:012345678910:type/resource/My-Resource-Example", "Description": "Deployment is currently in DEPLOY_STAGE of status COMPLETED; ", "TypeVersionArn": "arn:aws:cloudformation:us-east-1:012345678910:type/resource/My-Resource-Example/00000001" }

指定要使用的资源提供程序版本

随着时间的推移,您可能会为同一资源提供程序注册多个版本。您可以指定要用于 CloudFormation 操作的资源提供程序版本。

使用 AWS CLI 指定要使用的资源提供程序版本

  • 使用 set-type-default-version 命令指定用于您的账户中的 CloudFormation 操作的资源提供程序版本。

    例如,以下命令将当前账户的 My::Resource::Example 资源类型的默认版本设置为 00000003

    aws cloudformation set-type-default-version --type RESOURCE --type-name My::Resource::Example --version-id 00000003

在 CloudFormation 中查看注册的资源提供程序

在账户中注册资源提供程序后,您可以在 CloudFormation 控制台中查看该资源提供程序的详细信息。私有资源提供程序显示在 CloudFormation 注册表的 Private 部分中。

在 CloudFormation 控制台中查看注册的资源提供程序

  1. AWS CloudFormation 控制台中,从 CloudFormation 导航窗格的 CloudFormation registry (CloudFormation 注册表) 下面选择 Resource types (资源类型)

  2. Resource types (资源类型) 页面上,在 Resource types (资源类型)下面选择 Public (公有)Private (私有)

在 AWS Config 中记录资源类型

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

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

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

    注意

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

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

    注意

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

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

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

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

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

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