

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

# Amazon ECR 中的私有存储库策略示例
<a name="repository-policy-examples"></a>

**重要**  
此页面上的存储库策略示例旨在应用于 Amazon ECR 私有存储库。如果直接与 IAM 主体结合使用，这些存储库策略将无法正常工作，除非进行修改，将 Amazon ECR 存储库指定为资源。有关如何设置存储库策略的更多信息，请参阅[在 Amazon ECR 中设置私有存储库策略声明](set-repository-policy.md)。

Amazon ECR 存储库策略是 IAM policy 的一部分，这些策略专用于控制对单个 Amazon ECR 存储库的访问。IAM policy 通常用于应用针对整个 Amazon ECR 服务的权限，但也可用于控制对特定资源的访问。有关更多信息，请参阅 [存储库策略与 IAM policy](repository-policies.md#repository-policy-vs-iam-policy)。

以下存储库策略示例显示了可用于控制对 Amazon ECR 私有存储库的访问权限的权限声明。

**重要**  
Amazon ECR 要求用户有权通过 IAM policy 调用 `ecr:GetAuthorizationToken` API，然后才能对注册表进行身份验证并从任意 Amazon ECR 存储库推送或提取任意镜像。Amazon ECR 提供了多个托管 IAM 策略来控制不同级别的用户访问。有关更多信息，请参阅 [Amazon Elastic Container Registry 基于身份的策略示例](security_iam_id-based-policy-examples.md)。

## 示例：允许一个或多个 用户
<a name="IAM_within_account"></a>

以下存储库策略允许一个或多个 用户向存储库推送和从存储库提取映像。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPushPull",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/push-pull-user-1",
                    "arn:aws:iam::111122223333:user/push-pull-user-2"
                ]
            },
            "Action": [
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability",
                "ecr:CompleteLayerUpload",
                "ecr:GetDownloadUrlForLayer",
                "ecr:InitiateLayerUpload",
                "ecr:PutImage",
                "ecr:UploadLayerPart"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 示例：允许其他账户
<a name="IAM_allow_other_accounts"></a>

以下存储库策略允许特定账户推送镜像。

**重要**  
您授予权限的账户必须启用所创建存储库策略的区域，否则将发生错误。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCrossAccountPush",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:CompleteLayerUpload",
                "ecr:InitiateLayerUpload",
                "ecr:PutImage",
                "ecr:UploadLayerPart"
            ],
            "Resource": "*"
        }
    ]
}
```

------

以下存储库策略允许某些用户拉取图像（*pull-user-1*和*pull-user-2*），同时提供对另一个存储库的完全访问权限（*admin-user*）。

**注意**  
对于目前不支持的更复杂的存储库策略 AWS 管理控制台，您可以使用[https://docs.aws.amazon.com/cli/latest/reference/ecr/set-repository-policy.html](https://docs.aws.amazon.com/cli/latest/reference/ecr/set-repository-policy.html) AWS CLI 命令应用该策略。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPull",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/pull-user-1",
                    "arn:aws:iam::111122223333:user/pull-user-2"
                ]
            },
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowAll",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/admin-user"
            },
            "Action": [
                "ecr:*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 示例：拒绝所有
<a name="IAM_deny_all"></a>

以下存储库策略拒绝所有账户中的所有用户提取镜像。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenyPull",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 示例：限制对特定 IP 地址的访问权限
<a name="IAM_restrict_ip"></a>

以下示例拒绝向任何用户授予在应用于来自特定地址范围的存储库时执行任何 Amazon ECR 操作的权限。

此语句中的条件确定了允许的 Internet 协议版本 4 (IPv4) IP 地址的`54.240.143.*`范围。

该`Condition`块使用`NotIpAddress`条件和`aws:SourceIp`条件键，后者是一个 AWS宽范围的条件键。有关这些条件键的更多信息，请参阅 [AWS 全局条件上下文键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-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": "ECRPolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "ecr:*",
            "Resource": "*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "54.240.143.0/24"
                }
            }
        }
    ]
}
```

------

## 示例：允许某项 AWS 服务
<a name="IAM_service_linked"></a>

以下存储库策略允许 AWS CodeBuild 访问与该服务集成所需的 Amazon ECR API 操作。使用以下示例时，您应该使用 `aws:SourceArn` 和 `aws:SourceAccount` 条件键来限定哪些资源可以使用这些权限。有关更多信息，请参阅《*AWS CodeBuild 用户指南》 CodeBuild*中的 [Amazon ECR 示例](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-ecr.html)。

------
#### [ 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"
            }
         }
      }
   ]
}
```

------