

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

# Image Builder 中的安全性
<a name="image-builder-security"></a>

云安全 AWS 是重中之重。作为 AWS 客户，您可以受益于专为满足大多数安全敏感型组织的要求而构建的数据中心和网络架构。

安全是双方共同承担 AWS 的责任。[责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)将其描述为云*的*安全性和云*中*的安全性：
+ **云安全** — AWS 负责保护在 AWS 云 AWS 服务 中运行的基础架构。 AWS 还为您提供可以安全使用的服务。作为[AWS 合规计划合规计划合规计划合](https://aws.amazon.com/compliance/programs/)的一部分，第三方审计师定期测试和验证我们安全的有效性。要了解适用于 EC2 Image Builder 的合规性计划，请参阅 内的[AWS 服务 服务合规性计划范围内](https://aws.amazon.com/compliance/services-in-scope/)的服务。
+ **云端安全**-您的责任由您使用的 AWS 服务决定。您还需要对其他因素负责，包括您的数据的敏感性、您公司的要求以及适用的法律法规。

此文档将帮助您了解如何在使用 Image Builder 时应用责任共担模型 以下主题说明如何配置 Image Builder 以实现您的安全性和合规性目标。您还将学习如何使用其他工具来监控和保护您 AWS 服务 的 Image Builder 资源。

**Topics**
+ [Image Builder 中的数据保护和责任 AWS 共担模型](data-protection.md)
+ [Image Builder 的 Identity and Access Management 集成](security-iam.md)
+ [Image Builder 的合规性验证](compliance.md)
+ [Image Builder 中的数据冗余和韧性](disaster-recovery-resiliency.md)
+ [Image Builder 中的基础设施安全性](infrastructure-security.md)
+ [Image Builder 映像的补丁管理](security-patch-management.md)
+ [Image Builder 的安全最佳实践](security-best-practices.md)

# Image Builder 中的数据保护和责任 AWS 共担模型
<a name="data-protection"></a>

责任共担模型 AWS [分担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于 EC2 Image Builder 中的数据保护。如本模型所述 AWS ，负责保护运行所有内容的全球基础架构 AWS 云。您负责维护对托管在此基础结构上的内容的控制。您还负责您所使用的 AWS 服务 的安全配置和管理任务。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq/)。有关欧洲数据保护的信息，请参阅 *AWS Security Blog* 上的 [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

出于数据保护目的，我们建议您保护 AWS 账户 凭证并使用 AWS IAM Identity Center 或 AWS Identity and Access Management (IAM) 设置个人用户。这样，每个用户只获得履行其工作职责所需的权限。还建议您通过以下方式保护数据：
+ 对每个账户使用多重身份验证（MFA）。
+ 用于 SSL/TLS 与 AWS 资源通信。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 使用设置 API 和用户活动日志 AWS CloudTrail。有关使用 CloudTrail 跟踪捕获 AWS 活动的信息，请参阅《*AWS CloudTrail 用户指南》*中的[使用跟 CloudTrail 踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解决方案以及其中的所有默认安全控件 AWS 服务。
+ 使用高级托管安全服务（例如 Amazon Macie），它有助于发现和保护存储在 Amazon S3 中的敏感数据。
+ 如果您在 AWS 通过命令行界面或 API 进行访问时需要经过 FIPS 140-3 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅《美国联邦信息处理标准（FIPS）第 140-3 版》[https://aws.amazon.com/compliance/fips/](https://aws.amazon.com/compliance/fips/)。

强烈建议您切勿将机密信息或敏感信息（如您客户的电子邮件地址）放入标签或自由格式文本字段（如**名称**字段）。这包括您 AWS 服务 使用控制台、API 或与 Image Builder 或其他人合作时 AWS SDKs。 AWS CLI在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于计费或诊断日志。如果您向外部服务器提供 URL，强烈建议您不要在网址中包含凭证信息来验证对该服务器的请求。

## Image Builder 中的加密和密钥管理
<a name="ib-encryption"></a>

默认情况下，Image Builder 使用服务拥有的 KMS 密钥对传输中数据和静态数据进行加密，但以下情况除外：
+ **自定义组件** – Image Builder 使用默认 KMS 密钥或服务拥有的 KMS 密钥对自定义组件进行加密。
+ **映像工作流** – 如果您在工作流创建期间指定密钥，Image Builder 可以使用客户托管密钥对映像工作流进行加密。Image Builder 使用您的密钥处理加密和解密，以运行您为映像配置的工作流。

您可以通过管理自己的密钥 AWS KMS。但是，您没有权限管理 Image Builder 拥有的 Image Builder KMS 密钥。有关使用管理 KMS 密钥的更多信息 AWS Key Management Service，请参阅 AWS Key Management Service 开发人员指南中的[入门](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html)。

**加密上下文**  
为了对加密数据进行额外的完整性和真实性检查，您可以选择在加密数据时包含[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)。使用加密上下文对资源进行加密时，会 AWS KMS 以加密方式将上下文绑定到密文。只有当请求者为上下文提供精确、区分大小写的匹配项时，才能对资源进行解密。

本节中的策略示例使用的加密上下文类似于 Image Builder 工作流资源的Amazon 资源名称（ARN）。

### 使用客户托管密钥加密映像工作流
<a name="ib-workflow-encrypt-cmk"></a>

要添加一层保护，您可以使用自己的客户托管密钥对 Image Builder 工作流资源进行加密。如果您使用客户托管密钥加密您创建的 Image Builder 工作流，则必须在密钥政策中授予 Image Builder 访问权限，以便其在加密和解密工作流资源时使用您的密钥。您可以随时撤销这些访问权限。但是，如果您撤销对密钥的访问权限，Image Builder 将无法访问任何已加密的工作流。

授予 Image Builder 访问权限以使用客户托管密钥的过程分为两个步骤，如下所示：

**步骤 1：为 Image Builder 工作流添加密钥政策权限**  
要使 Image Builder 能够在创建或使用工作流资源时对其进行加密和解密，必须在 KMS 密钥政策中指定权限。

此示例密钥政策授予了 Image Builder 管道访问权限，以在创建过程中加密工作流资源，并解密工作流资源以使用这些资源。该策略还向密钥管理员授予了访问权限。加密上下文和资源规范使用通配符来覆盖您拥有工作流资源的所有区域。

作为使用映像工作流的先决条件，您创建了一个 IAM 工作流执行角色，该角色向 Image Builder 授予运行工作流操作的权限。此处密钥政策示例中显示的第一条语句的主体必须指定您的 IAM 工作流执行角色。

有关客户托管密钥的更多信息，请参阅《AWS Key Management Service Developer Guide》**中的 [Managing access to customer managed keys](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)。

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

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Sid": "Allow access to build images with encrypted workflow",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::111122223333:role/YourImageBuilderExecutionRole"
			},
			"Action": [
				"kms:Decrypt",
				"kms:GenerateDataKey"
			],
			"Resource": "*",
			"Condition": {
				"StringLike": {
					"kms:EncryptionContext:aws:imagebuilder:arn": "arn:aws:imagebuilder:*:111122223333:workflow/*"
				}
			}
		},
		{
			"Sid": "Allow access for key administrators",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::111122223333:root"
			},
			"Action": [
				"kms:*"
			],
			"Resource": "arn:aws:kms:*:111122223333:key/*"
		}
	]
}
```

------

**步骤 2：授予对工作流执行角色的密钥访问权限**  
Image Builder 为运行工作流而担任的 IAM 角色需要获得使用客户托管密钥的权限。如果无法访问您的密钥，Image Builder 将无法用其来加密或解密您的工作流资源。

编辑工作流执行角色的策略以添加以下策略语句。

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

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Sid": "AllowAccessToWorkflowKey",
			"Effect": "Allow",
			"Action": [
				"kms:Decrypt",
				"kms:GenerateDataKey"
			],
			"Resource": "arn:aws:kms:us-west-2:111122223333:key/key_ID",
			"Condition": {
				"StringLike": {
					"kms:EncryptionContext:aws:imagebuilder:arn": "arn:aws:imagebuilder:*:111122223333:workflow/*"
				}
			}
		}
	]
}
```

------

### AWS CloudTrail 图像工作流程的事件
<a name="ib-workflow-cloudtrail-examples"></a>

以下示例显示了使用客户托管密钥存储的用于加密和解密图像工作流程的典型 AWS CloudTrail 条目。

**例如： GenerateDataKey**  
此示例显示了 Image Builder 从 Image Builder API 操作中调用 AWS KMS **GenerateDataKey** API 操作时 CloudTrail 的事件可能是什么样子。**CreateWorkflow**Image Builder 必须先对新的工作流进行加密，然后才能创建工作流资源。

```
{
	"eventVersion": "1.08",
	"userIdentity": {
		"type": "AssumedRole",
		"principalId": "PRINCIPALID1234567890:workflow-role-name",
		"arn": "arn:aws:sts::111122223333:assumed-role/Admin/workflow-role-name",
		"accountId": "111122223333",
		"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
		"sessionContext": {
			"sessionIssuer": {
				"type": "Role",
				"principalId": "PRINCIPALID1234567890",
				"arn": "arn:aws:iam::111122223333:role/Admin",
				"accountId": "111122223333",
				"userName": "Admin"
			},
			"webIdFederationData": {},
			"attributes": {
				"creationDate": "2023-11-21T20:29:31Z",
				"mfaAuthenticated": "false"
			}
		},
		"invokedBy": "imagebuilder.amazonaws.com"
	},
	"eventTime": "2023-11-21T20:31:03Z",
	"eventSource": "kms.amazonaws.com",
	"eventName": "GenerateDataKey",
	"awsRegion": "us-west-2",
	"sourceIPAddress": "imagebuilder.amazonaws.com",
	"userAgent": "imagebuilder.amazonaws.com",
	"requestParameters": {
		"encryptionContext": {
			"aws:imagebuilder:arn": "arn:aws:imagebuilder:us-west-2:111122223333:workflow/build/sample-encrypted-workflow/1.0.0/*",
			"aws-crypto-public-key": "key value"
		},
		"keyId": "arn:aws:kms:us-west-2:111122223333:alias/ExampleKMSKey",
		"numberOfBytes": 32
	},
	"responseElements": null,
	"requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
	"eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
	"readOnly": true,
	"resources": [
		{
			"accountId": "111122223333",
			"type": "AWS::KMS::Key",
			"ARN": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLEzzzzz"
		}
	],
	"eventType": "AwsApiCall",
	"managementEvent": true,
	"recipientAccountId": "111122223333",
	"eventCategory": "Management"
}
```

**示例：解密**  
此示例显示了 Image Builder 从 Image Builder API 操作中调用 AWS KMS **Decrypt** API 操作时 CloudTrail 的事件可能是什么样子。**GetWorkflow**Image Builder 管道需要先解密工作流资源，然后才能使用该资源。

```
{
	"eventVersion": "1.08",
	"userIdentity": {
		"type": "AssumedRole",
		"principalId": "PRINCIPALID1234567890:workflow-role-name",
		"arn": "arn:aws:sts::111122223333:assumed-role/Admin/workflow-role-name",
		"accountId": "111122223333",
		"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
		"sessionContext": {
			"sessionIssuer": {
				"type": "Role",
				"principalId": "PRINCIPALID1234567890",
				"arn": "arn:aws:iam::111122223333:role/Admin",
				"accountId": "111122223333",
				"userName": "Admin"
			},
			"webIdFederationData": {},
			"attributes": {
				"creationDate": "2023-11-21T20:29:31Z",
				"mfaAuthenticated": "false"
			}
		},
		"invokedBy": "imagebuilder.amazonaws.com"
	},
	"eventTime": "2023-11-21T20:34:25Z",
	"eventSource": "kms.amazonaws.com",
	"eventName": "Decrypt",
	"awsRegion": "us-west-2",
	"sourceIPAddress": "imagebuilder.amazonaws.com",
	"userAgent": "imagebuilder.amazonaws.com",
	"requestParameters": {
		"keyId": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLEzzzzz",
		"encryptionAlgorithm": "SYMMETRIC_DEFAULT",
		"encryptionContext": {
			"aws:imagebuilder:arn": "arn:aws:imagebuilder:us-west-2:111122223333:workflow/build/sample-encrypted-workflow/1.0.0/*",
			"aws-crypto-public-key": "ABC123def4567890abc12345678/90dE/F123abcDEF+4567890abc123D+ef1=="
		}
	},
	"responseElements": null,
	"requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
	"eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
	"readOnly": true,
	"resources": [
		{
			"accountId": "111122223333",
			"type": "AWS::KMS::Key",
			"ARN": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLEzzzzz"
		}
	],
	"eventType": "AwsApiCall",
	"managementEvent": true,
	"recipientAccountId": "111122223333",
	"eventCategory": "Management"
}
```

## Image Builder 中的数据存储
<a name="ib-data-storage"></a>

Image Builder 不会在服务中存储您的任何日志。所有日志保存在用于生成映像的 Amazon EC2 实例上或 Systems Manager 自动化日志中。

## Image Builder 中的互联网络流量隐私
<a name="image-builder-internetwork"></a>

通过 HTTPS 保护 Image Builder 与本地位置之间、 AWS 区域 AZs 内部以及 AWS 区域之间的连接。在账户之间没有直接连接。

# Image Builder 的 Identity and Access Management 集成
<a name="security-iam"></a>

**Topics**
+ [受众](#security-iam-audience)
+ [使用身份进行身份验证](#security-iam-authentication)
+ [Image Builder 如何与 IAM 策略和角色配合使用](security_iam_service-with-iam.md)
+ [在 Image Builder 中管理 S3 存储桶下载权限的数据边界](security-iam-data-perimeter.md)
+ [Image Builder 基于身份的策略](security-iam-identity-based-policies.md)
+ [自定义工作流程的 IAM 权限](#security-iam-custom-workflows)
+ [Image Builder 基于资源的策略](#security-iam-resource-based-policies)
+ [为 EC2 Image Builder 使用 AWS 托管策略](security-iam-awsmanpol.md)
+ [使用 Image Builder 的 IAM 服务相关角色](image-builder-service-linked-role.md)
+ [Image Builder 中的 IAM 问题疑难解答](security_iam_troubleshoot.md)

## 受众
<a name="security-iam-audience"></a>

您的使用方式 AWS Identity and Access Management (IAM) 因您的角色而异：
+ **服务用户**：如果您无法访问功能，请从管理员处请求权限（请参阅[Image Builder 中的 IAM 问题疑难解答](security_iam_troubleshoot.md)）
+ **服务管理员**：确定用户访问权限并提交权限请求（请参阅[Image Builder 如何与 IAM 策略和角色配合使用](security_iam_service-with-iam.md)）
+ **IAM 管理员**：编写用于管理访问权限的策略（请参阅[Image Builder 基于身份的策略](security_iam_service-with-iam.md#security_iam_id-based-policy-examples)）

## 使用身份进行身份验证
<a name="security-iam-authentication"></a>

有关如何为你的用户和流程提供身份验证的详细信息 AWS 账户，请参阅 *IAM 用户指南*中的[身份](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

# Image Builder 如何与 IAM 策略和角色配合使用
<a name="security_iam_service-with-iam"></a>

在使用 IAM 管理对 Image Builder 的访问之前，您应该了解哪些 IAM 功能可用于 Image Builder。

要全面了解 Image Builder 和其他 AWS 服务如何与大多数 IAM 功能配合使用，请参阅 [IAM *用户指南中与 IAM* 配合使用的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## Image Builder 的基于身份的策略
<a name="security_iam_service-with-iam-id-based-policies"></a>

**支持基于身份的策略：**是

基于身份的策略是可附加到身份（如 IAM 用户、用户组或角色）的 JSON 权限策略文档。这些策略控制用户和角色可在何种条件下对哪些资源执行哪些操作。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

通过使用 IAM 基于身份的策略，您可以指定允许或拒绝的操作和资源以及允许或拒绝操作的条件。要了解可在 JSON 策略中使用的所有元素，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素引用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

### Image Builder 的基于身份的策略示例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



要查看 Image Builder 基于身份的策略的示例，请参阅 [Image Builder 基于身份的策略](#security_iam_id-based-policy-examples)。

## Image Builder 内基于资源的策略
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**支持基于资源的策略：**是

基于资源的策略是附加到资源的 JSON 策略文档。基于资源的策略的示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。对于在其中附加策略的资源，策略定义指定主体可以对该资源执行哪些操作以及在什么条件下执行。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。委托人可以包括账户、用户、角色、联合用户或 AWS 服务。

要启用跨账户访问，您可以将整个账户或其他账户中的 IAM 实体指定为基于资源的策略中的主体。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## Image Builder 的策略操作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**支持策略操作：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。在策略中包含操作以授予执行关联操作的权限。



要查看 Image Builder 操作的列表，请参阅*服务授权参考*中的 [EC2 Image Builder 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2imagebuilder.html#amazonec2imagebuilder-actions-as-permissions)。

Image Builder 中的策略操作在操作前使用以下前缀：

```
imagebuilder
```

要在单个语句中指定多项操作，请使用逗号将它们隔开。

```
"Action": [
	"imagebuilder:action1",
	"imagebuilder:action2"
	]
```





要查看 Image Builder 基于身份的策略的示例，请参阅 [Image Builder 基于身份的策略](#security_iam_id-based-policy-examples)。

## Image Builder 的策略资源
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**支持策略资源：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符 (\$1) 指示语句应用于所有资源。

```
"Resource": "*"
```

要查看 Image Builder 资源类型及其列表 ARNs，请参阅《*服务授权参考*[》中的 EC2 Image Builder 定义的资源](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2imagebuilder.html#amazonec2imagebuilder-resources-for-iam-policies)。要了解您可以在哪些操作中指定每个资源的 ARN，请参阅 [EC2 Image Builder 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2imagebuilder.html#amazonec2imagebuilder-actions-as-permissions)。

要查看 Image Builder 基于身份的策略的示例，请参阅 [Image Builder 基于身份的策略](#security_iam_id-based-policy-examples)。

## Image Builder 的策略条件键
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**支持特定于服务的策略条件键：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Condition` 元素根据定义的条件指定语句何时执行。您可以创建使用[条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)（例如，等于或小于）的条件表达式，以使策略中的条件与请求中的值相匹配。要查看所有 AWS 全局条件键，请参阅 *IAM 用户指南*中的[AWS 全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

有关 Image Builder 条件键的列表，请参阅*服务授权参考*中的 [EC2 Image Builder 的条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2imagebuilder.html#amazonec2imagebuilder-policy-keys)。要了解您可以对哪些操作和资源使用条件键，请参阅 [ EC2 Image Builder 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2imagebuilder.html#amazonec2imagebuilder-actions-as-permissions)。

要查看 Image Builder 基于身份的策略的示例，请参阅 [Image Builder 基于身份的策略](#security_iam_id-based-policy-examples)。

## ACLs 在 Image Builder 中
<a name="security_iam_service-with-iam-acls"></a>

**支持 ACLs：**否 

访问控制列表 (ACLs) 控制哪些委托人（账户成员、用户或角色）有权访问资源。 ACLs 与基于资源的策略类似，尽管它们不使用 JSON 策略文档格式。

## 使用 Image Builder 进行 ABAC
<a name="security_iam_service-with-iam-tags"></a>

**支持 ABAC（策略中的标签）：**部分支持

基于属性的访问权限控制（ABAC）是一种授权策略，该策略基于称为标签的属性来定义权限。您可以将标签附加到 IAM 实体和 AWS 资源，然后设计 ABAC 策略以允许在委托人的标签与资源上的标签匹配时进行操作。

要基于标签控制访问，您需要使用 `aws:ResourceTag/key-name``aws:RequestTag/key-name` 或 `aws:TagKeys` 条件键在策略的[条件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供标签信息。

如果某个服务对于每种资源类型都支持所有这三个条件键，则对于该服务，该值为**是**。如果某个服务仅对于部分资源类型支持所有这三个条件键，则该值为**部分**。

有关 ABAC 的更多信息，请参阅《IAM 用户指南》**中的[使用 ABAC 授权定义权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。要查看设置 ABAC 步骤的教程，请参阅《IAM 用户指南》**中的[使用基于属性的访问权限控制（ABAC）](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)。

## 将临时凭证用于 Image Builder
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**支持临时凭证：**是

临时证书提供对 AWS 资源的短期访问权限，并且是在您使用联合身份或切换角色时自动创建的。 AWS 建议您动态生成临时证书，而不是使用长期访问密钥。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)和[使用 IAM 的。AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)

## Image Builder 的跨服务主体权限
<a name="security_iam_service-with-iam-principal-permissions"></a>

**支持转发访问会话（FAS）：**是

 转发访问会话 (FAS) 使用调用主体的权限 AWS 服务，再加上 AWS 服务 向下游服务发出请求的请求。有关发出 FAS 请求时的策略详情，请参阅[转发访问会话](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。

## Image Builder 的服务角色
<a name="security_iam_service-with-iam-roles-service"></a>

**支持服务角色：**是

 服务角色是由一项服务担任、代表您执行操作的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息，请参阅《IAM 用户指南》**中的[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**警告**  
更改服务角色的权限可能会破坏 Image Builder 的功能。仅当 Image Builder 提供相关指导时才编辑服务角色。

## Image Builder 的服务相关角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**支持服务关联角色：**是

 服务相关角色是一种链接到的服务角色。 AWS 服务服务可以代入代表您执行操作的角色。服务相关角色出现在您的中 AWS 账户 ，并且归服务所有。IAM 管理员可以查看但不能编辑服务关联角色的权限。

有关服务相关角色的详细信息，请参阅 [使用 Image Builder 的 IAM 服务相关角色](image-builder-service-linked-role.md)。

## Image Builder 基于身份的策略
<a name="security_iam_id-based-policy-examples"></a>

通过使用 IAM 基于身份的策略，您可以指定允许或拒绝的操作和资源，以及允许或拒绝操作的条件。Image Builder 支持特定的操作、资源和条件键。有关在 JSON 策略中使用的所有元素的相关信息，请参阅*《IAM 用户指南》*中的 [Amazon EC2 Image Builder 的操作、资源和条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonec2imagebuilder.html)。

### 操作
<a name="sec-iam-ib-id-based-policies-actions"></a>

Image Builder 中的策略操作在操作前使用以下前缀：`imagebuilder:`。策略语句必须包含 `Action` 或 `NotAction` 元素。Image Builder 定义了一组自己的操作，以描述您可以使用该服务执行的任务。

要在单个语句中指定多项操作，请使用逗号将它们隔开，如下所示：

```
"Action": [
	"imagebuilder:action1",
	"imagebuilder:action2"
]
```

您也可以使用通配符 （\$1) 指定多个操作。例如，要指定以单词 `List` 开头的所有操作，包括以下操作：

```
"Action": "imagebuilder:List*"
```

要查看 Image Builder 操作的列表，请参阅 *IAM 用户指南* 中的 [AWS 服务的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)。

### 使用策略管理访问
<a name="security-iam-manage-access"></a>

有关如何 AWS 通过创建策略并将其关联到 IAM 身份或 AWS 资源来管理中的访问权限的详细信息，请参阅 I *AM 用户指南*中的[策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。

与实例配置文件关联的 IAM 角色必须有权运行映像中包含的生成和测试组件。必须将以下 IAM 角色策略附加到与实例配置文件关联的 IAM 角色：
+ EC2InstanceProfileForImageBuilder
+ EC2InstanceProfileForImageBuilderECRContainerBuilds
+ AmazonSSMManagedInstanceCore

### 资源
<a name="sec-iam-ib-id-based-policies-resources"></a>

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符 (\$1) 指示语句应用于所有资源。

```
"Resource": "*"
```

ARN 由多个节点组成，这些节点有助于识别资源并确保名称的唯一性。名称中的最后一个节点包括资源类型、名称和 ID 格式的多种变体。Image Builder 创建资源时，它使用以下格式：

`arn:aws:imagebuilder:region:owner:resource-type/resource-name/version/build-version`

**注意**  
编译版本并不总是包含在资源 ARN 中。但是，某些 API 操作（例如 [GetComponent](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_GetComponent.html)）需要编译版本来唯一标识要检索的资源。

对于 Image Builder 在其配方中使用的资源（例如基础映像或组件），所有者节点可以是以下节点之一：
+ 资源所有者的账号
+ 对于 Amazon 托管资源：`aws`
+ 有关 AWS Marketplace 资源：`aws-marketplace`

以下示例显示了在 Linux 上安装 Amazon CloudWatch 代理的托管组件的 ARN：

```
arn:aws:imagebuilder:us-east-1:aws:component/amazon-cloudwatch-agent-linux/1.0.1/1
```

此示例显示了来自以下内容的虚构托管组件的 ARN： AWS Marketplace

```
arn:aws:imagebuilder:us-east-1:aws-marketplace:component/example-linux-software-component/1.0.1
```

有关获取组件列表（包括使用所有权筛选器）的更多信息，请参阅[列出 Image Builder 组件](component-details.md#list-components)。

**示例 ARNs**  
以下是您可以在 IAM 策略中指定的资源 ARNs 的一些示例：
+ 实例 ARN

  ```
  "Resource": "arn:aws:imagebuilder:us-east-1:111122223333:instance/i-1234567890abcdef0"
  ```
+ 通配符 (\$1) 示例，用于指定给定账户的所有实例

  ```
  "Resource": "arn:aws:imagebuilder:us-east-1:111122223333:instance/*"
  ```
+ 通配符 (\$1) 示例，用于指定托管图像工作流程的所有版本

  ```
  "Resource": "arn:aws:imagebuilder:us-east-1:aws:workflow/build/build-image/*"
  ```
+ 托管映像 ARN

  ```
  "Resource": "arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2-arm64/2024.12.17/1"
  ```
+ 通配符 (\$1) 示例，用于指定托管映像的所有版本

  ```
  "Resource": "arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2-arm64/x.x.x"
  ```

许多 EC2 Image Builder API 操作涉及多种资源。要在单个语句中指定多个资源，请 ARNs 用逗号分隔。

```
"Resource": [
	  "resource1",
	  "resource2"
]
```

### 条件键
<a name="sec-iam-ib-id-based-policies-conditionkeys"></a>

Image Builder 提供特定于服务的条件键，并支持使用某些全局条件键。要查看所有 AWS 全局条件键，请参阅 *IAM 用户指南*中的[AWS 全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。提供以下特定于服务的条件键。

#### imagebuilder：CreatedResourceTagKeys
<a name="image-builder-security-createdresourcetagkeys"></a>

与[字符串运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)结合使用。

使用此键可以根据请求中是否存在标签键来筛选访问。这允许您管理 Image Builder 创建的资源。

**可用性**-此密钥仅适用于`CreateInfrastrucutreConfiguration`和`UpdateInfrastructureConfiguration` APIs。

#### imagebuilder:/CreatedResourceTag<key>
<a name="image-builder-security-createdresourcetag"></a>

与[字符串运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)结合使用。

使用此键可按附加到 Image Builder 创建的资源的标签键值对来筛选访问。这允许您通过定义的标签来管理 Image Builder 资源。

**可用性**-此密钥仅适用于`CreateInfrastrucutreConfiguration`和`UpdateInfrastructureConfiguration` APIs。

#### imagebuilder：LifecyclePolicyResourceType
<a name="image-builder-security-lifecyclepolicyresourcetype"></a>

与[字符串运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)结合使用。

使用此密钥按请求中指定的生命周期资源类型筛选访问权限。

此键的值可以是`AMI_IMAGE`或`CONTAINER_IMAGE`。

**可用性**-此密钥仅适用于`CreateLifecyclePolicy`和`UpdateLifecyclePolicy`APIs。

#### ImageBuilder: EC2 MetadataHttpTokens
<a name="image-builder-security-ec2metadatatokens"></a>

与[字符串运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)结合使用。

使用此键可按请求中指定的 EC2 实例元数据 HTTP Token Requirement 来筛选访问。

此键的值可以是 `optional` 或 `required`。

**可用性**-此密钥仅适用于`CreateInfrastrucutreConfiguration`和`UpdateInfrastructureConfiguration` APIs。

#### imagebuilder：StatusTopicArn
<a name="image-builder-security-statustopicarn"></a>

与[字符串运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)结合使用。

使用此键可按将发布终端状态通知的请求中的 SNS Topic ARN 来筛选访问。

**可用性**-此密钥仅适用于`CreateInfrastrucutreConfiguration`和`UpdateInfrastructureConfiguration` APIs。

### 示例
<a name="sec-iam-ib-id-based-policies-examples"></a>



要查看 Image Builder 基于身份的策略的示例，请参阅 [Image Builder 基于身份的策略](security-iam-identity-based-policies.md)。

## Image Builder 基于资源的策略
<a name="security-iam-service-with-ib-resource-based-policies"></a>

基于资源的策略指定了指定主体可在 Image Builder 资源上执行的操作以及在什么条件下可执行。Image Builder 支持针对组件、映像和映像配方的基于资源的权限策略。基于资源的策略允许您基于资源向其他账户授予使用权限。您还可以使用基于资源的策略来允许 AWS 服务访问您的组件、图像和图像配方。

要了解如何将基于资源的策略附加到组件、映像或映像配方，请参阅 [与共享 Image Builder 资源 AWS RAM](manage-shared-resources.md)。

**注意**  
在使用 Image Builder 更新资源策略时，更新将显示在 RAM 控制台中。

## 基于 Image Builder 标签的授权
<a name="security-iam-service-with-ib-tags"></a>

您可以将标签附加到 Image Builder 资源或将请求中的标签传递到 Image Builder。要基于标签控制访问，您需要使用 `imagebuilder:ResourceTag/key-name``aws:RequestTag/key-name` 或 `aws:TagKeys` 条件键在策略的[条件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供标签信息。有关标记 Image Builder 资源的更多信息，请参阅 [标记来自的资源 AWS CLI](tag-resources.md#cli-tag-resource)。

## Image Builder IAM 角色
<a name="security-iam-service-with-ib-roles"></a>

I [AM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)是您内部具有特定权限 AWS 账户 的实体。

### 将临时凭证用于 Image Builder
<a name="security-iam-service-with-ib-roles-tempcreds"></a>

可以使用临时凭证进行联合身份验证登录，分派 IAM 角色或分派跨账户角色。您可以通过调用[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)或之类的 AWS STS API 操作来获取临时安全证书[GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html)。

### 服务关联角色
<a name="sec-iam-ib-service-linked-roles"></a>

[服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role) AWS 服务 允许访问其他服务中的资源以代表您完成操作。服务关联角色显示在 IAM 账户中，并归该服务所有。具有管理员访问权限的用户可以查看但不能编辑服务相关角色的权限。

Image Builder 支持服务相关角色。有关创建或管理 Image Builder 服务相关角色的信息，请参阅 [使用 Image Builder 的 IAM 服务相关角色](image-builder-service-linked-role.md)。

### 服务角色
<a name="sec-iam-ib-service-roles"></a>

此功能允许服务代表您担任[服务角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role)。此角色允许服务访问其他服务中的资源以代表您完成操作。服务角色显示在 IAM 账户中，并归该账户所有。这意味着具有管理员访问权限的用户可以更改此角色的权限。但是，这样做可能会中断服务的功能。

# 在 Image Builder 中管理 S3 存储桶下载权限的数据边界
<a name="security-iam-data-perimeter"></a>

EC2 Image Builder 维护两类 AWS 服务自有的 S3 存储桶，其中包含在您的账户中运行 Image Builder 工作负载所需的可下载资源。如果您使用数据边界来控制环境中对 Amazon S3 的访问，则可能需要明确允许访问这些存储桶。您可以使用存储桶 ARN 或存储桶 URL 将这些存储桶列入许可名单，具体取决于您如何控制对 Amazon S3 的访问权限。

**组件管理引导脚本（必填）**  
此 S3 存储桶包含用于在用于创建映像的 EC2 实例上设置 AWSTOE 应用程序的引导脚本。Image Builder 需要下载脚本才能支持新映像的构建和测试。  
+ **S3 存储桶 ARN：**`arn:<AWS partition>:s3:::ec2imagebuilder-managed-resources-<AWS Region>-prod`
+ **S3 存储桶网址：**`https://ec2imagebuilder-managed-resources-<AWS Region>.s3.<AWS Region>.<AWS partition-specific domain name>`

**托管组件**  
此 S3 存储桶包含 Amazon 托管组件的包有效负载。Image Builder 需要访问权限才能下载配方中配置的所有托管组件。  
+ **S3 存储桶 ARN：**`arn:<AWS partition>:s3:::ec2imagebuilder-toe-<AWS Region>-prod`
+ **S3 存储桶网址：**`https://ec2imagebuilder-toe-<AWS Region>.s3.<AWS Region>.<AWS partition-specific domain name>`

# Image Builder 基于身份的策略
<a name="security-iam-identity-based-policies"></a>

**Topics**
+ [基于身份的策略最佳实践](#security-iam-service-policy-best-practices)
+ [使用 Image Builder 控制台](#sec-iam-id-based-policies-using-console)

## 基于身份的策略最佳实践
<a name="security-iam-service-policy-best-practices"></a>

基于身份的策略确定某个人是否可以创建、访问或删除您账户中的 Image Builder 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时，请遵循以下指南和建议：
+ **开始使用 AWS 托管策略并转向最低权限权限** — 要开始向用户和工作负载授予权限，请使用为许多常见用例授予权限的*AWS 托管策略*。它们在你的版本中可用 AWS 账户。我们建议您通过定义针对您的用例的 AWS 客户托管策略来进一步减少权限。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[工作职能的AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **应用最低权限**：在使用 IAM 策略设置权限时，请仅授予执行任务所需的权限。为此，您可以定义在特定条件下可以对特定资源执行的操作，也称为*最低权限许可*。有关使用 IAM 应用权限的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 策略中的条件进一步限制访问权限**：您可以向策略添加条件来限制对操作和资源的访问。例如，您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果服务操作是通过特定的方式使用的，则也可以使用条件来授予对服务操作的访问权限 AWS 服务，例如 CloudFormation。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 验证您的 IAM 策略，以确保权限的安全性和功能性**：IAM Access Analyzer 会验证新策略和现有策略，以确保策略符合 IAM 策略语言（JSON）和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议，以帮助您制定安全且功能性强的策略。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM Access Analyzer 验证策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重身份验证 (MFA**)-如果 AWS 账户您的场景需要 IAM 用户或根用户，请启用 MFA 以提高安全性。若要在调用 API 操作时需要 MFA，请将 MFA 条件添加到您的策略中。有关更多信息，请参阅《IAM 用户指南》**中的[使用 MFA 保护 API 访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

有关 IAM 中的最佳实操的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 使用 Image Builder 控制台
<a name="sec-iam-id-based-policies-using-console"></a>

要访问 EC2 Image Builder 控制台，您必须拥有一组最低的权限。这些权限允许您列出和查看有关您的  AWS 账户 中的 Image Builder 资源的详细信息。如果您创建的基于身份的策略比所需的最低权限更严格，则无法为具有该策略的实体（IAM 用户或角色）正常运行控制台。

为确保您的 IAM 实体可以使用 Image Builder 控制台，您必须为其附加以下 AWS 托管策略之一：
+ [AWSImageBuilderReadOnlyAccess 策略](security-iam-awsmanpol.md#sec-iam-manpol-AWSImageBuilderReadOnlyAccess)
+ [AWSImageBuilderFullAccess 策略](security-iam-awsmanpol.md#sec-iam-manpol-AWSImageBuilderFullAccess)

有关 Image Builder 托管策略的更多信息，请参阅 [为 EC2 Image Builder 使用 AWS 托管策略](security-iam-awsmanpol.md)。

**重要**  
**AWSImageBuilderFullAccess** 策略是创建 Image Builder 服务相关角色所必需的。将此策略附加到 IAM 实体时，您还必须附加以下自定义策略，并包含要使用的资源（该资源的名称中不含 `imagebuilder`）：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": "arn:aws:sns:*:*:*imagebuilder*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetInstanceProfile"
            ],
            "Resource": "arn:aws:iam::*:instance-profile/*imagebuilder*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::*:instance-profile/*imagebuilder*",
                "arn:aws:iam::*:role/*imagebuilder*"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "ec2.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3::*:*imagebuilder*"
        }
    ]
}
```

------

对于仅调用 AWS CLI 或 AWS API 的用户，您无需为其设置最低控制台权限。相反，只允许访问与您尝试执行的 API 操作相匹配的操作。

## 自定义工作流程的 IAM 权限
<a name="security-iam-custom-workflows"></a>

使用带有特定步骤操作的自定义工作流程时[RegisterImage](wfdoc-step-actions.md#wfdoc-step-action-register-image)，除了标准的 Image Builder 托管策略之外，可能需要其他 IAM 权限。本节介绍自定义工作流程步骤操作所需的其他权限。

### RegisterImage 步骤操作权限
<a name="security-iam-registerimage-permissions"></a>

该`RegisterImage`步骤操作需要特定的 Amazon EC2 权限才能注册AMIs 和可选地检索快照标签。使用`includeSnapshotTags`参数时，需要额外的权限来描述快照。

** RegisterImage 步骤操作所需的权限：**

对于所有资源，允许执行以下操作：
+ `ec2:RegisterImage`
+ `ec2:DescribeSnapshots`

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:RegisterImage",
                "ec2:DescribeSnapshots"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*::image/*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RegisterImage"
                }
            }
        }
    ]
}
```

**权限详情：**
+ `ec2:RegisterImage`-需要 AMIs 从快照中注册新快照
+ `ec2:DescribeSnapshots`-使用检索快照标签`includeSnapshotTags: true`以与 AMI 标签合并时必填项
+ `ec2:CreateTags`-需要对注册的 AMI 应用标签，包括 Image Builder 默认标签和合并的快照标签

**注意**  
该`ec2:DescribeSnapshots`权限仅在`includeSnapshotTags`参数设置为时使用`true`。如果您不使用此功能，则可以省略此权限。

**标签合并行为：**

`includeSnapshotTags`启用后， RegisterImage 步骤操作将：
+ 从块储存设备映射中指定的第一个快照中检索标签
+ 排除任何 AWS 保留的标签（密钥以 “aws:” 开头的标签）
+ 将快照标签与映像生成器的默认 AMI 注册标签合并
+ 当标签键发生冲突时，优先使用 Image Builder 标签

## Image Builder 基于资源的策略
<a name="security-iam-resource-based-policies"></a>

有关如何创建组件的信息，请参阅 [使用组件自定义 Image Builder 映像](manage-components.md)。

### 限制 Image Builder 组件访问特定的 IP 地址
<a name="sec-iam-resourcepol-restrict-component-by-ip"></a>

以下示例为任何用户授予权限以对组件执行任何 Image Builder 操作。但是，请求必须来自条件中指定的 IP 地址范围。

此语句中的条件标识了允许的互联网协议版本 4 (IPv4) IP 地址的 54.240.143.\$1 范围，但有一个例外：54.240.143.188。

该`Condition`块使用`IpAddress`和`NotIpAddress`条件和`aws:SourceIp`条件键，后者是一个 AWS宽范围的条件键。有关这些条件键的更多信息，请参阅[在策略中指定条件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html)。这些`aws:sourceIp` IPv4 值使用标准 CIDR 表示法。有关更多信息，请参阅 *《IAM 用户指南》*中的 [IP 地址条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_IPAddress)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "IBPolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Action": "imagebuilder:GetComponent",
      "Resource": "arn:aws:imagebuilder:*::examplecomponent/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
         "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} 
      } 
    } 
  ]
}
```

------

# 为 EC2 Image Builder 使用 AWS 托管策略
<a name="security-iam-awsmanpol"></a>

 AWS 托管策略是由创建和管理的独立策略 AWS。 AWS 托管策略旨在为许多常见用例提供权限，以便您可以开始为用户、组和角色分配权限。

请记住， AWS 托管策略可能不会为您的特定用例授予最低权限权限，因为它们可供所有 AWS 客户使用。我们建议通过定义特定于使用案例的[客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)来进一步减少权限。

您无法更改 AWS 托管策略中定义的权限。如果 AWS 更新 AWS 托管策略中定义的权限，则更新会影响该策略所关联的所有委托人身份（用户、组和角色）。 AWS 最有可能在启动新的 API 或现有服务可以使用新 AWS 服务 的 API 操作时更新 AWS 托管策略。

有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## AWSImageBuilderFullAccess 策略
<a name="sec-iam-manpol-AWSImageBuilderFullAccess"></a>

该 **AWSImageBuilderFullAccess** 策略授予所附加角色对 Image Builder 资源的完全访问权限，允许该角色列出、描述、创建、更新和删除 Image Builder 资源。该策略还向相关 AWS 服务 人员授予所需的定向权限，例如验证资源或在中显示账户的当前资源 AWS 管理控制台。

### 权限详细信息
<a name="sec-iam-manpol-AWSImageBuilderFullAccess-details"></a>

该策略包含以下权限：
+ **Image Builder** – 授予管理权限，使该角色可以列出、描述、创建、更新和删除 Image Builder 资源。
+ **Amazon EC2** – 授予 Amazon EC2 Describe 操作的访问权限，这些操作是验证资源是否存在或获取属于账户的资源列表所必需的。
+ **IAM** – 授予访问权限以获取和使用名称包含“imagebuilder”的实例配置文件，通过 `iam:GetRole` API 操作验证 Image Builder 服务相关角色是否存在，以及创建 Image Builder 服务相关角色。
+ **License Manager** – 授予访问权限，以列出资源的许可证配置或许可证。
+ **Amazon S3** – 授予访问权限，以列出属于该账户的存储桶，以及名称中带有“imagebuilder”的 Image Builder 存储桶。
+ **Amazon SNS** – 向 Amazon SNS 授予写入权限，以验证包含“imagebuilder”的主题的主题所有权。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSImageBuilderFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSImageBuilderFullAccess.html)**。

## AWSImageBuilderReadOnlyAccess 策略
<a name="sec-iam-manpol-AWSImageBuilderReadOnlyAccess"></a>

**AWSImageBuilderReadOnlyAccess** 策略提供对所有 Image Builder 资源的只读访问权限。授予权限以通过 `iam:GetRole` API 操作验证 Image Builder 服务相关角色是否存在。

### 权限详细信息
<a name="sec-iam-manpol-AWSImageBuilderReadOnlyAccess-details"></a>

该策略包含以下权限：
+ **Image Builder** – 授予对 Image Builder 资源的只读访问权限。
+ **IAM** – 授予访问权限，以通过 `iam:GetRole` API 操作验证 Image Builder 服务相关角色是否存在。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSImageBuilderReadOnlyAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSImageBuilderReadOnlyAccess.html)**。

## AWSServiceRoleForImageBuilder 策略
<a name="sec-iam-manpol-AWSServiceRoleForImageBuilder"></a>

该**AWSServiceRoleForImageBuilder**政策允许 Image Builder AWS 服务 代表您致电。

### 权限详细信息
<a name="sec-iam-manpol-AWSServiceRoleForImageBuilder-details"></a>

通过 Systems Manager 创建 Image Builder 服务相关角色时，该策略将附加到该角色。有关 Image Builder 服务相关角色的更多信息，请参阅 [使用 Image Builder 的 IAM 服务相关角色](image-builder-service-linked-role.md)。

此策略包含以下权限：
+ **CloudWatch 日志**-授予创建 CloudWatch 日志并将其上传到名称以开头的任何日志组的访问权限`/aws/imagebuilder/`。
+ **Amazon EC2** — Image Builder 有权创建、拍摄快照和注册其创建的映像 (AMI)，并在您的账户中启动 EC2 实例。Image Builder 会根据需要使用相关的快照、卷、网络接口、子网、安全组、许可证配置和密钥对，前提是正在创建或使用的映像、实例和卷标有`CreatedBy: EC2 Image Builder`或`CreatedBy: EC2 Fast Launch`。

  Image Builder 可以获取以下有关信息：Amazon EC2 映像、实例属性、实例状态、账户可用的实例类型、启动模板、子网、主机和 Amazon EC2 资源上的标签。

  Image Builder 可以更新映像设置，以启用或禁用账户中的 Windows 实例快速启动（其中映像标有 `CreatedBy: EC2 Image Builder`）。

  此外，Image Builder 可以启动、停止和终止账户中运行的实例，还可以共享 Amazon EBS 快照、创建和更新映像和启动模板，注销现有映像，添加标签，以及在您通过 **Ec2ImageBuilderCrossAccountDistributionAccess** 策略授予权限的账户之间复制映像。如前所述，所有这些操作都需要使用 Image Builder 标记。
+ **Amazon ECR** – 向 Image Builder 授予访问权限，在需要进行容器映像漏洞扫描时创建存储库，并为其创建的资源添加标签，以限制其操作范围。Image Builder 还被授予访问权限，以在获取漏洞快照后删除其为扫描创建的容器映像。
+ **EventBridge**— 授予 Image Builder 创建和管理 EventBridge 规则的权限。
+ **IAM** – 向 Image Builder 授予访问权限，以将您账户中的任意角色传递给 Amazon EC2 和 VM Import/Export。
+ **Amazon Inspector** – 向 Image Builder 授予访问权限，以确定 Amazon Inspector 何时完成构建实例扫描，并收集配置为允许扫描的映像的结果。
+ **AWS KMS**：向 Amazon EBS 授予访问权限，以加密、解密或重新加密 Amazon EBS 卷。这一点非常重要，可以确保当 Image Builder 构建映像时，加密卷能够正常工作。
+ **License Manager** – 向 Image Builder 授予访问权限，以通过 `license-manager:UpdateLicenseSpecificationsForResource` 更新 License Manager 规格。
+ **Amazon SNS** – 向账户中的任何 Amazon SNS 主题都授予写入权限。
+ **Systems Manager** – 向 Image Builder 授予访问权限，以列出 Systems Manager 命令及其调用、清单条目、描述实例信息和自动执行状态、描述提供实例放置支持的主机，并获取命令调用详细信息。Image Builder 还可以发送自动化信号，并停止对账户中任意资源的自动化执行。

  Image Builder 能够向标记为 `"CreatedBy": "EC2 Image Builder"` 的任何实例发出运行命令调用，用于以下脚本文件：`AWS-RunPowerShellScript`、`AWS-RunShellScript` 和 `AWSEC2-RunSysprep`。Image Builder 能够在账户中启动 Systems Manager 自动化执行，用于名称以 `ImageBuilder` 开头的自动化文档。

  Image Builder 还可以在账户中为任何实例创建或删除状态管理器关联（只要关联文档为 `AWS-GatherSoftwareInventory`），并且可以在账户中创建 Systems Manager 服务相关角色。

  Image Builder 能够读取公共参数存储参数，并读取和更新前缀为的私有参数，`/imagebuilder/`这样它就可以使用 Image Builder 从新版本中创建的输出 AMI IDs 来更新参数值。
+ **AWS STS**：向 Image Builder 授予访问权限，以将账户中名为 **EC2ImageBuilderDistributionCrossAccountRole** 的角色带入任何账户，前提是该角色的信任策略允许代入。这可用于跨账户映像分配。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSServiceRoleForImageBuilder.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSServiceRoleForImageBuilder.html)**。

## Ec2ImageBuilderCrossAccountDistributionAccess 策略
<a name="sec-iam-manpol-Ec2ImageBuilderCrossAccountDistributionAccess"></a>

该 **Ec2ImageBuilderCrossAccountDistributionAccess** 策略向 Image Builder 授予权限，以在目标区域跨账户分配映像。此外，Image Builder 能够描述、复制和应用标签到账户中的任何 Amazon EC2 映像。该策略还允许通过 `ec2:ModifyImageAttribute` API 操作修改 AMI 权限。

### 权限详细信息
<a name="sec-iam-manpol-Ec2ImageBuilderCrossAccountDistributionAccess-details"></a>

该策略包含以下权限：
+ **Amazon EC2** – 向 Amazon EC2 授予访问权限，以描述、复制和修改映像的属性，以及为账户中的任何 Amazon EC2 映像创建标签。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/Ec2ImageBuilderCrossAccountDistributionAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/Ec2ImageBuilderCrossAccountDistributionAccess.html)**。

## EC2ImageBuilderLifecycleExecutionPolicy 策略
<a name="sec-iam-manpol-EC2ImageBuilderLifecycleExecutionPolicy"></a>

该**EC2ImageBuilderLifecycleExecutionPolicy**政策授予 Image Builder 执行诸如弃用、禁用或删除 Image Builder 图像资源及其底层资源（快照）等操作的权限AMIs，以支持映像生命周期管理任务的自动规则。

### 权限详细信息
<a name="sec-iam-manpol-EC2ImageBuilderLifecycleExecutionPolicy-details"></a>

该策略包含以下权限：
+ **Amazon EC2** — Amazon EC2 被授予访问权限，允许其对账户中标记为的亚马逊系统映像 (AMIs) 执行以下操作`CreatedBy: EC2 Image Builder`。
  + 启用和禁用 AMI。
  + 启用和禁用映像弃用。
  + 描述和注销 AMI。
  + 描述和修改 AMI 映像属性。
  + 删除与 AMI 关联的卷快照。
  + 检索资源的标签。
  + 在 AMI 中添加或删除弃用标签。
+ **Amazon ECR** – 向 Amazon ECR 授予访问权限，以对具有 `LifecycleExecutionAccess: EC2 Image Builder` 标签的 ECR 存储库上执行以下批处理操作。批处理操作支持自动化容器映像生命周期规则。
  + `ecr:BatchGetImage`
  + `ecr:BatchDeleteImage`

  在存储库级别向标记为 `LifecycleExecutionAccess: EC2 Image Builder` 的 ECR 存储库授予访问权限。
+ **AWS 资源组** — 授予 Image Builder 基于标签获取资源的权限。
+ **EC2 Image Builder** – 向 Image Builder 授予权限，以删除 Image Builder 映像资源。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2ImageBuilderLifecycleExecutionPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2ImageBuilderLifecycleExecutionPolicy.html)**。

## EC2InstanceProfileForImageBuilder 策略
<a name="sec-iam-manpol-EC2InstanceProfileForImageBuilder"></a>

**EC2InstanceProfileForImageBuilder** 策略授予 EC2 实例与 Image Builder 协同工作所需的最低权限。但这不包括使用 Systems Manager 代理所需的权限。

### 权限详细信息
<a name="sec-iam-manpol-EC2InstanceProfileForImageBuilder-details"></a>

该策略包含以下权限：
+ **CloudWatch 日志**-授予创建 CloudWatch 日志并将其上传到名称以开头的任何日志组的访问权限`/aws/imagebuilder/`。
+ **Amazon EC2** — 有权描述卷和快照、创建 Image Builder 创建的卷或快照资源的快照以及为 Image Builder 资源创建标签。
+ **Image Builder** — 授予获取任何图像生成器或 AWS Marketplace 组件的访问权限。
+ **AWS KMS**— 如果Image Builder组件是通过加密的，则有权解密该组件。 AWS KMS
+ **Amazon S3** — 授予访问权限，以获取存储在名称以 `ec2imagebuilder-` ISO 开头的 Amazon S3 存储桶中的对象或文件扩展名为 ISO 的资源。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2InstanceProfileForImageBuilder.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2InstanceProfileForImageBuilder.html)**。

## EC2InstanceProfileForImageBuilderECRContainerBuilds 策略
<a name="sec-iam-manpol-EC2InstanceProfileForImageBuilderECRContainerBuilds"></a>

当 EC2 实例使用 Image Builder 构建 Docker 映像，然后在 Amazon ECR 容器存储库中注册和存储映像时，**EC2InstanceProfileForImageBuilderECRContainerBuilds** 策略会授予其所需的最低权限。但这不包括使用 Systems Manager 代理所需的权限。

### 权限详细信息
<a name="sec-iam-manpol-EC2InstanceProfileForImageBuilderECRContainerBuilds-details"></a>

该策略包含以下权限：
+ **CloudWatch 日志**-授予创建 CloudWatch 日志并将其上传到名称以开头的任何日志组的访问权限`/aws/imagebuilder/`。
+ **Amazon ECR** – 向 Amazon ECR 授予访问权限，以获取、注册和存储容器映像，以及获取授权令牌。
+ **Image Builder** – 授予访问权限，以获取 Image Builder 组件或容器配方。
+ **AWS KMS**— 如果Image Builder组件或容器配方是通过加密的，则授予解密该组件或容器配方的权限。 AWS KMS
+ **Amazon S3** – 授予权限，以获取存储在名称以 `ec2imagebuilder-` 开头的 Amazon S3 存储桶中的对象。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2InstanceProfileForImageBuilderECRContainerBuilds.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2InstanceProfileForImageBuilderECRContainerBuilds.html)**。

## Image Builder 更新 AWS 了托管策略
<a name="security-iam-awsmanpol-updates"></a>

本节提供有关自Image Builder AWS 托管策略开始跟踪这些更改以来对该服务所做的更新的信息。有关此页面更改的自动警报，请订阅 Image Builder [文档历史记录](doc-history.md)页面上的 RSS 源。




| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 对服务角色进行了以下更改： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2026 年 2 月 26 日 | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 对服务角色进行了以下更改，以支持在配方和图像分发期间使用 AWS Systems Manager (SSM) 参数存储参数。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2025 年 7 月 23 日 | 
|  [EC2InstanceProfileForImageBuilder](#sec-iam-manpol-EC2InstanceProfileForImageBuilder)：对现有策略的更新  |  Image Builder 对实例配置文件策略进行了以下更改，以支持 ISO 文件下载更多文件扩展名。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2025 年 5 月 19 日 | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 对服务角色进行了以下更改，以支持将 Microsoft 客户端操作系统 ISO 文件作为基础映像导入。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2024 年 12 月 30 日 | 
|  [EC2InstanceProfileForImageBuilder](#sec-iam-manpol-EC2InstanceProfileForImageBuilder)：对现有策略的更新  |  Image Builder 对实例配置文件策略进行了以下更改，以支持从磁盘映像文件创建映像。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2024 年 12 月 30 日 | 
|  [EC2InstanceProfileForImageBuilder](#sec-iam-manpol-EC2InstanceProfileForImageBuilder) - 更新的策略  |  Image Builder 更新了`EC2InstanceProfileForImageBuilder`政策，允许图像生成器获取 AWS Marketplace 组件。  | 2024 年 12 月 2 日 | 
|  [EC2ImageBuilderLifecycleExecutionPolicy](#sec-iam-manpol-EC2ImageBuilderLifecycleExecutionPolicy)：新策略  |  Image Builder 添加了包含映像生命周期管理权限的新 `EC2ImageBuilderLifecycleExecutionPolicy` 策略。  | 2023 年 11 月 17 日 | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 对服务角色进行了以下更改以提供实例放置支持。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2023 年 10 月 19 日 | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 对服务角色进行了以下更改以提供实例放置支持。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2023 年 9 月 28 日 | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 对服务角色进行了以下更改，以允许 Image Builder 工作流程收集 AMI 和 ECR 容器映像版本的漏洞结果。新权限支持 CVE 检测和报告功能。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2023 年 3 月 30 日 | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 对服务角色进行了以下更改： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2022 年 3 月 22 日 | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 对服务角色进行了以下更改： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2022 年 2 月 21 日 | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 对服务角色进行了以下更改： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2021 年 11 月 20 日 | 
|  [AWSServiceRoleForImageBuilder](#sec-iam-manpol-AWSServiceRoleForImageBuilder)：对现有策略的更新  |  Image Builder 已添加新权限，以修复多个清单关联导致映像构建卡住的问题。  | 2021 年 8 月 11 日 | 
|  [AWSImageBuilderFullAccess](#sec-iam-manpol-AWSImageBuilderFullAccess)：对现有策略的更新  |  Image Builder 对完全访问权限角色进行了以下更改： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/imagebuilder/latest/userguide/security-iam-awsmanpol.html)  | 2021 年 4 月 13 日 | 
|  Image Builder 已开始跟踪更改  |  Image Builder 开始跟踪其 AWS 托管策略的更改。  | 2021 年 4 月 02 日 | 

# 使用 Image Builder 的 IAM 服务相关角色
<a name="image-builder-service-linked-role"></a>

EC2 Image Builder 使用 AWS Identity and Access Management (IAM) [服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服务相关角色是一种独特类型的 IAM 角色，它与 Image Builder 直接相关。服务相关角色由 Image Builder 预定义，包括该服务代表您呼叫他人 AWS 服务 所需的所有权限。

服务相关角色可让您更高效地设置 Image Builder，因为您不必手动添加必要的权限。Image Builder 定义其服务相关角色的权限，除非另外定义，否则只有 Image Builder 可以代入该角色。定义的权限包括信任策略和权限策略。不能将该权限策略附加到任何其他 IAM 实体。

有关支持服务相关角色的其他服务的信息，请参阅[与 IAM 配合使用的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，并查找 **Service-Linked Role**（服务相关角色）列中显示为 **Yes**（是）的服务。请选择**是**与查看该服务的服务关联角色文档的链接。

## Image Builder 的服务相关角色权限
<a name="image-builder-slr-permissions"></a>

Image Builder 使用**AWSServiceRoleForImageBuilder**服务相关角色允许 EC2 Image Builder 代表您访问 AWS 资源。服务相关角色信任 *imagebuilder.amazonaws.com* ​服务来代入该角色。

您无需手动创建该服务相关角色。当您在 AWS 管理控制台、或 AWS API 中创建第一个 Image Builder 映像时，Image Builder 会为您创建服务相关角色。 AWS CLI

以下操作可创建新的映像：
+ 在 Image Builder 控制台中运行管道向导以创建自定义映像。
+ 使用以下 API 操作之一或其对应的 AWS CLI 命令：
  + **[CreateImage](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateImage.html)**API 操作（**[create-image](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/create-image.html)**在 AWS CLI）。
  + **[ImportVmImage](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_ImportVmImage.html)**API 操作（**[import-vm-image](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/import-vm-image.html)**在 AWS CLI）。
  + **[StartImagePipelineExecution](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_StartImagePipelineExecution.html)**API 操作（**[start-image-pipeline-execution](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/start-image-pipeline-execution.html)**在 AWS CLI）。

**重要**  
如果您的帐户已删除服务相关角色，您可以使用相同的过程重新创建它。在创建第一个 EC2 Image Builder 资源时，Image Builder 将再次为您创建服务相关角色。

要查看 **AWSServiceRoleForImageBuilder** 的权限，请参阅 [AWSServiceRoleForImageBuilder 策略](security-iam-awsmanpol.md#sec-iam-manpol-AWSServiceRoleForImageBuilder) 页面。要了解有关为服务相关角色配置权限的更多信息，请参阅 *IAM 用户指南*中的[服务相关角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 从您的账户中移除 Image Builder 服务相关角色
<a name="image-builder-slr-deleting"></a>

您可以使用 IAM 控制台 AWS CLI、或 AWS API 从您的账户中手动移除 Image Builder 的服务相关角色。但是，在执行此操作之前，必须确保未启用任何引用它的 Image Builder 资源。

**注意**  
在尝试删除资源时，如果 Image Builder 服务正在使用该角色，删除可能会失败。如果发生这种情况，请等待几分钟后重试。

**清理 `AWSServiceRoleForImageBuilder` 角色使用的 Image Builder 资源**

1. 在开始操作之前，请确认没有正在运行中的任何管道构建。要取消正在运行中的构建，请使用 AWS CLI中的 `cancel-image-creation` 命令。

   ```
   aws imagebuilder cancel-image-creation --image-build-version-arn arn:aws:imagebuilder:us-east-1:123456789012:image-pipeline/sample-pipeline
   ```

1. 将所有管道计划更改为采用手动构建流程，或者如果不再使用它们，则将其删除。有关删除资源的更多信息，请参阅 [删除过期或未使用的 Image Builder 资源](delete-resources.md)。

**使用 IAM 删除服务相关角色**  
您可以使用 IAM 控制台 AWS CLI、或 AWS API 从您的账户中删除该`AWSServiceRoleForImageBuilder`角色。有关更多信息，请参阅《IAM 用户指南》**中的[删除服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## Image Builder 服务相关角色的受支持区域
<a name="image-builder-slr-regions"></a>

Image Builder 支持在提供服务的所有 AWS 区域中使用服务相关角色。有关支持的 AWS 区域列表，请参阅[AWS 区域和终端节点](what-is-image-builder.md#image-builder-regions)。

# Image Builder 中的 IAM 问题疑难解答
<a name="security_iam_troubleshoot"></a>

**Topics**
+ [我无权在 Image Builder 中执行操作](#security_iam_troubleshoot-no-permissions)
+ [我无权执行 iam：PassRole](#security_iam_troubleshoot-passrole)
+ [我想允许我以外的人访问我 AWS 账户 的 Image Builder 资源](#security_iam_troubleshoot-cross-account-access)

## 我无权在 Image Builder 中执行操作
<a name="security_iam_troubleshoot-no-permissions"></a>

如果您收到错误提示，指明您无权执行某个操作，则必须更新策略以允许执行该操作。

当 `mateojackson` IAM 用户尝试使用控制台查看有关虚构 `my-example-widget` 资源的详细信息，但不拥有虚构 `imagebuilder:GetWidget` 权限时，会发生以下示例错误。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: imagebuilder:GetWidget on resource: my-example-widget
```

在此情况下，必须更新 `mateojackson` 用户的策略，以允许使用 `imagebuilder:GetWidget` 操作访问 `my-example-widget` 资源。

如果您需要帮助，请联系您的 AWS 管理员。您的管理员是提供登录凭证的人。

## 我无权执行 iam：PassRole
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到一个错误，表明您无权执行 `iam:PassRole` 操作，则必须更新策略以允许您将角色传递给 Image Builder。

有些 AWS 服务 允许您将现有角色传递给该服务，而不是创建新的服务角色或服务相关角色。为此，您必须具有将角色传递到服务的权限。

当名为 `marymajor` 的 IAM 用户尝试使用控制台在 Image Builder 中执行操作时，会发生以下示例错误。但是，服务必须具有服务角色所授予的权限才可执行此操作。Mary 不具有将角色传递到服务的权限。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在这种情况下，必须更新 Mary 的策略以允许她执行 `iam:PassRole` 操作。

如果您需要帮助，请联系您的 AWS 管理员。您的管理员是提供登录凭证的人。

## 我想允许我以外的人访问我 AWS 账户 的 Image Builder 资源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以创建一个角色，以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖，可以代入角色。对于支持基于资源的策略或访问控制列表 (ACLs) 的服务，您可以使用这些策略向人们授予访问您的资源的权限。

要了解更多信息，请参阅以下内容：
+ 要了解 Image Builder 是否支持这些特征，请参阅 [Image Builder 如何与 IAM 策略和角色配合使用](security_iam_service-with-iam.md)。
+ 要了解如何提供对您拥有的资源的访问权限 AWS 账户 ，请参阅 [IAM 用户*指南中的向您拥有 AWS 账户 的另一个 IAM 用户*提供访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)权限。
+ 要了解如何向第三方提供对您的资源的访问[权限 AWS 账户，请参阅 *IAM 用户指南*中的向第三方提供](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)访问权限。 AWS 账户 
+ 要了解如何通过身份联合验证提供访问权限，请参阅《IAM 用户指南》**中的[为经过外部身份验证的用户（身份联合验证）提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 要了解使用角色和基于资源的策略进行跨账户访问之间的差别，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

# Image Builder 的合规性验证
<a name="compliance"></a>

EC2 Image Builder 不在任何 AWS 合规计划的范围内。

要了解是否属于特定合规计划的范围，请参阅AWS 服务 “[按合规计划划分的范围](https://aws.amazon.com/compliance/services-in-scope/)” ”，然后选择您感兴趣的合规计划。 AWS 服务 有关一般信息，请参阅[AWS 合规计划AWS](https://aws.amazon.com/compliance/programs/)。

您可以使用下载第三方审计报告 AWS Artifact。有关更多信息，请参阅中的 “[下载报告” 中的 “ AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)。

您在使用 AWS 服务 时的合规责任取决于您的数据的敏感性、贵公司的合规目标以及适用的法律和法规。有关您在使用时的合规责任的更多信息 AWS 服务，请参阅[AWS 安全文档](https://docs.aws.amazon.com/security/)。

您可以将来自 () 的合规产品 AWS Marketplace 或 AWS Task Orchestrator and Executor (AWSTOE) 中的组件合并到 Image Builder 图片中，以帮助确保您的图片合规。有关更多信息，请参阅 [适用于您的 Image Builder 映像的合规产品](integ-compliance-products.md)。

# Image Builder 中的数据冗余和韧性
<a name="disaster-recovery-resiliency"></a>

 AWS 全球基础设施是围绕 AWS 区域和可用区构建的。 AWS 区域提供多个物理隔离和隔离的可用区，这些可用区通过低延迟、高吞吐量和高度冗余的网络相连。利用可用区，您可以设计和操作在可用区之间无中断地自动实现失效转移的应用程序和数据库。与传统的单个或多个数据中心基础设施相比，可用区具有更高的可用性、容错能力和可扩展性。

EC2 Image Builder 服务允许您将一个区域中构建的图像与其他区域一起分发，从而为它们提供多区域弹性。 AMIs没有“备份”镜像管道、配方或组件的机制。您可以将配方和组件文档存储在 Image Builder 服务外部，例如，存储在 Amazon S3 存储桶中。

无法为 EC2 Image Builder 配置高可用性 (HA)。您可以将镜像分发到多个区域以提高镜像的可用性。

有关 AWS 区域和可用区的更多信息，请参阅[AWS 全球基础设施](https://aws.amazon.com/about-aws/global-infrastructure/)。

# Image Builder 中的基础设施安全性
<a name="infrastructure-security"></a>

 AWS 全球网络为诸如 EC2 Image Builder 之类的服务提供安全功能并控制网络访问权限。有关 AWS 为其服务提供的基础设施安全的更多信息，请参阅* AWS 安全性简介*白皮书中的[基础设施安全](https://docs.aws.amazon.com/whitepapers/latest/introduction-aws-security/infrastructure-security.html)部分。

要通过 AWS 全球网络发送 Image Builder API 操作请求，您的客户端软件必须遵守以下安全准则：
+ 要发送对 Image Builder API 操作的请求，客户端软件必须使用支持的传输层安全性协议 (TLS) 版本。
**注意**  
AWS 正在逐步取消对 TLS 版本 1.0 和 1.1 的支持。我们强烈建议您将客户端软件更新为使用 TLS 版本 1.2 或更高版本，这样您可以继续保持连接。有关更多信息，请参阅此 [AWS 安全博客文章](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/)。
+ 客户端软件还必须支持具有完全向前保密 (PFS) 的密码套件，例如 Ephemeral Diffie-Hellman (DHE) 或 Elliptic Curve Ephemeral Diffie-Hellman (ECDHE)。大多数当前系统（如 Java 7 及更高版本）都支持这些模式。
+ 您必须使用访问密钥 ID 和与 AWS Identity and Access Management (IAM) 委托人关联的私有访问密钥来签署 API 请求。或者，您可以为您的请求使用 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) (AWS STS) 生成临时安全凭证。

此外，Image Builder 用于构建和测试映像的 EC2 实例必须具有访问 AWS Systems Manager的权限。

# Image Builder 映像的补丁管理
<a name="security-patch-management"></a>

AWS 提供 AMIs 每月管理的更新，其中包含适用于以下操作系统的最新更新和安全补丁。您可以将它们 AMIs 用作自定义的基本图片。有关更多信息，请参阅 [支持的操作系统](what-is-image-builder.md#image-builder-os)。
+ Linux 发行版包括亚马逊 Linux 2 AL2023、红帽企业 Linux (RHEL)、CentOS、Ubuntu、SUSE Linux 企业服务器
+ Windows Server 2016 及更高版本
+ macOS 10.14.x 及更高版本

根据[责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)，在创建自定义映像后，您需要负责修补 Amazon EC2 系统。如果可以轻松替换您应用程序工作负载中的 EC2 实例，则更新基础 AMI 并根据该映像重新部署所有计算节点可能会非常高效。

**注意**  
要进行 macOS 修补，我们建议您创建新版本的配方，使用最新的托管 AMI 作为基础映像，然后通过配方和其他映像构建资源构建更新的自定义映像。如果您的 Mac 实例不能轻松替换，请参阅《Amazon EC2 用户指南》中的**[更新 Mac 实例上的操作系统和软件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mac-instance-updates.html)页面来了解更多信息。

您可以通过以下两种方式让 Image Builder 保持 AMIs 最新状态。
+ **AWS提供的修补组件** – EC2 Image Builder 提供以下构建组件，它们安装所有待处理的操作系统更新：
  + `update-linux`
  + `update-windows`

  这些组件使用 `UpdateOS` 操作模块。有关更多信息，请参阅 [UpdateOS](toe-action-modules.md#action-modules-updateos)。通过从 AWS提供的组件列表中选择组件，可以将组件添加到您的映像构建管道中。
+ **带有修补操作的自定义构建组件**-要有选择地在支持的操作系统上安装或更新补丁 AMIs，您可以创作 Image Builder 组件来安装所需的补丁。自定义组件可以使用 shell 脚本（Bash 或 PowerShell）安装补丁，也可以使用`UpdateOS`操作模块来指定要安装或排除的修补程序。有关更多信息，请参阅 [AWSTOE 组件管理器支持的操作模块](toe-action-modules.md)。

  使用 `UpdateOS` 操作模块的组件（仅限 Linux 和 Windows。macOS 不支持 `UpdateOS` 操作模块。）

  ```
  schemaVersion: 1.0
  phases:
    - name: build
  	steps:
  	  - name: UpdateOS
  		action: UpdateOS
  ```

  使用 Bash 安装 yum 更新的组件

  ```
  schemaVersion: 1.0
  phases:
    - name: build
  	steps:
  	  - name: InstallYumUpdates
  		action: ExecuteBash
  		inputs:
  		  commands:
  			- sudo yum update -y
  ```

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

EC2 Image Builder 提供了在您开发和实施自己的安全策略时需要考虑的大量安全功能。以下最佳实践是一般指导原则，并不代表完整安全解决方案。这些最佳实践可能不适合环境或不满足环境要求，请将其视为有用的考虑因素而不是惯例。
+ 不要在 Image Builder 配方中使用过于宽松的安全组。
+ 不要与您不信任的账户共享镜像。
+ 不要公开包含私有或敏感数据的镜像。
+ 在镜像生成期间应用所有可用的 Windows 或 Linux 安全补丁。
+ 定期将托管 AMI 更新应用于您的 macOS 配方，并创建新映像以启动安装了最新安全补丁的实例。

我们强烈建议您测试映像，以验证安全状况和适用的安全合规性级别。[Amazon Inspector](https://aws.amazon.com/inspector/) 等此类解决方案可以帮助验证映像的安全和合规性状况。

**IMDSv2 适用于 Image Builder 管道**  
当您的 Image Builder 管道运行时，它会发送 HTTP 请求以启动 EC2 实例，Image Builder 使用这些实例来构建和测试您的映像。要配置您的管道用于启动请求的 IMDS 版本，请在 Image Builder 基础架构配置实例元数据设置中设置 `httpTokens` 参数。

**注意**  
我们建议您将 Image Builder 从管道构建中启动的所有 EC2 实例配置为使用， IMDSv2 以便实例元数据检索请求需要签名的令牌标头。

有关 Image Builder 基础设施配置的更多信息，请参阅 [管理 Image Builder 基础设施配置](manage-infra-config.md) 有关 Linux 映像的 EC2 实例元数据选项的更多信息，请参阅《Amazon EC2 用户指南》中的[配置实例元数据服务选项](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)。有关 Windows 映像，请参阅《Amazon EC2 用户指南》中的[配置实例元数据服务选项](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)。

## 需要在构建后进行清理
<a name="post-build-cleanup"></a>

Image Builder 完成自定义映像的所有构建步骤后，Image Builder 会为测试和映像创建准备构建实例。在关闭构建实例以创建快照之前，Image Builder 会执行以下清理操作以确保映像的安全：

------
#### [ Linux ]

Image Builder 管道运行清理脚本，以帮助确保最终映像遵循安全最佳实践，并删除任何不应延续到快照中的构建构件或设置。但是，您可以跳过脚本的各个部分，或者完全覆盖用户数据。因此，Image Builder 管道生成的映像不一定符合任何特定的监管标准。

当管道完成其构建期和测试期后，Image Builder 会在创建输出映像之前自动运行以下清理脚本。

**重要**  
如果您在配方中覆盖**用户数据**，则脚本将无法运行。在这种情况下，请确保在用户数据中包含一个用于创建名为 `perform_cleanup` 的空文件的命令。Image Builder 会检测到此文件并在创建新映像之前运行清理脚本。

```
#!/bin/bash
if [[ ! -f {{workingDirectory}}/perform_cleanup ]]; then
    echo "Skipping cleanup"
    exit 0
else
    sudo rm -f {{workingDirectory}}/perform_cleanup
fi

function cleanup() {
    FILES=("$@")
    for FILE in "${FILES[@]}"; do
        if [[ -f "$FILE" ]]; then
            echo "Deleting $FILE";
            sudo shred -zuf $FILE;
        fi;
        if [[ -f $FILE ]]; then
            echo "Failed to delete '$FILE'. Failing."
            exit 1
        fi;
    done
};


# Clean up for cloud-init files
CLOUD_INIT_FILES=(
    "/etc/sudoers.d/90-cloud-init-users"
    "/etc/locale.conf"
    "/var/log/cloud-init.log"
    "/var/log/cloud-init-output.log"
)
if [[ -f {{workingDirectory}}/skip_cleanup_cloudinit_files ]]; then
    echo "Skipping cleanup of cloud init files"
else
    echo "Cleaning up cloud init files"
    cleanup "${CLOUD_INIT_FILES[@]}"
    if [[ $( sudo find /var/lib/cloud -type f | sudo wc -l ) -gt 0 ]]; then
        echo "Deleting files within /var/lib/cloud/*"
        sudo find /var/lib/cloud -type f -exec shred -zuf {} \;
    fi;

    if [[ $( sudo ls /var/lib/cloud | sudo wc -l ) -gt 0 ]]; then
        echo "Deleting /var/lib/cloud/*"
        sudo rm -rf /var/lib/cloud/* || true
    fi;
fi;


# Clean up for temporary instance files
INSTANCE_FILES=(
    "/etc/.updated"
    "/etc/aliases.db"
    "/etc/hostname"
    "/var/lib/misc/postfix.aliasesdb-stamp"
    "/var/lib/postfix/master.lock"
    "/var/spool/postfix/pid/master.pid"
    "/var/.updated"
    "/var/cache/yum/x86_64/2/.gpgkeyschecked.yum"
)
if [[ -f {{workingDirectory}}/skip_cleanup_instance_files ]]; then
    echo "Skipping cleanup of instance files"
else
    echo "Cleaning up instance files"
    cleanup "${INSTANCE_FILES[@]}"
fi;


# Clean up for ssh files
SSH_FILES=(
    "/etc/ssh/ssh_host_rsa_key"
    "/etc/ssh/ssh_host_rsa_key.pub"
    "/etc/ssh/ssh_host_ecdsa_key"
    "/etc/ssh/ssh_host_ecdsa_key.pub"
    "/etc/ssh/ssh_host_ed25519_key"
    "/etc/ssh/ssh_host_ed25519_key.pub"
    "/root/.ssh/authorized_keys"
)
if [[ -f {{workingDirectory}}/skip_cleanup_ssh_files ]]; then
    echo "Skipping cleanup of ssh files"
else
    echo "Cleaning up ssh files"
    cleanup "${SSH_FILES[@]}"
    USERS=$(ls /home/)
    for user in $USERS; do
        echo Deleting /home/"$user"/.ssh/authorized_keys;
        sudo find /home/"$user"/.ssh/authorized_keys -type f -exec shred -zuf {} \;
    done
    for user in $USERS; do
        if [[ -f /home/"$user"/.ssh/authorized_keys ]]; then
            echo Failed to delete /home/"$user"/.ssh/authorized_keys;
            exit 1
        fi;
    done;
fi;


# Clean up for instance log files
INSTANCE_LOG_FILES=(
    "/var/log/audit/audit.log"
    "/var/log/boot.log"
    "/var/log/dmesg"
    "/var/log/cron"
)
if [[ -f {{workingDirectory}}/skip_cleanup_instance_log_files ]]; then
    echo "Skipping cleanup of instance log files"
else
    echo "Cleaning up instance log files"
    cleanup "${INSTANCE_LOG_FILES[@]}"
fi;

# Clean up for TOE files
if [[ -f {{workingDirectory}}/skip_cleanup_toe_files ]]; then
    echo "Skipping cleanup of TOE files"
else
    echo "Cleaning TOE files"
    if [[ $( sudo find {{workingDirectory}}/TOE_* -type f | sudo wc -l) -gt 0 ]]; then
        echo "Deleting files within {{workingDirectory}}/TOE_*"
        sudo find {{workingDirectory}}/TOE_* -type f -exec shred -zuf {} \;
    fi
    if [[ $( sudo find {{workingDirectory}}/TOE_* -type f | sudo wc -l) -gt 0 ]]; then
        echo "Failed to delete {{workingDirectory}}/TOE_*"
        exit 1
    fi
    if [[ $( sudo find {{workingDirectory}}/TOE_* -type d | sudo wc -l) -gt 0 ]]; then
        echo "Deleting {{workingDirectory}}/TOE_*"
        sudo rm -rf {{workingDirectory}}/TOE_*
    fi
    if [[ $( sudo find {{workingDirectory}}/TOE_* -type d | sudo wc -l) -gt 0 ]]; then
        echo "Failed to delete {{workingDirectory}}/TOE_*"
        exit 1
    fi
fi

# Clean up for ssm log files
if [[ -f {{workingDirectory}}/skip_cleanup_ssm_log_files ]]; then
    echo "Skipping cleanup of ssm log files"
else
    echo "Cleaning up ssm log files"
    if [[ $( sudo find /var/log/amazon/ssm -type f | sudo wc -l) -gt 0 ]]; then
        echo "Deleting files within /var/log/amazon/ssm/*"
        sudo find /var/log/amazon/ssm -type f -exec shred -zuf {} \;
    fi
    if [[ $( sudo find /var/log/amazon/ssm -type f | sudo wc -l) -gt 0 ]]; then
        echo "Failed to delete /var/log/amazon/ssm"
        exit 1
    fi
    if [[ -d "/var/log/amazon/ssm" ]]; then
        echo "Deleting /var/log/amazon/ssm/*"
        sudo rm -rf /var/log/amazon/ssm
    fi
    if [[ -d "/var/log/amazon/ssm" ]]; then
        echo "Failed to delete /var/log/amazon/ssm"
        exit 1
    fi
fi


if [[ $( sudo find /var/log/sa/sa* -type f | sudo wc -l ) -gt 0 ]]; then
    echo "Deleting /var/log/sa/sa*"
    sudo shred -zuf /var/log/sa/sa*
fi
if [[ $( sudo find /var/log/sa/sa* -type f | sudo wc -l ) -gt 0 ]]; then
    echo "Failed to delete /var/log/sa/sa*"
    exit 1
fi

if [[ $( sudo find /var/lib/dhclient/dhclient*.lease -type f | sudo wc -l ) -gt 0 ]]; then
        echo "Deleting /var/lib/dhclient/dhclient*.lease"
        sudo shred -zuf /var/lib/dhclient/dhclient*.lease
fi
if [[ $( sudo find /var/lib/dhclient/dhclient*.lease -type f | sudo wc -l ) -gt 0 ]]; then
        echo "Failed to delete /var/lib/dhclient/dhclient*.lease"
        exit 1
fi

if [[ $( sudo find /var/tmp -type f | sudo wc -l) -gt 0 ]]; then
        echo "Deleting files within /var/tmp/*"
        sudo find /var/tmp -type f -exec shred -zuf {} \;
fi
if [[ $( sudo find /var/tmp -type f | sudo wc -l) -gt 0 ]]; then
        echo "Failed to delete /var/tmp"
        exit 1
fi
if [[ $( sudo ls /var/tmp | sudo wc -l ) -gt 0 ]]; then
        echo "Deleting /var/tmp/*"
        sudo rm -rf /var/tmp/*
fi

# Shredding is not guaranteed to work well on rolling logs

if [[ -f "/var/lib/rsyslog/imjournal.state" ]]; then
        echo "Deleting /var/lib/rsyslog/imjournal.state"
        sudo shred -zuf /var/lib/rsyslog/imjournal.state
        sudo rm -f /var/lib/rsyslog/imjournal.state
fi

if [[ $( sudo ls /var/log/journal/ | sudo wc -l ) -gt 0 ]]; then
        echo "Deleting /var/log/journal/*"
        sudo find /var/log/journal/ -type f -exec shred -zuf {} \;
        sudo rm -rf /var/log/journal/*
fi

sudo touch /etc/machine-id
```

------
#### [ Windows ]

Image Builder 管道在自定义 Windows 映像后，将运行 Microsoft [Sysprep](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--generalize--a-windows-installation?view=windows-11) 实用程序。 这些操作遵循了[强化和清理图像AWS 的最佳实践。](https://aws.amazon.com/articles/public-ami-publishing-hardening-and-clean-up-requirements/)

------
#### [ macOS ]

Image Builder 管道运行清理脚本，以帮助确保最终映像遵循安全最佳实践，并删除任何不应延续到快照中的构建构件或设置。但是，您可以跳过脚本的各个部分，或者完全覆盖用户数据。因此，Image Builder 管道生成的映像不一定符合任何特定的监管标准。

当管道完成其构建期和测试期后，Image Builder 会在创建输出映像之前自动运行以下清理脚本。

**重要**  
如果您在配方中覆盖**用户数据**，则脚本将无法运行。在这种情况下，请确保在用户数据中包含一个用于创建名为 `perform_cleanup` 的空文件的命令。Image Builder 会检测到此文件并在创建新映像之前运行清理脚本。

```
#!/bin/bash
if [[ ! -f {{workingDirectory}}/perform_cleanup ]]; then
  echo "Skipping cleanup"
  exit 0
else
  sudo rm -f {{workingDirectory}}/perform_cleanup
fi

function cleanup() {
  FILES=("$@")
  for FILE in "${FILES[@]}"; do
      if [[ -f "$FILE" ]]; then
          echo "Deleting $FILE";
          sudo rm -f $FILE;
      fi;
      if [[ -f $FILE ]]; then
          echo "Failed to delete '$FILE'. Failing."
          exit 1
      fi;
  done
};

# Clean up for cloud-init files
CLOUD_INIT_FILES=(
  "/etc/sudoers.d/90-cloud-init-users"
  "/etc/locale.conf"
  "/var/log/cloud-init.log"
  "/var/log/cloud-init-output.log"
)
if [[ -f {{workingDirectory}}/skip_cleanup_cloudinit_files ]]; then
  echo "Skipping cleanup of cloud init files"
else
  echo "Cleaning up cloud init files"
  cleanup "${CLOUD_INIT_FILES[@]}"
  if [[ $( sudo find /var/lib/cloud -type f | sudo wc -l ) -gt 0 ]]; then
      echo "Deleting files within /var/lib/cloud/*"
      sudo find /var/lib/cloud -type f -exec rm -f {} \;
  fi;

  if [[ $( sudo ls /var/lib/cloud | sudo wc -l ) -gt 0 ]]; then
      echo "Deleting /var/lib/cloud/*"
      sudo rm -rf /var/lib/cloud/* || true
  fi;
fi;


# Clean up for temporary instance files
INSTANCE_FILES=(
  "/etc/.updated"
  "/etc/aliases.db"
  "/etc/hostname"
  "/var/lib/misc/postfix.aliasesdb-stamp"
  "/var/lib/postfix/master.lock"
  "/var/spool/postfix/pid/master.pid"
  "/var/.updated"
  "/var/cache/yum/x86_64/2/.gpgkeyschecked.yum"
)
if [[ -f {{workingDirectory}}/skip_cleanup_instance_files ]]; then
  echo "Skipping cleanup of instance files"
else
  echo "Cleaning up instance files"
  cleanup "${INSTANCE_FILES[@]}"
fi;


# Clean up for ssh files
SSH_FILES=(
  "/etc/ssh/ssh_host_rsa_key"
  "/etc/ssh/ssh_host_rsa_key.pub"
  "/etc/ssh/ssh_host_ecdsa_key"
  "/etc/ssh/ssh_host_ecdsa_key.pub"
  "/etc/ssh/ssh_host_ed25519_key"
  "/etc/ssh/ssh_host_ed25519_key.pub"
  "/root/.ssh/authorized_keys"
)
if [[ -f {{workingDirectory}}/skip_cleanup_ssh_files ]]; then
  echo "Skipping cleanup of ssh files"
else
  echo "Cleaning up ssh files"
  cleanup "${SSH_FILES[@]}"
  USERS=$(ls /home/)
  for user in $USERS; do
      echo Deleting /home/"$user"/.ssh/authorized_keys;
      sudo find /home/"$user"/.ssh/authorized_keys -type f -exec rm -f {} \;
  done
  for user in $USERS; do
      if [[ -f /home/"$user"/.ssh/authorized_keys ]]; then
          echo Failed to delete /home/"$user"/.ssh/authorized_keys;
          exit 1
      fi;
  done;
fi;


# Clean up for instance log files
INSTANCE_LOG_FILES=(
  "/var/log/audit/audit.log"
  "/var/log/boot.log"
  "/var/log/dmesg"
  "/var/log/cron"
  "/var/log/amazon/ec2/ec2-macos-init.log"
  "/var/log/amazon/ec2/ena-ethernet.log"
  "/var/log/amazon/ec2/system-monitoring.log"
)
if [[ -f {{workingDirectory}}/skip_cleanup_instance_log_files ]]; then
  echo "Skipping cleanup of instance log files"
else
  echo "Cleaning up instance log files"
  cleanup "${INSTANCE_LOG_FILES[@]}"
fi;

# Clean up for TOE files
if [[ -f {{workingDirectory}}/skip_cleanup_toe_files ]]; then
  echo "Skipping cleanup of TOE files"
else
  echo "Cleaning TOE files"
  if [[ $( sudo find {{workingDirectory}}/TOE_* -type f | sudo wc -l) -gt 0 ]]; then
      echo "Deleting files within {{workingDirectory}}/TOE_*"
      sudo find {{workingDirectory}}/TOE_* -type f -exec rm -f {} \;
  fi
  if [[ $( sudo find {{workingDirectory}}/TOE_* -type f | sudo wc -l) -gt 0 ]]; then
      echo "Failed to delete {{workingDirectory}}/TOE_*"
      exit 1
  fi
  if [[ $( sudo find {{workingDirectory}}/TOE_* -type d | sudo wc -l) -gt 0 ]]; then
      echo "Deleting {{workingDirectory}}/TOE_*"
      sudo rm -rf {{workingDirectory}}/TOE_*
  fi
  if [[ $( sudo find {{workingDirectory}}/TOE_* -type d | sudo wc -l) -gt 0 ]]; then
      echo "Failed to delete {{workingDirectory}}/TOE_*"
      exit 1
  fi
fi

# Clean up for ssm log files
if [[ -f {{workingDirectory}}/skip_cleanup_ssm_log_files ]]; then
  echo "Skipping cleanup of ssm log files"
else
  echo "Cleaning up ssm log files"
  if [[ $( sudo find /var/log/amazon/ssm -type f | sudo wc -l) -gt 0 ]]; then
      echo "Deleting files within /var/log/amazon/ssm/*"
      sudo find /var/log/amazon/ssm -type f -exec rm -f {} \;
  fi
  if [[ $( sudo find /var/log/amazon/ssm -type f | sudo wc -l) -gt 0 ]]; then
      echo "Failed to delete /var/log/amazon/ssm"
      exit 1
  fi
  if [[ -d "/var/log/amazon/ssm" ]]; then
      echo "Deleting /var/log/amazon/ssm/*"
      sudo rm -rf /var/log/amazon/ssm
  fi
  if [[ -d "/var/log/amazon/ssm" ]]; then
      echo "Failed to delete /var/log/amazon/ssm"
      exit 1
  fi
fi


if [[ $( sudo find /var/log/sa/sa* -type f | sudo wc -l ) -gt 0 ]]; then
  echo "Deleting /var/log/sa/sa*"
  sudo rm -f /var/log/sa/sa*
fi
if [[ $( sudo find /var/log/sa/sa* -type f | sudo wc -l ) -gt 0 ]]; then
  echo "Failed to delete /var/log/sa/sa*"
  exit 1
fi

if [[ $( sudo find /var/lib/dhclient/dhclient*.lease -type f | sudo wc -l ) -gt 0 ]]; then
      echo "Deleting /var/lib/dhclient/dhclient*.lease"
      sudo rm -f /var/lib/dhclient/dhclient*.lease
fi
if [[ $( sudo find /var/lib/dhclient/dhclient*.lease -type f | sudo wc -l ) -gt 0 ]]; then
      echo "Failed to delete /var/lib/dhclient/dhclient*.lease"
      exit 1
fi

if [[ $( sudo find /var/tmp -type f | sudo wc -l) -gt 0 ]]; then
      echo "Deleting files within /var/tmp/*"
      sudo find /var/tmp -type f -exec rm -f {} \;
fi
if [[ $( sudo find /var/tmp -type f | sudo wc -l) -gt 0 ]]; then
      echo "Failed to delete /var/tmp"
      exit 1
fi
if [[ $( sudo ls /var/tmp | sudo wc -l ) -gt 0 ]]; then
      echo "Deleting /var/tmp/*"
      sudo rm -rf /var/tmp/*
fi

# Shredding is not guaranteed to work well on rolling logs

if [[ -f "/var/lib/rsyslog/imjournal.state" ]]; then
      echo "Deleting /var/lib/rsyslog/imjournal.state"
      sudo rm -f /var/lib/rsyslog/imjournal.state
      sudo rm -f /var/lib/rsyslog/imjournal.state
fi

if [[ $( sudo ls /var/log/journal/ | sudo wc -l ) -gt 0 ]]; then
      echo "Deleting /var/log/journal/*"
      sudo find /var/log/journal/ -type f -exec rm -f {} \;
      sudo rm -rf /var/log/journal/*
fi

sudo touch /etc/machine-id
```

------

## 覆盖 Linux 清理脚本
<a name="override-linux-cleanup-script"></a>

Image Builder 创建的映像在默认情况下是安全的，并遵循我们的安全最佳实践。但是，一些更高级的使用案例可能需要您跳过内置清理脚本的一个或多个部分。如果您确实需要跳过一些清理部分，我们强烈建议您测试输出 AMI，以确保映像的安全。

**重要**  
跳过清理脚本中的一些部分可能会导致敏感信息（例如所有者帐户详细信息或 SSH 密钥）被包含在最终映像中，并被包含在从该映像启动的任何实例中。在不同的可用区、区域或账户中启动时，您也可能会遇到问题。

下表概述了清理脚本的各个部分，这些部分中删除的文件，以及可用于标记 Image Builder 应跳过的某个部分的文件名。要跳过清理脚本的特定部分，您可以使用 [CreateFile](toe-action-modules.md#action-modules-createfile) 组件操作模块或用户数据中的命令（如果已覆盖）来创建一个空文件，其名称在**跳过部分文件名**列中指定。

**注意**  
为跳过清理脚本的某一部分而创建的文件不应包含文件扩展名。例如，如果您想跳过脚本的 `CLOUD_INIT_FILES` 部分，但创建了一个名为 `skip_cleanup_cloudinit_files.txt` 的文件，那么 Image Builder 将无法识别要跳过的文件。


**Input**  

| 清理部分 | 文件已删除 | 跳过部分文件名 | 
| --- | --- | --- | 
| `CLOUD_INIT_FILES` | `/etc/sudoers.d/90-cloud-init-users` `/etc/locale.conf` `/var/log/cloud-init.log` `/var/log/cloud-init-output.log`  | `skip_cleanup_cloudinit_files` | 
| `INSTANCE_FILES` | `/etc/.updated` `/etc/aliases.db` `/etc/hostname` `/var/lib/misc/postfix.aliasesdb-stamp` `/var/lib/postfix/master.lock` `/var/spool/postfix/pid/master.pid` `/var/.updated` `/var/cache/yum/x86_64/2/.gpgkeyschecked.yum`  | `skip_cleanup_instance_files` | 
| `SSH_FILES` | `/etc/ssh/ssh_host_rsa_key` `/etc/ssh/ssh_host_rsa_key.pub` `/etc/ssh/ssh_host_ecdsa_key` `/etc/ssh/ssh_host_ecdsa_key.pub` `/etc/ssh/ssh_host_ed25519_key` `/etc/ssh/ssh_host_ed25519_key.pub` `/root/.ssh/authorized_keys` `/home/<all users>/.ssh/authorized_keys;`  | `skip_cleanup_ssh_files` | 
| `INSTANCE_LOG_FILES` | `/var/log/audit/audit.log` `/var/log/boot.log` `/var/log/dmesg` `/var/log/cron`  | `skip_cleanup_instance_log_files` | 
| `TOE_FILES` | `{{workingDirectory}}/TOE_*` | `skip_cleanup_toe_files` | 
| `SSM_LOG_FILES` | `/var/log/amazon/ssm/*` | `skip_cleanup_ssm_log_files` | 