

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

# Amazon Elastic Container Registry 中的安全性
<a name="security"></a>

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

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

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

**Topics**
+ [适用于 Amazon Elastic Container Registry 的 Identity and Access Management](security-iam.md)
+ [Amazon ECR 中的数据保护](data-protection.md)
+ [Amazon Elastic Container Registry 的合规性验证](ecr-compliance.md)
+ [Amazon Elastic Registry 中的基础设施安全性](infrastructure-security.md)
+ [防止跨服务混淆座席](cross-service-confused-deputy-prevention.md)

# 适用于 Amazon Elastic Container Registry 的 Identity and Access Management
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) AWS 服务 可帮助管理员安全地控制对 AWS 资源的访问权限。IAM 管理员控制谁可以通过*身份验证*（登录）和*授权*（具有权限）使用 Amazon ECR 资源。您可以使用 IAM AWS 服务 ，无需支付额外费用。

**Topics**
+ [受众](#security_iam_audience)
+ [使用身份进行身份验证](#security_iam_authentication)
+ [使用策略管理访问](#security_iam_access-manage)
+ [Amazon Elastic Container Registry 如何与 IAM 结合使用](security_iam_service-with-iam.md)
+ [Amazon Elastic Container Registry 基于身份的策略示例](security_iam_id-based-policy-examples.md)
+ [使用基于标签的访问控制](ecr-supported-iam-actions-tagging.md)
+ [AWS Amazon 弹性容器注册表的托管策略](security-iam-awsmanpol.md)
+ [对 Amazon ECR 使用服务相关角色](using-service-linked-roles.md)
+ [排查 Amazon Elastic Container Registry 的身份和访问权限问题](security_iam_troubleshoot.md)

## 受众
<a name="security_iam_audience"></a>

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

## 使用身份进行身份验证
<a name="security_iam_authentication"></a>

身份验证是您 AWS 使用身份凭证登录的方式。您必须以 IAM 用户身份进行身份验证 AWS 账户根用户，或者通过担任 IAM 角色进行身份验证。

您可以使用来自身份源的证书 AWS IAM Identity Center （例如（IAM Identity Center）、单点登录身份验证或 Google/Facebook 证书，以联合身份登录。有关登录的更多信息，请参阅《AWS 登录 用户指南》**中的[如何登录您的 AWS 账户](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

对于编程访问， AWS 提供 SDK 和 CLI 来对请求进行加密签名。有关更多信息，请参阅*《IAM 用户指南》*中的[适用于 API 请求的AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 账户 root 用户
<a name="security_iam_authentication-rootuser"></a>

 创建时 AWS 账户，首先会有一个名为 AWS 账户 *root 用户的*登录身份，该身份可以完全访问所有资源 AWS 服务 和资源。我们强烈建议不要使用根用户进行日常任务。有关要求根用户凭证的任务，请参阅*《IAM 用户指南》*中的[需要根用户凭证的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### IAM 用户和群组
<a name="security_iam_authentication-iamuser"></a>

*[IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*是对某个人员或应用程序具有特定权限的一个身份。建议使用临时凭证，而非具有长期凭证的 IAM 用户。有关更多信息，请参阅 *IAM 用户指南*[中的要求人类用户使用身份提供商的联合身份验证才能 AWS 使用临时证书进行访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)指定一组 IAM 用户，便于更轻松地对大量用户进行权限管理。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 用户使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 AWS CLI 或 AWS API 操作来代入角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

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

您可以 AWS 通过创建策略并将其附加到 AWS 身份或资源来控制中的访问权限。策略定义了与身份或资源关联时的权限。 AWS 在委托人提出请求时评估这些政策。大多数策略都以 JSON 文档的 AWS 形式存储在中。有关 JSON 策略文档的更多信息，请参阅*《IAM 用户指南》*中的 [JSON 策略概述](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理员使用策略，通过定义哪个**主体**可以在什么**条件**下对哪些**资源**执行哪些**操作**来指定谁有权访问什么。

默认情况下，用户和角色没有权限。IAM 管理员创建 IAM 策略并将其添加到角色中，然后用户可以担任这些角色。IAM 策略定义权限，与执行操作所用的方法无关。

### 基于身份的策略
<a name="security_iam_access-manage-id-based-policies"></a>

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

基于身份的策略可以是*内联策略*（直接嵌入到单个身份中）或*托管策略*（附加到多个身份的独立策略）。要了解如何在托管策略和内联策略之间进行选择，请参阅*《IAM 用户指南》*中的[在托管策略与内联策略之间进行选择](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 基于资源的策略
<a name="security_iam_access-manage-resource-based-policies"></a>

基于资源的策略是附加到资源的 JSON 策略文档。示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

基于资源的策略是位于该服务中的内联策略。您不能在基于资源的策略中使用 IAM 中的 AWS 托管策略。

### 其他策略类型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支持其他策略类型，这些策略类型可以设置更常见的策略类型授予的最大权限：
+ **权限边界** – 设置基于身份的策略可以授予 IAM 实体的最大权限。有关更多信息，请参阅《 IAM 用户指南》**中的 [IAM 实体的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服务控制策略 (SCPs)**-在中指定组织或组织单位的最大权限 AWS Organizations。有关更多信息，请参阅《AWS Organizations 用户指南》**中的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **资源控制策略 (RCPs)**-设置账户中资源的最大可用权限。有关更多信息，请参阅《*AWS Organizations 用户指南》*中的[资源控制策略 (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **会话策略** – 在为角色或联合用户创建临时会话时，作为参数传递的高级策略。有关更多信息，请参阅《IAM 用户指南》**中的[会话策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多个策略类型
<a name="security_iam_access-manage-multiple-policies"></a>

当多个类型的策略应用于一个请求时，生成的权限更加复杂和难以理解。要了解在涉及多种策略类型时如何 AWS 确定是否允许请求，请参阅 *IAM 用户指南*中的[策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

# Amazon Elastic Container Registry 如何与 IAM 结合使用
<a name="security_iam_service-with-iam"></a>

在使用 IAM 管理对 Amazon ECR 的访问权限之前，您应该了解哪些 IAM 功能可用于 Amazon ECR。要全面了解 Amazon ECR 和其他 AWS 服务如何与 IAM 配合使用，请参阅 IAM *用户指南中的与 IAM 配合使用的AWS *[服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

**Topics**
+ [Amazon ECR 基于身份的策略](#security_iam_service-with-iam-id-based-policies)
+ [Amazon ECR 基于资源的策略](#security_iam_service-with-iam-resource-based-policies)
+ [基于 Amazon ECR 标签的授权](#security_iam_service-with-iam-tags)
+ [Amazon ECR IAM 角色](#security_iam_service-with-iam-roles)

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

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

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

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

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

Amazon ECR 中的策略操作在操作前面使用以下前缀：`ecr:`。例如，要授予某人使用 Amazon ECR `CreateRepository` API 操作创建 Amazon ECR 存储库的权限，您应将 `ecr:CreateRepository` 操作纳入其策略中。策略语句必须包含 `Action` 或 `NotAction` 元素。Amazon ECR 定义了一组自己的操作，以描述您可以使用该服务执行的任务。

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

```
"Action": [
      "ecr:action1",
      "ecr:action2"
```

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

```
"Action": "ecr:Describe*"
```



要查看 Amazon ECR 操作的列表，请参阅 *IAM 用户指南*中的 [Amazon Elastic Container Registry 的操作、资源和条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonelasticcontainerregistry.html)。

### 资源
<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": "*"
```



Amazon ECR 存储库资源具有以下 ARN：

```
arn:${Partition}:ecr:${Region}:${Account}:repository/${Repository-name}
```

有关格式的更多信息 ARNs，请参阅 [Amazon 资源名称 (ARNs) 和 AWS 服务命名空间](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。

例如，要在语句中指定 `us-east-1` 区域中的 `my-repo` 存储库，请使用以下 ARN：

```
"Resource": "arn:aws:ecr:us-east-1:123456789012:repository/my-repo"
```

要指定属于特定账户的所有存储库，请使用通配符 (\$1)：

```
"Resource": "arn:aws:ecr:us-east-1:123456789012:repository/*"
```

要在单个语句中指定多个资源，请 ARNs 用逗号分隔。

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

要查看 Amazon ECR 资源类型及其列表 ARNs，请参阅 *IAM 用户指南*中的[亚马逊弹性容器注册表定义的资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonelasticcontainerregistry.html#amazonelasticcontainerregistry-resources-for-iam-policies)。要了解您可以使用哪些操作指定每个资源的 ARN，请参阅 [Amazon Elastic Container Registry 定义的操作](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonelasticcontainerregistry.html#amazonelasticcontainerregistry-actions-as-permissions)。

### 条件键
<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)。

Amazon ECR 定义了自己的一组条件键，还支持使用一些全局条件键。要查看所有 AWS 全局条件键，请参阅 *IAM 用户指南*中的[AWS 全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。



大多数 Amazon ECR 操作都支持 `aws:ResourceTag` 和 `ecr:ResourceTag` 条件键。有关更多信息，请参阅 [使用基于标签的访问控制](ecr-supported-iam-actions-tagging.md)。

要查看 Amazon ECR 条件键的列表，请参阅 *IAM 用户指南*中的 [Amazon Elastic Container Registry 定义的条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonelasticcontainerregistry.html#amazonelasticcontainerregistry-policy-keys)。要了解您可以对哪些操作和资源使用条件键，请参阅 [Amazon Elastic Container Registry 定义的操作](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonelasticcontainerregistry.html#amazonelasticcontainerregistry-actions-as-permissions)。

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



要查看 Amazon ECR 基于身份的策略的示例，请参阅 [Amazon Elastic Container Registry 基于身份的策略示例](security_iam_id-based-policy-examples.md)。

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

基于资源的策略是 JSON 策略文档，它们指定了指定委托人可在 Amazon ECR 资源上执行的操作以及在什么条件下可执行。Amazon ECR 支持针对 Amazon ECR 存储库的基于资源的权限策略。基于资源的策略允许您基于资源向其他账户授予使用权限。您也可以使用基于资源的策略以允许 AWS 服务访问您的 Amazon ECR 存储库。

要启用跨账户访问，您可以将整个账户或其他账户中的 IAM 实体指定为[基于资源的策略中的委托人](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。将跨账户主体添加到基于资源的策略只是建立信任关系工作的一半而已。当委托人和资源位于不同的 AWS 账户中时，您还必须向委托人实体授予访问资源的权限。通过将基于身份的策略附加到实体以授予权限。但是，如果基于资源的策略向同一个账户中的主体授予访问权限，则在基于身份的策略中不需要额外的 Amazon ECR 存储库权限。有关更多信息，请参阅*《IAM 用户指南》* 中的 [IAM 角色与基于资源的策略有何不同](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html)。

Amazon ECR 服务仅支持一种类型的基于资源的策略（称为*容器策略*），这种策略附加到*存储库*。这个策略定义哪些委托人实体（账户、用户、角色和联合身份用户）可以在存储库上执行操作。要了解如何将基于资源的策略附加到存储库，请参阅[Amazon ECR 中的私有存储库策略](repository-policies.md)。

**注意**  
在 Amazon ECR 存储库策略中，策略元素 `Sid` 支持 IAM policy 所不支持的其他字符和间距。

### 示例
<a name="security_iam_service-with-iam-resource-based-policies-examples"></a>



要查看 Amazon ECR 基于资源的策略的示例，请参阅 [Amazon ECR 中的私有存储库策略示例](repository-policy-examples.md)，

## 基于 Amazon ECR 标签的授权
<a name="security_iam_service-with-iam-tags"></a>

您可以将标签附加到 Amazon ECR 资源，或者在请求中将标签传递给 Amazon ECR。要基于标签控制访问，您需要使用 `ecr:ResourceTag/key-name``aws:RequestTag/key-name` 或 `aws:TagKeys` 条件键在策略的[条件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供标签信息。有关标记 Amazon ECR 资源的更多信息，请参阅 [在 Amazon ECR 中标记私有存储库](ecr-using-tags.md)。

要查看基于身份的策略（用于根据资源上的标签来限制对该资源的访问）的示例，请参阅 [使用基于标签的访问控制](ecr-supported-iam-actions-tagging.md)。

## Amazon ECR IAM 角色
<a name="security_iam_service-with-iam-roles"></a>

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

### 将临时凭证用于 Amazon ECR
<a name="security_iam_service-with-iam-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)。

Amazon ECR 支持使用临时凭证。

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

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

Amazon ECR 支持服务相关角色。有关更多信息，请参阅 [对 Amazon ECR 使用服务相关角色](using-service-linked-roles.md)。

# Amazon Elastic Container Registry 基于身份的策略示例
<a name="security_iam_id-based-policy-examples"></a>

默认情况下，用户和角色没有创建或修改 Amazon ECR 资源的权限。要授予用户对所需资源执行操作的权限，IAM 管理员可以创建 IAM 策略。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

有关 Amazon ECR 定义的操作和资源类型（包括每种资源类型的格式）的详细信息，请参阅《 ARNs *服务授权参考*》中的 [Amazon Elastic Container Registry 的操作、资源和条件密钥](https://docs.aws.amazon.com/service-authorization/latest/reference/ecr.html)。

要了解如何使用这些示例 JSON 策略文档创建 IAM 基于身份的策略，请参阅《IAM 用户指南》**中的[在 JSON 选项卡上创建策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)。

**Topics**
+ [策略最佳实践](#security_iam_service-with-iam-policy-best-practices)
+ [使用 Amazon ECR 控制台](#security_iam_id-based-policy-examples-console)
+ [允许用户查看他们自己的权限](#security_iam_id-based-policy-examples-view-own-permissions)
+ [访问一个 Amazon ECR 存储库](#security_iam_id-based-policy-examples-access-one-bucket)

## 策略最佳实践
<a name="security_iam_service-with-iam-policy-best-practices"></a>

基于身份的策略确定某个人是否可以创建、访问或删除您账户中的 Amazon ECR 资源。这些操作可能会使 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)。

## 使用 Amazon ECR 控制台
<a name="security_iam_id-based-policy-examples-console"></a>

要访问 Amazon Elastic Container Registry 控制台，您必须具有一组最低的权限。这些权限必须允许您列出和查看有关您 AWS 账户中的 Amazon ECR 资源的详细信息。如果创建比必需的最低权限更为严格的基于身份的策略，对于附加了该策略的实体（用户或角色），控制台将无法按预期正常运行。

为确保这些实体仍然可以使用 Amazon ECR 控制台，请向实体添加`AmazonEC2ContainerRegistryReadOnly` AWS 托管策略。有关更多信息，请参阅 *IAM 用户指南*中的[为用户添加权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)：

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

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

## 允许用户查看他们自己的权限
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

该示例说明了您如何创建策略，以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上或使用 AWS CLI 或 AWS API 以编程方式完成此操作的权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## 访问一个 Amazon ECR 存储库
<a name="security_iam_id-based-policy-examples-access-one-bucket"></a>

在本示例中，您想向 AWS 账户中的用户授予访问您的 Amazon ECR 存储库的权限。`my-repo`您还希望允许用户推送、提取和列出镜像。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"GetAuthorizationToken",
         "Effect":"Allow",
         "Action":[
            "ecr:GetAuthorizationToken"
         ],
         "Resource":"*"
      },
      {
         "Sid":"ManageRepositoryContents",
         "Effect":"Allow",
         "Action":[
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:ListImages",
                "ecr:DescribeImages",
                "ecr:BatchGetImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage"
         ],
         "Resource":"arn:aws:ecr:us-east-1:123456789012:repository/my-repo"
      }
   ]
}
```

------

# 使用基于标签的访问控制
<a name="ecr-supported-iam-actions-tagging"></a>

利用 Amazon ECR `CreateRepository` API 操作，您可以在创建存储库时指定标签。有关更多信息，请参阅 [在 Amazon ECR 中标记私有存储库](ecr-using-tags.md)。

要使用户能够在创建存储桶时标记存储桶，用户必须有权使用创建资源的操作（例如，`ecr:CreateRepository`）。如果在资源创建操作中指定了标签，则 Amazon 会对 `ecr:CreateRepository` 操作执行额外的授权，以验证用户是否具备创建标签的权限。

您可以通过 IAM policy 来使用基于标签的访问控制。示例如下。

以下策略仅允许用户创建存储库或将其标记为 `key=environment,value=dev`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCreateTaggedRepository",
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/environment": "dev"
                }
            }
        },
        {
            "Sid": "AllowTagRepository",
            "Effect": "Allow",
            "Action": [
                "ecr:TagResource"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/environment": "dev"
                }
            }
        }
    ]
}
```

------

以下策略允许用户从所有存储库中提取映像，除非这些存储库标记为 `key=environment,value=prod`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ecr:ResourceTag/environment": "prod"
                }
            }
        }
    ]
}
```

------

# AWS Amazon 弹性容器注册表的托管策略
<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)。

Amazon ECR 提供了一些托管策略，您可以将它们附加到 IAM 身份或 Amazon EC2 实例。借助这些策略，您可对 Amazon ECR 资源和 API 操作的访问权限进行不同级别的控制。有关这些策略中提到的每个 API 操作的更多信息，请参阅 *Amazon Elastic Container Registry API 参考*中的[操作](https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_Operations.html)。

**Topics**
+ [Amazon EC2 ContainerRegistryFullAccess](#security-iam-awsmanpol-AmazonEC2ContainerRegistryFullAccess)
+ [Amazon EC2 ContainerRegistryPowerUser](#security-iam-awsmanpol-AmazonEC2ContainerRegistryPowerUser)
+ [Amazon EC2 ContainerRegistryPullOnly](#security-iam-awsmanpol-AmazonEC2ContainerRegistryPullOnly)
+ [Amazon EC2 ContainerRegistryReadOnly](#security-iam-awsmanpol-AmazonEC2ContainerRegistryReadOnly)
+ [`AWSECRPullThroughCache_ServiceRolePolicy`](#security-iam-awsmanpol-AWSECRPullThroughCache_ServiceRolePolicy)
+ [`ECRReplicationServiceRolePolicy`](#security-iam-awsmanpol-ECRReplicationServiceRolePolicy)
+ [`ECRTemplateServiceRolePolicy`](#security-iam-awsmanpol-ECRTemplateServiceRolePolicy)
+ [Amazon ECR 更新了托 AWS 管政策](#security-iam-awsmanpol-updates)

## Amazon EC2 ContainerRegistryFullAccess
<a name="security-iam-awsmanpol-AmazonEC2ContainerRegistryFullAccess"></a>

您可以将 `AmazonEC2ContainerRegistryFullAccess` 策略附加到 IAM 身份。该策略授予对 Amazon ECR 资源的管理访问权限，并授予 IAM 身份（例如用户、群组或角色）访问与 Amazon ECR 集成的 AWS 服务的访问权限，以使用所有 Amazon ECR 功能。使用此策略可以访问 AWS 管理控制台中提供的所有 Amazon ECR 功能。

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

## Amazon EC2 ContainerRegistryPowerUser
<a name="security-iam-awsmanpol-AmazonEC2ContainerRegistryPowerUser"></a>

您可以将 `AmazonEC2ContainerRegistryPowerUser` 策略附加到 IAM 身份。此策略授予管理权限，以允许 IAM 用户读写存储库，但不允许他们删除存储库或更改应用于存储库的策略文档。

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

## Amazon EC2 ContainerRegistryPullOnly
<a name="security-iam-awsmanpol-AmazonEC2ContainerRegistryPullOnly"></a>

您可以将 `AmazonEC2ContainerRegistryPullOnly` 策略附加到 IAM 身份。此策略授予从 Amazon ECR 提取容器映像的权限。如果注册表启用了缓存提取，则它还将允许从上游注册表导入映像的提取。

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

## Amazon EC2 ContainerRegistryReadOnly
<a name="security-iam-awsmanpol-AmazonEC2ContainerRegistryReadOnly"></a>

您可以将 `AmazonEC2ContainerRegistryReadOnly` 策略附加到 IAM 身份。此策略授予 Amazon ECR 的只读权限。这包括列出存储库及其中镜像的功能。它还包括使用 Docker CLI 从 Amazon ECR 提取镜像的功能。

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

## `AWSECRPullThroughCache_ServiceRolePolicy`
<a name="security-iam-awsmanpol-AWSECRPullThroughCache_ServiceRolePolicy"></a>

您不能将 `AWSECRPullThroughCache_ServiceRolePolicy` 托管的 IAM policy 附加到您的 IAM 实体。此策略附加到服务相关角色，该角色允许 Amazon ECR 通过缓存提取工作流将镜像推送到存储库。有关更多信息，请参阅 [用于缓存提取的 Amazon ECR 服务相关角色](slr-pullthroughcache.md)。

## `ECRReplicationServiceRolePolicy`
<a name="security-iam-awsmanpol-ECRReplicationServiceRolePolicy"></a>

您不能将 `ECRReplicationServiceRolePolicy` 托管的 IAM policy 附加到您的 IAM 实体。此附加到服务相关角色的策略允许 Amazon ECR 代表您执行操作。有关更多信息，请参阅 [对 Amazon ECR 使用服务相关角色](using-service-linked-roles.md)。

## `ECRTemplateServiceRolePolicy`
<a name="security-iam-awsmanpol-ECRTemplateServiceRolePolicy"></a>

您不能将 `ECRTemplateServiceRolePolicy` 托管的 IAM policy 附加到您的 IAM 实体。此附加到服务相关角色的策略允许 Amazon ECR 代表您执行操作。有关更多信息，请参阅 [对 Amazon ECR 使用服务相关角色](using-service-linked-roles.md)。

## Amazon ECR 更新了托 AWS 管政策
<a name="security-iam-awsmanpol-updates"></a>

查看自该服务开始跟踪这些更改以来对 Amazon ECR AWS 托管政策更新的详细信息。有关此页面更改的自动提示，请订阅 Amazon ECR 文档历史记录页面上的 RSS 源。

 


| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
|  [用于缓存提取的 Amazon ECR 服务相关角色](slr-pullthroughcache.md)：对现有策略的更新  |  Amazon ECR 将新权限添加到 `AWSECRPullThroughCache_ServiceRolePolicy` 策略。这些权限允许 Amazon ECR 从 ECR 私有注册表中提取映像。当使用提取缓存规则来缓存其他 Amazon ECR 私有注册表中的映像时，需要此类权限。  | 2025 年 3 月 12 日 | 
|  [亚马逊 EC2 ContainerRegistryPullOnly](#security-iam-awsmanpol-AmazonEC2ContainerRegistryPullOnly)-新政策  |  Amazon ECR 添加了一个新策略，用于向 Amazon ECR 授予仅提取权限。  | 2024 年 10 月 10 日 | 
|  [ECRTemplateServiceRolePolicy](slr-rct.md)：新策略  |  Amazon ECR 添加了新策略。此策略与用于存储库创建模板功能的 `ECRTemplateServiceRolePolicy` 服务相关角色关联。  | 2024 年 6 月 20 日 | 
|  [AWSECRPullThroughCache\$1ServiceRolePolicy](slr-pullthroughcache.md)：对现有策略的更新  |  Amazon ECR 将新权限添加到 `AWSECRPullThroughCache_ServiceRolePolicy` 策略。这些权限允许 Amazon ECR 检索 Secrets Manager 密钥的加密内容。当使用缓存提取规则来缓存需要身份验证的上游注册表中的映像时，需要此类权限。  | 2023 年 11 月 15 日 | 
|  [AWSECRPullThroughCache\$1ServiceRolePolicy](#security-iam-awsmanpol-AWSECRPullThroughCache_ServiceRolePolicy)：新策略  |  Amazon ECR 添加了新策略。此策略与用于缓存提取功能的 `AWSServiceRoleForECRPullThroughCache` 服务相关角色相关。  | 2021 年 11 月 29 日 | 
|  [ECRReplicationServiceRolePolicy](#security-iam-awsmanpol-ECRReplicationServiceRolePolicy)：新策略  |  Amazon ECR 添加了新策略。此策略与用于复制功能的 `AWSServiceRoleForECRReplication` 服务相关角色相关。  | 2020 年 12 月 4 日 | 
|  [亚马逊 EC2 ContainerRegistryFullAccess](#security-iam-awsmanpol-AmazonEC2ContainerRegistryFullAccess)-更新现有政策  |  Amazon ECR 将新权限添加到 `AmazonEC2ContainerRegistryFullAccess` 策略。这些权限允许委托人创建 Amazon ECR 服务相关角色。  | 2020 年 12 月 4 日 | 
|  [亚马逊 EC2 ContainerRegistryReadOnly](#security-iam-awsmanpol-AmazonEC2ContainerRegistryReadOnly)-更新现有政策  |  Amazon ECR 将新权限添加到 `AmazonEC2ContainerRegistryReadOnly` 策略，该策略允许委托人读取生命周期策略、列出标签以及描述镜像的扫描结果。  | 2019 年 12 月 10 日 | 
|  [亚马逊 EC2 ContainerRegistryPowerUser](#security-iam-awsmanpol-AmazonEC2ContainerRegistryPowerUser)-更新现有政策  |  Amazon ECR 将新权限添加到 `AmazonEC2ContainerRegistryPowerUser` 策略。这些权限允许委托人读取生命周期策略、列出标签以及描述镜像的扫描结果。  | 2019 年 12 月 10 日 | 
|  [亚马逊 EC2 ContainerRegistryFullAccess](#security-iam-awsmanpol-AmazonEC2ContainerRegistryFullAccess)-更新现有政策  |  Amazon ECR 将新权限添加到 `AmazonEC2ContainerRegistryFullAccess` 策略。它们允许校长查找由 CloudTrail捕获的管理事件或 AWS CloudTrail Insights 事件。  | 2017 年 11 月 10 日 | 
|  [亚马逊 EC2 ContainerRegistryReadOnly](#security-iam-awsmanpol-AmazonEC2ContainerRegistryReadOnly)-更新现有政策  |  Amazon ECR 将新权限添加到 `AmazonEC2ContainerRegistryReadOnly` 策略。这些权限允许委托人描述 Amazon ECR 镜像。  | 2016 年 10 月 11 日 | 
|  [亚马逊 EC2 ContainerRegistryPowerUser](#security-iam-awsmanpol-AmazonEC2ContainerRegistryPowerUser)-更新现有政策  |  Amazon ECR 将新权限添加到 `AmazonEC2ContainerRegistryPowerUser` 策略。这些权限允许委托人描述 Amazon ECR 镜像。  | 2016 年 10 月 11 日 | 
|  [亚马逊 EC2 ContainerRegistryReadOnly](#security-iam-awsmanpol-AmazonEC2ContainerRegistryReadOnly)-新政策  |  Amazon ECR 添加了一个新策略，用于向 Amazon ECR 授予只读权限。这些权限包括列出存储库及其中镜像的功能。它们还包括使用 Docker CLI 从 Amazon ECR 提取镜像的功能。  | 2015 年 12 月 21 日 | 
|  [亚马逊 EC2 ContainerRegistryPowerUser](#security-iam-awsmanpol-AmazonEC2ContainerRegistryPowerUser)-新政策  |  Amazon ECR 添加了一项新策略，该策略授予管理权限，从而允许用户读写存储库，但不允许他们删除存储库或更改应用于存储库的策略文档。  | 2015 年 12 月 21 日 | 
|  [亚马逊 EC2 ContainerRegistryFullAccess](#security-iam-awsmanpol-AmazonEC2ContainerRegistryFullAccess)-新政策  |  Amazon ECR 添加了新策略。此策略授予 Amazon ECR 的完全访问权限。  | 2015 年 12 月 21 日 | 
|  Amazon ECR 开始跟踪更改  |  Amazon ECR 已开始跟踪 AWS 托管策略的更改。  | 2021 年 6 月 24 日 | 

# 对 Amazon ECR 使用服务相关角色
<a name="using-service-linked-roles"></a>

Amazon Elastic Container Registry (Amazon ECR[) 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 角色，它与 Amazon ECR 直接相关。服务相关角色由 Amazon ECR 预定义。它包含该服务支持私有注册表的复制和缓存提取功能所需的所有权限。为注册表配置复制或缓存提取之后，系统会自动创建服务相关角色。有关更多信息，请参阅 [Amazon ECR 中的私有注册表设置](registry-settings.md)。

服务相关角色可让您更轻松地通过 Amazon ECR 设置复制和缓存提取。这是因为，使用该角色，您就不必手动添加所有必要的权限。Amazon ECR 定义其服务相关角色的权限，除非另外定义，否则只有 Amazon ECR 可以代入该角色。定义的权限包括信任策略和权限策略。不能将该权限策略附加到任何其他 IAM 实体。

只有先禁用注册表上的复制或缓存提取之后，才能删除相应的服务相关角色。这可以确保您不会无意中删除 Amazon ECR 对这些功能所需的权限。

有关支持服务相关角色的其他服务的信息，请参阅[与 IAM 配合使用的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。在此链接页面上，查找在**服务相关角色**列中具有**是**值的服务。选择**是**与查看该服务的服务相关角色文档的链接。

**Topics**
+ [Amazon ECR 服务相关角色支持的区域](#slr-regions)
+ [用于复制的 Amazon ECR 服务相关角色](slr-replication.md)
+ [用于缓存提取的 Amazon ECR 服务相关角色](slr-pullthroughcache.md)
+ [用于存储库创建模板的 Amazon ECR 服务相关角色](slr-rct.md)

## Amazon ECR 服务相关角色支持的区域
<a name="slr-regions"></a>

Amazon ECR 在提供 Amazon ECR 服务的所有区域支持使用服务相关角色。有关 Amazon ECR 区域可用性的更多信息，请参阅 [AWS 区域和端点](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

# 用于复制的 Amazon ECR 服务相关角色
<a name="slr-replication"></a>

Amazon ECR 使用名为的服务相关角色 **AWSServiceRoleForECRReplication**，该角色允许 Amazon ECR 跨多个账户复制映像。

## Amazon ECR 的服务相关角色权限
<a name="slr-permissions"></a>

 AWSServiceRoleForECRReplication 服务相关角色信任以下服务来代入该角色：
+ `replication.ecr.amazonaws.com`

以下 `ECRReplicationServiceRolePolicy` 角色权限策略允许 Amazon ECR 对资源使用以下操作：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository",
                "ecr:ReplicateImage"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**注意**  
`ReplicateImage` 是 Amazon ECR 用于复制的内部 API，不能直接调用。

必须配置权限，允许 IAM 实体（如用户、组或角色）创建、编辑或删除服务相关角色。有关更多信息，请参阅 *IAM 用户指南*中的[服务相关角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 为 Amazon ECR 创建服务相关角色
<a name="create-slr"></a>

无需手动创建 Amazon ECR 服务相关角色。当您在 AWS 管理控制台、或 AWS API 中为注册表配置复制设置时 AWS CLI，Amazon ECR 会为您创建服务相关角色。

如果您删除了此服务相关角色然后需要再次创建它，则可以使用相同的流程在您的账户中重新创建此角色。当您为注册表配置复制设置时，Amazon ECR 将再次为您创建服务相关角色。

## 为 Amazon ECR 编辑服务相关角色
<a name="edit-slr"></a>

Amazon ECR 不允许手动编辑 AWSServiceRoleForECRReplication 服务相关角色。在创建服务相关角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。不过，您可以使用 IAM 编辑角色的说明。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 为 Amazon ECR 删除服务相关角色
<a name="delete-slr"></a>

如果不再需要使用某个需要服务关联角色的功能或服务，我们建议您删除该角色。这样您就没有未被主动监控或维护的未使用实体。但是，您必须先删除每个区域中的注册表复制配置，才能手动删除服务相关角色。

**注意**  
如果您尝试删除资源，而 Amazon ECR 服务仍在使用角色，则删除操作可能会失败。如果发生这种情况，请等待几分钟，然后重试。

**删除使用的 Amazon ECR 资源 AWSService RoleFor ECRReplication**

1. 打开 Amazon ECR 控制台，网址为[https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/)。

1. 从导航栏中，选择为其设置复制配置的区域。

1. 在导航窗格中，选择**私有注册表**。

1. 在 **Private registry**（私有注册表）页面上的 **Replication configuration**（复制配置）部分，选择 **Edit**（编辑）。

1. 要删除所有复制规则，请选择 **Delete all**（全部删除）。此步骤需要确认。

**使用 IAM 手动删除服务关联角色**

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

# 用于缓存提取的 Amazon ECR 服务相关角色
<a name="slr-pullthroughcache"></a>

Amazon ECR 使用名为的服务相关角色 **AWSServiceRoleForECRPullThroughCache**，该角色允许 Amazon ECR 代表您执行操作以完成缓存提取操作。有关缓存提取的更多信息，请参阅[用于控制在缓存拉取、推送时创建或复制操作期间创建的存储库的模板](repository-creation-templates.md)。

## Amazon ECR 的服务相关角色权限
<a name="slr-pullthroughcache-permissions"></a>

**AWSServiceRoleForECRPullThroughCache**服务相关角色信任以下服务来代入该角色。
+ `pullthroughcache.ecr.amazonaws.com`

**权限详细信息**

`AWSECRPullThroughCache_ServiceRolePolicy` 权限策略附加到服务相关角色。此托管策略授权 Amazon ECR 执行以下操作。有关更多信息，请参阅 [`AWSECRPullThroughCache_ServiceRolePolicy`](security-iam-awsmanpol.md#security-iam-awsmanpol-AWSECRPullThroughCache_ServiceRolePolicy)。
+ `ecr` – 允许 Amazon ECR 服务提取映像并将映像推送到私有存储库。
+ `secretsmanager:GetSecretValue`— 允许 Amazon ECR 服务检索 AWS Secrets Manager 密钥的加密内容。当使用缓存提取规则在私有注册表中缓存需要身份验证的上游注册表中的映像时，需要此类权限。此权限仅适用于带 `ecr-pullthroughcache/` 名称前缀的密钥。

`AWSECRPullThroughCache_ServiceRolePolicy` 策略包含以下 JSON。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ECR",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage",
                "ecr:BatchGetImage",
                "ecr:BatchImportUpstreamImage",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetImageCopyStatus"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SecretsManager",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:ecr-pullthroughcache/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        }
    ]
}
```

------

必须配置权限，允许 IAM 实体（如用户、组或角色）创建、编辑或删除服务相关角色。有关更多信息，请参阅*《IAM 用户指南》*中的[服务关联角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 为 Amazon ECR 创建服务相关角色
<a name="slr-pullthroughcache-create"></a>

无需手动为缓存提取创建 Amazon ECR 服务相关角色。当您在 AWS 管理控制台、或 AWS API 中为私有注册表创建直通缓存规则时 AWS CLI，Amazon ECR 会为您创建服务相关角色。

如果您删除了此服务相关角色然后需要再次创建它，则可以使用相同的流程在您的账户中重新创建此角色。当您为私有注册表创建缓存提取规则时，如果服务相关角色尚不存在，则 Amazon ECR 将为您再次创建该角色。

## 为 Amazon ECR 编辑服务相关角色
<a name="slr-pullthroughcache-edit"></a>

Amazon ECR 不允许手动编辑**AWSServiceRoleForECRPullThroughCache**服务相关角色。在创建服务相关角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。不过，您可以使用 IAM 编辑角色的说明。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 为 Amazon ECR 删除服务相关角色
<a name="slr-pullthroughcache-delete"></a>

如果不再需要使用某个需要服务关联角色的功能或服务，我们建议您删除该角色。这样您就没有未被主动监控或维护的未使用实体。但是，您必须先删除每个区域中的注册表缓存提取规则，才能手动删除服务相关角色。

**注意**  
如果您尝试删除资源，而 Amazon ECR 服务仍在使用角色，则删除操作可能会失败。如果发生这种情况，请等待几分钟，然后重试。

**要删除 **AWSServiceRoleForECRPullThroughCache** 服务相关角色所使用的 Amazon ECR 资源**

1. 打开 Amazon ECR 控制台，网址为[https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/)。

1. 从导航栏中，选择创建缓存提取规则所在的区域。

1. 在导航窗格中，选择**私有注册表**。

1. 在 **Private registry**（私有注册表）页面上的 **Pull through cache configuration**（缓存提取配置）部分，选择 **Edit**（编辑）。

1. 对于您创建的每个缓存提取规则，选择该规则，然后选择 **Delete rule**（删除规则）。

**使用 IAM 手动删除服务关联角色**

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

# 用于存储库创建模板的 Amazon ECR 服务相关角色
<a name="slr-rct"></a>

Amazon ECR 使用名为的服务相关角色 **AWSServiceRoleForECRTemplate**，该角色授予 Amazon ECR 代表您执行操作以完成存储库创建模板操作的权限。

## Amazon ECR 的服务相关角色权限
<a name="slr-rct-permissions"></a>

**AWSServiceRoleForECRTemplate**服务相关角色信任以下服务来代入该角色。
+ `ecr.amazonaws.com`

**权限详细信息**

``ECRTemplateServiceRolePolicy`` 权限策略附加到服务相关角色。此托管策略授予 Amazon ECR 代表您执行存储库创建操作的权限。

`ECRTemplateServiceRolePolicy` 策略包含以下 JSON。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
	    "Sid": "CreateRepositoryWithTemplate",
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository"
            ],
            "Resource": "*"
        }
    ]
}
```

------

必须配置权限，允许 IAM 实体（如用户、组或角色）创建、编辑或删除服务相关角色。有关更多信息，请参阅*《IAM 用户指南》*中的[服务关联角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 为 Amazon ECR 创建服务相关角色
<a name="slr-rct-create"></a>

您无需为存储库创建模板手动创建 Amazon ECR 服务相关角色。当您在 AWS 管理控制台、或 AWS API 中为私有注册表创建存储库模板规则时 AWS CLI，Amazon ECR 会为您创建服务相关角色。

如果您删除了此服务相关角色然后需要再次创建它，则可以使用相同的流程在您的账户中重新创建此角色。当您为私有注册表创建存储库创建规则时，如果服务相关角色尚不存在，则 Amazon ECR 将为您再次创建该角色。

## 为 Amazon ECR 编辑服务相关角色
<a name="slr-rct-edit"></a>

Amazon ECR 不允许手动编辑**AWSServiceRoleForECRTemplate**服务相关角色。在创建服务相关角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。不过，您可以使用 IAM 编辑角色的说明。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 为 Amazon ECR 删除服务相关角色
<a name="slr-rct-delete"></a>

如果不再需要使用某个需要服务关联角色的功能或服务，我们建议您删除该角色。这样您就没有未被主动监控或维护的未使用实体。但是，您必须先删除每个区域中的注册表创建规则，才能手动删除服务相关角色。

**注意**  
如果您尝试删除资源，而 Amazon ECR 服务仍在使用角色，则删除操作可能会失败。如果发生这种情况，请等待几分钟，然后重试。

**要删除 **AWSServiceRoleForECRTemplate** 服务相关角色所使用的 Amazon ECR 资源**

1. 打开 Amazon ECR 控制台，网址为[https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/)。

1. 从导航栏中，选择您创建存储库创建规则所在的区域。

1. 在导航窗格中，选择**私有注册表**。

1. 在**私有注册表**页面上的**存储库创建模板**部分，选择**编辑**。

1. 对于您创建的每个存储库创建规则，选择该规则，然后选择**删除规则**。

**使用 IAM 手动删除服务关联角色**

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

# 排查 Amazon Elastic Container Registry 的身份和访问权限问题
<a name="security_iam_troubleshoot"></a>

可以使用以下信息，以帮助您诊断和修复在使用 Amazon ECR 和 IAM 时可能遇到的常见问题。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

要了解更多信息，请参阅以下内容：
+ 要了解 Amazon ECR 是否支持这些功能，请参阅 [Amazon Elastic Container Registry 如何与 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)。

# Amazon ECR 中的数据保护
<a name="data-protection"></a>

[责任 AWS 共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于亚马逊弹性容器服务中的数据保护。如本模型所述 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 或与 Amazon ECS 或其他机构 AWS CLI合作时 AWS SDKs。在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于计费或诊断日志。如果您向外部服务器提供 URL，强烈建议您不要在网址中包含凭证信息来验证对该服务器的请求。

**Topics**
+ [静态加密](encryption-at-rest.md)

# 静态加密
<a name="encryption-at-rest"></a>

**重要**  
 使用 AWS KMS (DSSE-KMS) 的双层服务器端加密仅在区域中 AWS GovCloud (US) 可用。

Amazon ECR 将镜像存储在 Amazon ECR 管理的 Amazon S3 存储桶中。默认情况下，Amazon ECR 使用具有 Amazon S3 托管加密密钥的服务器端加密，从而使用 AES-256 加密算法对静态数据进行加密。这不需要您采取任何行动，且不会另外收取费用。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[借助使用 Amazon S3 托管式加密密钥的服务器端加密 (SSE-S3) 保护数据](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html)。

为了更好地控制 Amazon ECR 存储库的加密，您可以使用服务器端加密，并使用存储在 AWS Key Management Service ()AWS KMS中的 KMS 密钥。在使用 AWS KMS 加密数据时，您可以使用由 Amazon ECR 管理的默认 AWS 托管式密钥密钥，也可以指定自己的 KMS 密钥（称为客户托管密钥）。有关更多信息，请参阅《*亚马逊简单存储服务*[用户指南》中的使用服务器端加密和存储在 AWS KMS (SSE-KMS) 中的 KMS 密钥保护数据](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html)。

 您可以选择使用双层服务器端加密（）对您的 Amazon ECR 映像应用两层加 AWS KMS 密。DSSE-KMS DSSE-KMS选项类似于SSE-KMS，但应用的是两个单独的加密层，而不是一层。有关更多信息，请参阅[使用带 AWS KMS 密钥的双层服务器端加密 (DSS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingDSSEncryption.html) E-KMS)。

每个 Amazon ECR 存储库都有一个加密配置，该配置在创建存储库时进行设置。您可以在每个存储库上使用不同的加密配置。有关更多信息，请参阅 [创建 Amazon ECR 私有存储库以存储映像](repository-create.md)。

在启用 AWS KMS 加密的情况下创建存储库时，将使用 KMS 密钥对存储库的内容进行加密。此外，Amazon ECR 还会向 KMS 密钥添加 AWS KMS 授权，并将 Amazon ECR 存储库作为被授权者委托人。

以下内容提供了对 Amazon ECR 如何与 AWS KMS 集成以加密和解密存储库的高层级理解：

1. 创建存储库时，Amazon ECR 会向发送[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)调用， AWS KMS 以验证和检索加密配置中指定的 KMS 密钥的亚马逊资源名称 (ARN)。

1. Amazon ECR 向发送了两个[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)请求 AWS KMS ，要求在 KMS 密钥上创建授权，以允许 Amazon ECR 使用数据密钥加密和解密数据。

1. 推送图像时，系统会向发出[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)请求 AWS KMS ，指定用于加密图像层和清单的 KMS 密钥。

1. AWS KMS 生成新的数据密钥，使用指定的 KMS 密钥对其进行加密，然后发送要与图像层元数据和图像清单一起存储的加密数据密钥。

1. 拉取图像时，会向发出[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求 AWS KMS，指定加密的数据密钥。

1. AWS KMS 解密加密的数据密钥并将解密后的数据密钥发送到 Amazon S3。

1. 数据密钥用于在提取镜像层之前对其进行解密。

1. 删除存储库后，Amazon ECR 会向发送两个[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)请求，要求停 AWS KMS 用为该存储库创建的授权。

## 注意事项
<a name="encryption-at-rest-considerations"></a>

在 Amazon ECR 中使用 AWS KMS 基于基础的加密（SSE-KMS或DSSE-KMS）时，应考虑以下几点。
+ 如果您创建采用 KMS 加密的 Amazon ECR 存储库，但未指定 KMS 密钥，则 Amazon ECR 会默认使用 AWS 托管式密钥 带有别名`aws/ecr`的。首次创建启用 KMS 加密的存储库时，在您的账户中创建此 KMS 密钥。
+  创建存储库后，将无法更改存储库加密配置。
+ 当您将 KMS 加密与自己的 KMS 密钥结合使用时，密钥必须与您的存储库位于同一个区域中。
+ Amazon ECR 代表您创建的授权不应被撤销。如果您撤销授予 Amazon ECR 使用您账户中 AWS KMS 密钥的权限，Amazon ECR 将无法访问这些数据、加密推送到存储库的新映像，也无法在提取时对其进行解密。当您撤销 Amazon ECR 授权时，更改将立即生效。要撤销访问权限，则应删除存储库，而不是撤销该授权。删除存储库后，Amazon ECR 会代表您停用授权。
+ 使用 AWS KMS 密钥需要付费。有关更多信息，请参阅[AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。
+ 使用双层服务器端加密将产生费用。有关更多信息，请参阅 [Amazon ECR 定价](https://aws.amazon.com/ecr/pricing/)。

## 所需的 IAM 权限
<a name="encryption-at-rest-iam"></a>

创建或删除使用 AWS KMS进行服务器端加密的 Amazon ECR 存储库时，所需的权限取决于您正在使用的特定 KMS 密钥。

### 使用适用于 Amazon ECR 时需要 AWS 托管式密钥 的 IAM 权限
<a name="encryption-aws-managed-key"></a>

默认情况下，如果为 Amazon ECR 存储库启用了 AWS KMS 加密，但未指定 KMS 密钥，则使用 AWS 托管式密钥 适用于 Amazon ECR 的。当使用 Amazon ECR 的 AWS托管 KMS 密钥加密存储库时，任何有权创建存储库的委托人也可以在存储库上启用 AWS KMS 加密。但是，删除存储库的 IAM 委托人必须具有 `kms:RetireGrant` 权限。这样可以停用创建存储库时添加到 AWS KMS 密钥中的授权。

以下示例 IAM policy 可作为内联策略添加到用户，以确保用户具有删除启用加密的存储库所需的最低权限。可以使用资源参数指定用于加密存储库的 KMS 密钥。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "ecr-kms-permissions",
    "Statement": [
        {
            "Sid": "AllowAccessToRetireTheGrantsAssociatedWithTheKey",
            "Effect": "Allow",
            "Action": [
                "kms:RetireGrant"
            ],
            "Resource": "arn:aws:kms:us-west-2:111122223333:key/b8d9ae76-080c-4043-92EXAMPLE"
        }
    ]
}
```

------

### 使用客户托管密钥时所需的 IAM 权限
<a name="encryption-customer-managed-key"></a>

使用客户托管密钥创建启用 AWS KMS 加密功能的存储库时，创建存储库的用户或角色必须拥有 KMS 密钥策略和 IAM 策略的权限。

创建自己的 KMS 密钥时，您可以使用原定设置密钥策略 AWS KMS 创建，也可以指定自己的密钥策略。为确保账户所有者可以管理客户托管的密钥，KMS 密钥的密钥策略应允许账户的根用户 AWS KMS 执行所有操作。可以向密钥策略添加额外的作用域权限，但至少应向根用户授予管理 KMS 密钥的权限。要允许 KMS 密钥仅用于源自 Amazon ECR 的请求，您可以将 kms[: ViaService 条件密钥与值](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)一起使用。`ecr.<region>.amazonaws.com`

以下示例密钥策略为拥有 KMS 密钥的 AWS 账户（根用户）提供了对 KMS 密钥的完全访问权限。有关此示例密钥策略的更多信息，请参阅*AWS Key Management Service 开发人员指南*[中的允许访问 AWS 账户和启用 IAM 策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-root-enable-iam)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "ecr-key-policy",
    "Statement": [
        {
            "Sid": "EnableIAMUserPermissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        }
    ]
}
```

------

除了必要的 Amazon ECR 权限外，创建存储库的 IAM 用户`kms:CreateGrant``kms:RetireGrant`、IAM 角色或 AWS 账户还必须拥有、和`kms:DescribeKey`权限。

**注意**  
`kms:RetireGrant` 权限必须添加到创建存储库的用户或角色的 IAM policy 中。`kms:CreateGrant` 和 `kms:DescribeKey` 权限可以添加到 KMS 密钥的密钥策略或创建存储库的用户或角色的 IAM policy 中。有关 AWS KMS 权限工作原理的更多信息，请参阅《*AWS Key Management Service 开发者指南》*中的 [AWS KMS API 权限：操作和资源参考](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html)。

以下示例 IAM policy 可作为内联策略添加到用户，以确保用户拥有创建启用加密的存储库所需的最低权限，并在完成存储库时删除存储库。可以使用资源参数指定用于加密存储库的 AWS KMS key 。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "ecr-kms-permissions",
    "Statement": [
        {
            "Sid": "AllowAccessToCreateAndRetireTheGrantsAssociatedWithTheKeyAsWellAsDescribeTheKey",
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:RetireGrant",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:us-west-2:111122223333:key/b8d9ae76-080c-4043-92EXAMPLE"
        }
    ]
}
```

------

### 创建存储库时，允许用户在控制台中列出 KMS 密钥
<a name="encryption-at-rest-iam-example"></a>

使用 Amazon ECR 控制台创建存储库时，您可以授予权限，允许用户在启用存储库加密时于区域中列出客户托管的 KMS 密钥。以下 IAM policy 示例显示了使用控制台时列出 KMS 密钥和别名所需的权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:ListKeys",
      "kms:ListAliases",
      "kms:DescribeKey"
    ],
    "Resource": "*"
  }
}
```

------

## 监控 Amazon ECR 与之的互动 AWS KMS
<a name="encryption-at-rest-monitoring"></a>

您可以使用 AWS CloudTrail 来跟踪 Amazon ECR 代表您发送 AWS KMS 的请求。日志中的 CloudTrail 日志条目包含加密上下文密钥，便于识别。

### Amazon ECR 加密上下文
<a name="ecr-encryption-context"></a>

*加密上下文* 是一组包含任意非机密数据的键值对。当您在加密数据的请求中包含加密上下文时，会以加密 AWS KMS 方式将加密上下文绑定到加密数据。要解密数据，您必须传入相同的加密上下文。

在对的请求[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)和[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求中， AWS KMS Amazon ECR 使用具有两个名称值对的加密上下文，用于标识存储库和正在使用的 Amazon S3 存储桶。如以下示例所示。名称不会变化，但与其组合的加密上下文会因每个值而异。

```
"encryptionContext": {
    "aws:s3:arn": "arn:aws:s3:::us-west-2-starport-manifest-bucket/EXAMPLE1-90ab-cdef-fedc-ba987BUCKET1/sha256:a7766145a775d39e53a713c75b6fd6d318740e70327aaa3ed5d09e0ef33fc3df",
    "aws:ecr:arn": "arn:aws:ecr:us-west-2:111122223333:repository/repository-name"
}
```

您可以使用加密上下文在审计记录和日志（例如和 Amazon CloudWatch Logs）中识别这些加密操作，并作为策略和授权中的授权条件。[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)

Amazon ECR 加密上下文包含两个名称–值对。
+ **aws:s3:arn** – 第一个名称 - 值对标识存储桶。键是 `aws:s3:arn`。值是 Amazon S3 存储桶的 Amazon Resource Name (ARN)。

  ```
  "aws:s3:arn": "ARN of an Amazon S3 bucket"
  ```

  例如，如果存储桶的 ARN 是 `arn:aws:s3:::us-west-2-starport-manifest-bucket/EXAMPLE1-90ab-cdef-fedc-ba987BUCKET1/sha256:a7766145a775d39e53a713c75b6fd6d318740e70327aaa3ed5d09e0ef33fc3df`，加密上下文将包括以下对。

  ```
  "arn:aws:s3:::us-west-2-starport-manifest-bucket/EXAMPLE1-90ab-cdef-fedc-ba987BUCKET1/sha256:a7766145a775d39e53a713c75b6fd6d318740e70327aaa3ed5d09e0ef33fc3df"
  ```
+ **aws:ecr:arn** – 第二个名称 - 值对标识存储库的 Amazon Resource Name (ARN)。键是 `aws:ecr:arn`。值是存储库的 ARN。

  ```
  "aws:ecr:arn": "ARN of an Amazon ECR repository"
  ```

  例如，如果储存库的 ARN 是 `arn:aws:ecr:us-west-2:111122223333:repository/repository-name`，加密上下文将包括以下对。

  ```
  "aws:ecr:arn": "arn:aws:ecr:us-west-2:111122223333:repository/repository-name"
  ```

## 问题排查
<a name="encryption-at-rest-troubleshooting"></a>

使用控制台删除 Amazon ECR 存储库时，如果存储库已成功删除，但 Amazon ECR 无法停用添加到存储库 KMS 密钥的授权，您将收到以下错误消息。

```
The repository [{repository-name}] has been deleted successfully but the grants created by the kmsKey [{kms_key}] failed to be retired
```

发生这种情况时，您可以自己取消对存储库的 AWS KMS 授权。

**手动取消对存储库的 AWS KMS 授权**

1. 列出用于存储库的 AWS KMS 密钥的授权。`key-id` 值包含在您从控制台收到的错误中。您还可以使用`list-keys`命令列出账户中特定区域中的客户托管的 KMS 密钥 AWS 托管式密钥 和客户托管的 KMS 密钥。

   ```
   aws kms list-grants \
        --key-id b8d9ae76-080c-4043-9237-c815bfc21dfc 
        --region us-west-2
   ```

   输出包括 `EncryptionContextSubset` 以及存储库的 Amazon Resource Name (ARN)。这可用于确定添加到密钥中的哪个授权是您想要停用的授权。`GrantId` 值将在下一步中停用授权时使用。

1. 取消为存储库添加的 AWS KMS 密钥的每项授权。将的值替换为*GrantId*上一步输出中的授权 ID。

   ```
   aws kms retire-grant \
        --key-id b8d9ae76-080c-4043-9237-c815bfc21dfc \
        --grant-id GrantId \
        --region us-west-2
   ```

# Amazon Elastic Container Registry 的合规性验证
<a name="ecr-compliance"></a>

要了解是否属于特定合规计划的范围，请参阅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/)。

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

作为一项托管服务，Amazon 弹性容器注册表受 AWS 全球网络安全的保护。有关 AWS 安全服务以及如何 AWS 保护基础设施的信息，请参阅[AWS 云安全](https://aws.amazon.com/security/)。要使用基础设施安全的最佳实践来设计您的 AWS 环境，请参阅 S * AWS ecurity Pillar Well-Architected Fram* ework 中的[基础设施保护](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 已发布的 API 调用通过网络访问 Amazon ECR。客户端必须支持以下内容：
+ 传输层安全性协议（TLS）。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 具有完全向前保密（PFS）的密码套件，例如 DHE（临时 Diffie-Hellman）或 ECDHE（临时椭圆曲线 Diffie-Hellman）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。

您可以从任何网络位置调用这些 API 操作，但 Amazon ECR 不支持基于资源的访问策略，其中可以包含基于源 IP 地址的限制。您还可以使用亚马逊 ECR 策略来控制来自特定亚马逊虚拟私有云（亚马逊 VPC）终端节点或特定 VPCs终端节点的访问。实际上，这可以将对给定 Amazon ECR 资源的网络访问与网络中的特定 VPC 隔离开来。 AWS 有关更多信息，请参阅 [Amazon ECR 接口 VPC 终端节点 ()AWS PrivateLink](vpc-endpoints.md)。

# Amazon ECR 接口 VPC 终端节点 ()AWS PrivateLink
<a name="vpc-endpoints"></a>

您可以将 Amazon ECR 配置为使用接口 VPC 端点以改善 VPC 的安全状况。VPC 终端节点由一项技术提供支持 AWS PrivateLink，该技术使您能够 APIs 通过私有 IP 地址（两者 IPv4 兼有 IPv6）私有访问 Amazon ECR。 AWS PrivateLink 将您的 VPC 和 Amazon ECR 之间的所有网络流量限制到亚马逊网络。您无需互联网网关、NAT 设备或虚拟私有网关。

有关 AWS PrivateLink 和 VPC 终端节点的更多信息，请参阅 *Amazon VPC 用户指南中的 VPC* [终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)。

## Amazon ECR VPC 端点的注意事项
<a name="ecr-vpc-endpoint-considerations"></a>

在为 Amazon ECR 配置 VPC 端点之前，请注意以下事项：
+ 要允许 Amazon EC2 实例上托管的 Amazon ECR 任务从 Amazon ECR 中提取私有映像，请为 Amazon ECS 创建接口 VPC 端点。有关更多信息，请参阅《*亚马逊弹性容器服务开发者指南*》中的[接口 VPC 终端节点 (AWS PrivateLink)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/vpc-endpoints.html)。
+ 从 Amazon ECR 提取容器镜像的 Amazon ECS 任务（在 Fargate 上托管）可以通过向其任务的任务执行 IAM 角色添加条件键，限制对其任务使用的特定 VPC 和服务使用的 VPC 端点的访问。有关更多信息，请参阅 *Amazon Elastic Container Service 开发人员指南*中的[用于通过接口端点提取 Amazon ECR 镜像的 Fargate 任务的可选 IAM 权限](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)。
+ 附加到 VPC 端点的安全组必须允许端口 443 上来自 VPC 的私有子网的传入连接。
+ Amazon ECR VPC 终端节点支持双堆栈（IPv4 和 IPv6）连接。当您创建双栈 VPC 终端节点时，它可以处理通过这两个地址 IPv4 和 IPv6私有 IP 地址的流量。
+ VPC 终端节点通过位于美国东部（弗吉尼亚北部） AWS 的 API SDK 终端节点支持 Amazon ECR 公共存储库。
+ VPC 终端节点仅支持通过 Amazon Route 53 AWS 提供的 DNS。如果您希望使用自己的 DNS，可以使用条件 DNS 转发。有关更多信息，请参阅 *Amazon VPC 用户指南*中的 [DHCP 选项集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。
+ 如果您的容器具有与 Amazon S3 的现有连接，则在添加 Amazon S3 网关端点时，其连接可能会短暂中断。要避免此中断，请创建一个使用 Amazon S3 网关端点的新 VPC，然后将 Amazon ECS 集群及其容器迁移到该新 VPC。
+ 首次使用缓存提取规则提取镜像时，如果您已将 Amazon ECR 配置为通过 AWS PrivateLink 使用接口 VPC 端点，您需要在同一个 VPC 中创建一个带有 NAT 网关的公有子网，然后将至互联网的所有出站流量从私有子网路由到 NAT 网关，才能使提取操作正常工作。后续的镜像提取不需要此操作。有关更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南*中的[场景：从私有子网访问互联网](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#public-nat-internet-access)。
+ 对于需要通过 FIPS 140-3 验证的加密模块的工作负载，Amazon ECR 支持 VPC 终端节点的 FIPS 终端节点。

### Windows 镜像注意事项
<a name="ecr-vpc-endpoint-windows-considerations"></a>

基于 Windows 操作系统的镜像包括受许可证限制而无法分发的构件。预设情况下，当您将 Windows 镜像推送到 Amazon ECR 存储库时，包含这些构件的层不会被推送，因为它们被视为*外部层*。当构件由 Microsoft 提供时，将从 Microsoft Azure 基础设施中检索外部层。因此，要使容器能够从 Azure 中提取这些外部层，除了创建 VPC 端点之外，还需要执行其他步骤。

当您将 Windows 镜像推送到 Amazon ECR 时，可以通过使用 Docker 守护进程中的 `--allow-nondistributable-artifacts` 标记覆盖此行为。启用后，此标记会将许可层推送到 Amazon ECR，从而使这些镜像可以通过 VPC 端点从 Amazon ECR 提取，而无需额外访问 Azure。

**重要**  
使用 `--allow-nondistributable-artifacts` 标记不会排除您遵守 Windows 容器基础镜像许可证条款的义务；您不能发布 Windows 内容以供公共或第三方重新分发。允许在您自己的环境中使用。

要在 Docker 安装中启用此标记，您必须修改 Docker 守护进程配置文件，根据您的 Docker 安装，该配置文件通常可以在 **Docker Engine** 部分下的设置或首选项菜单中配置，也可以通过直接编辑 `C:\ProgramData\docker\config\daemon.json` 文件配置。

以下是所需配置的示例。将值替换为要将镜像推送到其中的存储库 URI。

```
{
    "allow-nondistributable-artifacts": [
        "111122223333.dkr.ecr.us-west-2.amazonaws.com"
    ]
}
```

修改 Docker 守护进程配置文件后，您必须在尝试推送镜像之前重新启动 Docker 守护进程。通过验证基础层是否推送到您的存储库，确认推送工作运转正常。

**注意**  
Windows 镜像的基础层很庞大。层太大将导致延长推送时间，并在 Amazon ECR 中增加这些镜像的存储成本。出于这些原因，我们建议仅在严格要求此选项以减少构建时间和持续存储成本时使用此选项。例如，在 Amazon ECR 中压缩之后，`mcr.microsoft.com/windows/servercore` 镜像的大小约为 1.7 GiB。

## 为 Amazon ECR 创建 VPC 端点
<a name="ecr-setting-up-vpc-create"></a>

要为 Amazon ECR 服务创建 VPC 端点，请使用 *Amazon VPC 用户指南*中的[创建接口端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)过程。

Amazon ECR VPC 终端节点支持双堆栈（IPv4 和 IPv6）连接。当您创建双栈 VPC 终端节点时，它会自动处理通过这两个地址 IPv4 和 IPv6 私有 IP 地址的流量。终端节点将根据您的客户端的网络配置和终端节点的功能，使用相应的 IP 版本路由流量。

如果您现有 IPv4仅限使用的 VPC 终端节点并希望迁移到双堆栈终端节点，则可以修改现有终端节点以支持双堆栈连接，或者创建新的双堆栈终端节点。创建或修改终端节点时，请确保您的 VPC 和子网支持您要使用的 IP 版本。创建双堆栈端点后，端点将同时支持 IPv4 和。 IPv6

在 Amazon EC2 实例上托管的 Amazon ECS 任务需要 Amazon ECR 端点和 Amazon S3 网关端点。

使用平台版本 `1.4.0` 或更高版本在 Fargate 上托管的 Amazon ECS 任务需要 Amazon ECR VPC 端点和 Amazon S3 网关端点。

**托管在 Fargate 上且使用平台版本`1.3.0`或更早版本的 Amazon ECS 任务只需要使用 com.amazonaws。 *region*.ecr.dkr 亚马逊 ECR** VPC 终端节点和亚马逊 S3 网关终端节点。

**注意**  
创建端点的顺序无关紧要。

**com.amazonaws。 *region*.ecr.dkr**  
此端点用于 Docker 注册表 APIs。诸如 `push` 和 `pull` 这样的 Docker 客户端命令使用此端点。  
在创建此端点时，您必须启用私有 DNS 主机名。为此，请确保在创建 VPC 端点时，在 Amazon VPC 控制台中选择**启用私有 DNS 名称**选项。  
**对于符合 FIPS 140-3 的连接，请使用 FIPS 终端节点名称 com.amazonaws。 *region*.ecr-fips.dkr**

**com.amazonaws。 *region*.ecr.api**  
指定的*region*表示 Amazon ECR 支持的 AWS 区域（例如`us-east-2`美国东部（俄亥俄州）地区的区域标识符。
**对于符合 FIPS 140-3 的连接，请使用 FIPS 端点名称：com.amazonaws。 ***region***.ecr-fips.dkr 和 com.amazonaws。 *region*.ecr-fips.api。**  
此端点用于对 Amazon ECR API 执行的调用。API 操作（如 `DescribeImages` 和 `CreateRepository`）转到此端点。  
在创建此端点时，您可以选择启用私有 DNS 主机名。在创建 VPC 端点时，通过在 VPC 控制台中选择**启用私有 DNS 名称**，可启用此设置。如果您为 VPC 终端节点启用私有 DNS 主机名，请将您的 SDK 或更新 AWS CLI 到最新版本，以便在使用 SDK 或 AWS CLI 时无需指定终端节点 URL。  
**对于符合 FIPS 140-3 的连接，请使用 FIPS 终端节点名称 com.amazonaws。 *region*.ecr-fips.api。**  
如果您启用私有 DNS 主机名并且使用的是 2019 年 1 月 24 日之前发布的 SDK 或 AWS CLI 版本，则必须使用`--endpoint-url`参数来指定接口终端节点。以下示例显示了端点 URL 的格式。  

```
aws ecr create-repository --repository-name name --endpoint-url https://api.ecr.region.amazonaws.com
```
如果您不为 VPC 端点启用私有 DNS 主机名，则必须使用 `--endpoint-url` 参数并指定接口端点的 VPC 端点 ID。以下示例显示了端点 URL 的格式。  

```
aws ecr create-repository --repository-name name --endpoint-url https://VPC_endpoint_ID.api.ecr.region.vpce.amazonaws.com
```
对于符合 FIPS 140-3 的连接，请使用 FIPS 端点网址：  

```
aws ecr create-repository --repository-name name --endpoint-url https://api.ecr-fips.region.amazonaws.com
```

## 创建 Amazon S3 网关端点
<a name="ecr-setting-up-s3-gateway"></a>

对于从 Amazon ECR 提取私有镜像的 Amazon ECS 任务，您必须为 Amazon S3 创建网关端点。必须创建网关端点，因为 Amazon ECR 使用 Amazon S3 来存储您的镜像层。当容器从 Amazon ECR 下载镜像时，它们必须访问 Amazon ECR 才能获取镜像清单，然后 Amazon S3 才能下载实际镜像层。以下是包含每个 Docker 镜像层的 Amazon S3 存储桶的 Amazon Resource Name (ARN)。

```
arn:aws:s3:::prod-region-starport-layer-bucket/*
```

**注意**  
如果为 Amazon ECR 创建双堆栈 VPC 终端节点，则还需要创建双堆栈 Amazon S3 网关或接口终端节点。有关详细信息，请参阅 [S3 文档](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#privatelink-ip-address-types)。

使用 *Amazon VPC 用户指南*中的[创建网关端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-gateway.html#create-gateway-endpoint)过程为 Amazon ECR 创建以下 Amazon S3 网关端点。在创建端点时，请务必为您的 VPC 选择路由表。

**com.amazonaws。 *region*.s3**  
Amazon S3 网关端点使用 IAM policy 文档来限制对服务的访问。可以使用**完全访问权限**策略，因为您在任务 IAM 角色或其他 IAM 用户策略中设置的任何限制仍然适用于此策略。如果要将 Amazon S3 存储桶访问权限限制为使用 Amazon ECR 所需的最低权限，请参阅 [Amazon ECR 的 Amazon S3 存储桶最低权限](#ecr-minimum-s3-perms)。

### Amazon ECR 的 Amazon S3 存储桶最低权限
<a name="ecr-minimum-s3-perms"></a>

Amazon S3 网关端点使用 IAM policy 文档来限制对服务的访问。要仅允许 Amazon ECR 的 Amazon S3 存储桶最低权限，请在为端点创建 IAM policy 文档时，限制对 Amazon ECR 使用的 Amazon S3 存储桶的访问权限。

下表描述了 Amazon ECR 所需的 Amazon S3 存储桶策略权限。


| 权限 | 说明 | 
| --- | --- | 
|  `arn:aws:s3:::prod-region-starport-layer-bucket/*`  |  提供对包含每个 Docker 镜像层的 Amazon S3 存储桶的访问权限。表示 Amazon ECR 支持的 AWS 区域的区域标识符，例如美国东部（俄亥俄）区域的 `us-east-2`。  | 

#### 示例
<a name="ecr-minimum-s3-perms-example"></a>

以下示例说明如何提供对 Amazon ECR 操作所需的 Amazon S3 存储桶的访问权限。

```
{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::prod-region-starport-layer-bucket/*"]
    }
  ]
}
```

## 创建 CloudWatch 日志端点
<a name="ecr-setting-up-cloudwatch-logs"></a>

**使用 Fargate 启动类型的 Amazon ECS 任务需要您创建 com.amazonaws，这些任务使用没有互联网网关的 VPC，同时使用`awslogs` CloudWatch 日志驱动程序向日志发送日志信息。 *region*.logs** 接口 VPC CloudWatch 日志终端节点。有关更多信息，请参阅 *Amazon CloudWatch Logs 用户指南*中的将[ CloudWatch 日志与接口 VPC 终端节点配合使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch-logs-and-interface-VPC.html)。

## 为 Amazon ECR VPC 端点创建端点策略
<a name="ecr-vpc-endpoint-policy"></a>

VPC 端点策略是一种 IAM 资源策略，您在创建或修改端点时可将它附加到端点。如果您在创建终端节点时未附加策略， AWS 则会为您附加允许完全访问服务的默认策略。端点策略不会覆盖或替换用户策略或服务特定的策略。这是一个单独的策略，用于控制从端点中对指定服务进行的访问。端点策略必须采用 JSON 格式编写。有关更多信息，请参阅**《Amazon VPC 用户指南》中的[使用 VPC 端点控制对服务的访问权限](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。

我们建议您创建一个 IAM 资源策略，并将该策略同时附加到两个 Amazon ECR VPC 端点。

下面是用于 Amazon ECR 的端点策略示例。此策略允许特定 IAM 角色从 Amazon ECR 中提取镜像。

```
{
	"Statement": [{
		"Sid": "AllowPull",
		"Principal": {
			"AWS": "arn:aws:iam::1234567890:role/role_name"
		},
		"Action": [
			"ecr:BatchGetImage",
			"ecr:GetDownloadUrlForLayer",
                    "ecr:GetAuthorizationToken"
		],
		"Effect": "Allow",
		"Resource": "*"
	}]
}
```

下面的端点策略示例阻止删除指定的存储库。

```
{
	"Statement": [{
			"Sid": "AllowAll",
			"Principal": "*",
			"Action": "*",
			"Effect": "Allow",
			"Resource": "*"
		},
		{
			"Sid": "PreventDelete",
			"Principal": "*",
			"Action": "ecr:DeleteRepository",
			"Effect": "Deny",
			"Resource": "arn:aws:ecr:region:1234567890:repository/repository_name"
		}
	]
}
```

下面的端点策略示例将前面的两个示例组合到一个策略中。

```
{
	"Statement": [{
			"Sid": "AllowAll",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "*",
			"Resource": "*"
		},
		{
			"Sid": "PreventDelete",
			"Effect": "Deny",
			"Principal": "*",
			"Action": "ecr:DeleteRepository",
			"Resource": "arn:aws:ecr:region:1234567890:repository/repository_name"
		},
		{
			"Sid": "AllowPull",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::1234567890:role/role_name"
			},
			"Action": [
				"ecr:BatchGetImage",
				"ecr:GetDownloadUrlForLayer",
                          "ecr:GetAuthorizationToken"
			],
			"Resource": "*"
		}
	]
}
```

**修改 Amazon ECR 的 VPC 端点策略**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择**端点**。

1. 如果您没有为 Amazon ECR 创建 VPC 端点，请参阅 [为 Amazon ECR 创建 VPC 端点](#ecr-setting-up-vpc-create)。

1. 选择要将策略添加到的 Amazon ECR VPC 端点，然后在屏幕的下半部分中选择**策略选项卡**。

1. 选择**编辑策略**并对策略进行更改。

1. 选择**保存**以保存策略。

## 共享子网
<a name="ecr-vpc-endpoint-shared-subnets"></a>

您无法在与您共享的子网中创建、描述、修改或删除 VPC 端点。但是，您可以在与您共享的子网中使用 VPC 端点。

# 防止跨服务混淆座席
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理问题是一个安全性问题，即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在中 AWS，跨服务模仿可能会导致混乱的副手问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务，使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况， AWS 提供可帮助您保护所有服务的数据的工具，而这些服务中的服务主体有权限访问账户中的资源。

我们建议在资源策略中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 或 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件上下文键，以限制 Amazon ECR 为其他服务提供的资源访问权限。如果您只希望将一个资源与跨服务访问相关联，请使用。`aws:SourceArn`如果您想允许该账户中的任何资源与跨服务使用操作相关联，请使用。`aws:SourceAccount`

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

如果 `aws:SourceArn` 值不包含账户 ID，例如 Amazon S3 存储桶 ARN，您必须使用两个全局条件上下文键来限制权限。

`aws:SourceArn` 的值必须为 ResourceDescription。

以下示例展示了如何使用 Amazon ECR 存储库策略中的`aws:SourceArn`和`aws:SourceAccount`全局条件上下文密钥来允许 AWS CodeBuild 访问与该服务集成所必需的 Amazon ECR API 操作，同时还可以防止出现混乱的代理问题。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"CodeBuildAccess",
         "Effect":"Allow",
         "Principal":{
            "Service":"codebuild.amazonaws.com"
         },
         "Action":[
            "ecr:BatchGetImage",
            "ecr:GetDownloadUrlForLayer"
         ],
         "Resource": "*",
         "Condition":{
            "ArnLike":{
               "aws:SourceArn":"arn:aws:codebuild:us-east-1:123456789012:project/project-name"
            },
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
            }
         }
      }
   ]
}
```

------