

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用水印追踪 AMI 血统
<a name="ami-watermarks"></a>

AMI 水印是用于跟踪计算机图像历史记录的简单文本标签。您可以在图像配方中添加水印名称，Image Builder 会在构建过程中将其附加到输出 AMI。

当您将 AMI 复制或分发给其他地区或账户时，水印会自动复制。您的 AMI 的所有副本都带有相同的水印。这可以帮助您追踪图像的历史记录。

您不能将带水印的 AMI 设为公开。如果您的配方包含水印或者您的源 AMI 有水印，Image Builder 会拒绝将启动权限设置为公开的分发配置。

AMI 水印的主要特征：
+ **目的** — 跨副本和发行版跟踪 AMI 谱系。
+ **范围**-仅限元数据。水印不会影响实例性能或运行时行为。
+ **可见性限制**-带水印的 AMI 不能公开。

**Topics**
+ [水印限制](#ami-watermarks-constraints)
+ [先决条件](#ami-watermarks-prereqs)
+ [为图像配方添加水印](#ami-watermarks-add)
+ [查看现有食谱上的水印](#ami-watermarks-view)
+ [注意事项](#ami-watermarks-considerations)

## 水印限制
<a name="ami-watermarks-constraints"></a>

以下限制适用于 Image Builder 图像配方中的 AMI 水印。


| 约束 | 值 | 
| --- | --- | 
| 每个食谱都有水印 | 1 到 5 | 
| 名字长度 | 3 到 128 个字符 | 
| 允许使用的字符 | 字母、数字、空格和以下特殊字符：`( ) [ ] . / - ' @ _` | 
| 边缘角色 | 名称不能以空格开头或结尾 | 
| 区分大小写 | 水印名称区分大小写 | 
| 重复 | 不允许在同一个食谱中使用重复的名字 | 
| 每个输出的总数 AMI | 来源 AMI 水印加食谱水印不能超过 5 | 

## 先决条件
<a name="ami-watermarks-prereqs"></a>

在使用 AMI 水印之前，请验证以下要求。
+ AMI 水印仅支持图像配方，不支持容器配方。
+ 您的 Image Builder 执行角色必须包含的`ec2:AttachImageWatermark`权限`arn:aws:ec2:*::image/*`。如果您使用 Image Builder 服务相关角色，则会自动包含此权限。

## 为图像配方添加水印
<a name="ami-watermarks-add"></a>

在创建图像配方或现有配方的新版本时，可以添加水印。选择以下选项卡之一以获取说明。

------
#### [ Console ]

**向图像配方添加水印**

1. 在创建图像配方或对其进行版本控制时，在配方配置部分中，展开 **AMI 水印**。

1. 输入水印名称（3 到 128 个字符）。选择 “**添加水印**” 可添加更多姓名（总共最多 5 个）。

1. 完成剩余的食谱创建步骤，然后选择 “**创建食谱**”。

------
#### [ AWS CLI ]

要使用添加水印 AWS CLI，请在**create-image-recipe**命令的 JSON 输入文件中包含该`amiWatermarks`参数。

以下示例显示了配置了水印的配方 JSON 文件。

```
{
    "name": "{{MyWatermarkedRecipe}}",
    "description": "{{Recipe with AMI watermarks for lineage tracking.}}",
    "parentImage": "{{ami-1234567890abcdef1}}",
    "semanticVersion": "1.0.0",
    "components": [
        {
            "componentArn": "arn:aws:imagebuilder:{{us-west-2}}:{{111122223333}}:component/{{my-component/1.0.0/1}}"
        }
    ],
    "amiWatermarks": [
        "{{ProductionV1}}",
        "{{team-alpha}}"
    ]
}
```

运行以下命令来创建配方。

```
aws imagebuilder create-image-recipe --cli-input-json file://{{create-watermarked-recipe.json}}
```

以下列表描述了该`amiWatermarks`参数。
+ **amiWaterMark** s（字符串数组，可选）— 要附加到根据此配方构建的输出 AMI 的水印名称列表。指定 1 到 5 个名称。每个名称必须包含 3 到 128 个字符，可以包含字母、数字、空格和以下特殊字符：`( ) [ ] . / - ' @ _`

------
#### [ CloudFormation ]

您可以使用`AmiWatermarks`属性在`AWS::ImageBuilder::ImageRecipe`资源中指定 AMI 水印。

以下示例显示了配置了水印的最小图像配方模板。

```
Resources:
  WatermarkedRecipe:
    Type: AWS::ImageBuilder::ImageRecipe
    Properties:
      Name: {{MyWatermarkedRecipe}}
      Version: {{1.0.0}}
      ParentImage: arn:aws:imagebuilder:{{us-west-2}}:aws:image/amazon-linux-2023-x86/x.x.x
      Components:
        - ComponentArn: arn:aws:imagebuilder:{{us-west-2}}:{{111122223333}}:component/{{my-component/1.0.0/1}}
      AmiWatermarks:
        - {{ProductionV1}}
        - {{team-alpha}}
```

只能在创建时设置该`AmiWatermarks`属性。由于图像配方是不可变的，因此更改水印需要新的配方版本。

有关该`AmiWatermarks`属性的更多信息，请参阅《*AWS CloudFormation 模板参考*》ImageRecipe中的[AWS::ImageBuilder::](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-imagebuilder-imagerecipe.html)。

------

## 查看现有食谱上的水印
<a name="ami-watermarks-view"></a>

您可以通过调用中的**get-image-recipe**命令来查看为配方配置的水印。 AWS CLI

```
aws imagebuilder get-image-recipe --image-recipe-arn arn:aws:imagebuilder:{{us-west-2}}:{{111122223333}}:image-recipe/{{my-watermarked-recipe}}/{{1.0.0}}
```

如果为该配方版本配置了水印，则响应将包含`amiWatermarks`数组。

## 注意事项
<a name="ami-watermarks-considerations"></a>

使用 AMI 水印时，请记住以下几点。
+ 来自源 AMI 的水印加配方中定义的水印组合在输出 AMI 上。总数不能超过 5。如果组合计数超过 5，则生成失败。
+ 如果您将带水印的 AMI 分发给其他地区或账户，则水印会自动传播。
+ Image Builder 会验证带水印的 AMI 在创建图像时是否未设置为公开。如果您的配方有水印（或者源 AMI 有水印），并且分发配置将启动权限设置为公开，则 Image Builder 会返回错误`InvalidParameterCombinationException`。