

# 使用 CloudFormation 注册表中的第三方公有扩展
<a name="registry-public"></a>

要在模板中使用第三方公有扩展，您必须首先为要使用它的账户和区域*激活*该扩展。激活扩展使其在激活它的账户和区域的堆栈操作中可用。

激活第三方公有扩展时，CloudFormation 会在账户的扩展注册表中为激活的扩展创建一个条目作为私有扩展。这允许您设置该扩展包含的任何配置属性。配置属性定义如何为给定 Amazon Web Services 账户和区域配置扩展。

除了设置配置属性外，您还可以通过以下方式自定义扩展：
+ 指定 CloudFormation 用于激活扩展的执行角色，以及为扩展配置日志记录。
+ 指定在新的次要版本或补丁版本可用时是否自动更新扩展。
+ 指定要使用的别名，而不是第三方公有扩展名称。这有助于避免第三方扩展之间的命名冲突。

**Topics**
+ [配置具有 IAM 权限的执行角色和公有扩展访问权限的信任策略](#registry-public-enable-execution-role)
+ [自动使用新版本的扩展](#registry-public-enable-auto)
+ [使用别名以引用扩展](#registry-public-enable-alias)
+ [处理公有扩展的常用 Amazon CLI 命令](#registry-commonly-used-commands-public-extensions)
+ [激活账户中的第三方公有扩展](registry-public-activate-extension.md)
+ [更新账户中的第三方公有扩展](registry-public-update-extension-console.md)
+ [停用账户中的第三方公有扩展](registry-public-deactivate-extension.md)

## 配置具有 IAM 权限的执行角色和公有扩展访问权限的信任策略
<a name="registry-public-enable-execution-role"></a>

从 CloudFormation 注册表中激活公有扩展时，您可以提供一个执行角色，该角色向 CloudFormation 授予在您的 Amazon Web Services 账户和区域中调用该扩展所需的权限。

该执行角色所需的权限在扩展架构的处理程序部分中定义。您必须创建 IAM 策略来授予扩展所需的特定权限，并将其附加到执行角色。

除权限策略外，该执行角色还需要具有允许 CloudFormation 承担角色的信任策略。按照《IAM 用户指南》**中[使用自定义信任策略创建角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-custom.html)的指导，使用自定义信任策略创建角色。

### 信任关系
<a name="registry-public-enable-execution-role-trust-policy"></a>

下面所示为您可以使用的示例信任策略。

您可以选择使用带有 `Condition` 字段的一个或多个全局条件上下文键来限制权限范围，以防止跨服务混淆代理。有关更多信息，请参阅 [防止跨服务混淆代理](cross-service-confused-deputy-prevention.md)。
+ 将 `aws:SourceAccount` 值设置为您的账户 ID。
+ 将 `aws:SourceArn` 值设置为扩展的 ARN。

**示例信任策略 1**  
以下是资源类型扩展的示例 IAM 角色信任策。

------
#### [ JSON ]

****  

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

------

**示例信任策略 2**  
以下是挂钩扩展的示例 IAM 角色信任策略。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "resources.cloudformation.amazonaws.com",
                    "hooks.cloudformation.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cloudformation:us-west-2:123456789012:type/hook/Organization-Service-Hook"
                }
            }
        }
    ]
}
```

------

## 自动使用新版本的扩展
<a name="registry-public-enable-auto"></a>

激活扩展时，您还可以指定扩展类型以使用最新的次要版本。每次发布者发布您激活的扩展的新版本时，您的扩展类型都会更新次要版本。

例如，下次使用包含该扩展的模板执行堆栈操作（例如创建或更新堆栈）时，CloudFormation 将使用新的次要版本。

自动或手动更新为新的扩展版本，不会影响堆栈中已预置的任何扩展实例。

CloudFormation 将扩展的主要版本更新视为可能包含重大更改，因此需要您手动更新为扩展的新主要版本。

默认情况下，Amazon 发布的扩展将为其可用的所有账户和区域激活，并且始终使用每个 Amazon Web Services 区域中可用的最新版本。

**重要**  
由于您可以控制扩展是否以及何时更新为账户中的最新版本，因此最终可能会在不同的账户和区域部署同一扩展的不同版本。  
跨这些账户和区域使用包含该扩展的相同模板时，可能会导致意外结果。

## 使用别名以引用扩展
<a name="registry-public-enable-alias"></a>

您不能激活给定 Amazon Web Services 账户和区域中具有给定名称的多个扩展。由于不同的发布者可能提供具有相同扩展名称的公有扩展，CloudFormation 可让您为激活的任何第三方公有扩展指定别名。

如果指定扩展的别名，则 CloudFormation 会将别名视为该账户和区域内的扩展类型名称。必须使用别名来引用模板、API 调用和 CloudFormation 控制台中的扩展。

扩展别名在指定的账户和区域内必须唯一。您可以使用不同的类型名称别名在同一账户和区域中多次激活同一公有资源。

**重要**  
虽然扩展别名只要求在给定账户和区域中唯一，但强烈建议用户*不要*为跨账户和区域的不同第三方公有扩展分配相同的别名。使用包含跨多个账户或区域的扩展别名的模板时，这样做可能会导致意外结果。

## 处理公有扩展的常用 Amazon CLI 命令
<a name="registry-commonly-used-commands-public-extensions"></a>

处理公有扩展的常用命令包括：
+ [https://docs.amazonaws.cn/cli/latest/reference/cloudformation/activate-type.html](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/activate-type.html) 可在账户中激活公有第三方模块或资源类型。
+ [https://docs.amazonaws.cn/cli/latest/reference/cloudformation/set-type-configuration.html](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/set-type-configuration.html) 可指定您账户中扩展的配置数据，以及禁用和启用挂钩。
+ [https://docs.amazonaws.cn/cli/latest/reference/cloudformation/list-types.html](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/list-types.html) 可列出您账户中的扩展。
+ [https://docs.amazonaws.cn/cli/latest/reference/cloudformation/describe-type.html](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/describe-type.html) 可返回有关特定扩展或特定扩展版本的详细信息，包括当前配置数据。
+ [https://docs.amazonaws.cn/cli/latest/reference/cloudformation/set-type-default-version.html](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/set-type-default-version.html) 可指定哪个扩展版本是默认版本。
+ [https://docs.amazonaws.cn/cli/latest/reference/cloudformation/deactivate-type.html](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/deactivate-type.html) 可停用先前在您账户中激活的公有第三方模块或资源类型。