

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon ECR 中的私有登錄檔許可
<a name="registry-permissions"></a>

 Amazon ECR 使用**登錄檔政策**，將許可授予在私有登錄檔層級的 AWS 主體。

透過選擇登錄政策版本來設定範圍。有兩種版本具有不同的登錄政策範圍：版本 1 (V1) 和版本 2 (V2)。V2 是擴展的登錄政策範圍，包含所有 ECR 許可。如需 API 動作的完整清單，請參閱* [Amazon ECR API 指南](https://docs.aws.amazon.com/AmazonECR/latest/APIReference/Welcome.html)*。V2 版本是預設的登錄政策範圍。如需檢視或設定登錄政策範圍的詳細資訊，請參閱 [切換到擴展的登錄政策範圍](registry-permissions-account-settings.md)。如需有關 Amazon ECR 私有登錄檔一般設定的資訊，請參閱 [Amazon ECR 中的私有登錄檔設定](registry-settings.md)。

 版本詳述如下。
+ **V1 ** – 對於第 1 版，Amazon ECR 只會在私有登錄檔層級強制執行下列許可。
  + `ecr:ReplicateImage` – 授予許可給另一個帳戶 (稱為來源登錄檔)，以將其映像複製到登錄檔。這僅用於跨帳戶複寫。
  + `ecr:BatchImportUpstreamImage` – 授予檢索外部映像並將其匯入到您的私有登錄檔的許可。
  + `ecr:CreateRepository` – 授予在私有登錄檔中建立儲存庫的許可。如果存放複製或快取映像的儲存庫在私有登錄檔中尚不存在，則需要此許可。
+ **V2** – 對於第 2 版，Amazon ECR 允許政策中的所有 ECR 動作，並在所有 ECR 請求中強制執行登錄政策。

您可以使用 主控台或 CLI 來檢視或變更登錄政策範圍。

**注意**  
雖然可以將`ecr:*`動作新增至私有登錄檔政策，但最佳實務是僅根據您正在使用的功能新增所需的特定動作，而不是使用萬用字元。

**Topics**
+ [Amazon ECR 的私有登錄檔政策範例](registry-permissions-examples.md)
+ [切換到擴展的登錄政策範圍](registry-permissions-account-settings.md)
+ [授予 Amazon ECR 中跨帳戶複寫的登錄檔許可](registry-permissions-create-replication.md)
+ [授予 Amazon ECR 中提取快取的登錄檔許可](registry-permissions-create-pullthroughcache.md)

# Amazon ECR 的私有登錄檔政策範例
<a name="registry-permissions-examples"></a>

以下範例顯示您可以用來控制使用者具有之 Amazon ECR 登錄檔許可的登錄檔許可政策陳述式。

**注意**  
在每個範例中，如果從登錄檔政策中移除 `ecr:CreateRepository`動作，則仍可進行複寫。但是，為了成功複寫，您需要在帳戶中建立具有相同名稱的儲存庫。

## 範例：允許來源帳戶中的所有 IAM 主體複寫所有儲存庫
<a name="registry-permissions-examples-all"></a>

下列登錄檔許可政策允許來源帳戶中的所有 IAM 主體 （使用者和角色） 複寫所有儲存庫。

注意下列事項：
+ **重要：**當您在政策中將 AWS 帳戶 ID 指定為主體時，您可以將存取權授予該帳戶中的所有 IAM 使用者和角色，而不只是根使用者。這可在整個帳戶中提供廣泛的存取。
+ **安全性考量：**帳戶層級許可會授予指定帳戶中所有 IAM 實體的存取權。如需更嚴格的存取，請指定個別 IAM 使用者、角色，或使用條件陳述式進一步限制存取。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"ReplicationAccessCrossAccount",
            "Effect":"Allow",
            "Principal":{
                "AWS":"arn:aws:iam::111122223333:root"
            },
            "Action":[
                "ecr:CreateRepository",
                "ecr:ReplicateImage"
            ],
            "Resource": [
                "arn:aws:ecr:us-west-2:444455556666:repository/*"
            ]
        }
    ]
}
```

------

## 範例：允許來自多個帳戶的 IAM 主體
<a name="registry-permissions-examples-multiple"></a>

下列登錄檔許可政策有兩個陳述式。每個陳述式允許來源帳戶中的所有 IAM 主體 （使用者和角色） 複寫所有儲存庫。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"ReplicationAccessCrossAccount1",
            "Effect":"Allow",
            "Principal":{
                "AWS":"arn:aws:iam::111122223333:root"
            },
            "Action":[
                "ecr:CreateRepository",
                "ecr:ReplicateImage"
            ],
            "Resource": [
                "arn:aws:ecr:us-west-2:123456789012:repository/*"
            ]
        },
        {
            "Sid":"ReplicationAccessCrossAccount2",
            "Effect":"Allow",
            "Principal":{
                "AWS":"arn:aws:iam::444455556666:root"
            },
            "Action":[
                "ecr:CreateRepository",
                "ecr:ReplicateImage"
            ],
            "Resource": [
                "arn:aws:ecr:us-west-2:123456789012:repository/*"
            ]
        }
    ]
}
```

------

## 範例：允許來源帳戶中的所有 IAM 主體複寫字首為 的所有儲存庫`prod-`。
<a name="registry-permissions-examples-specific"></a>

下列登錄檔許可政策允許來源帳戶中的所有 IAM 主體 （使用者和角色） 複寫以 開頭的所有儲存庫` prod-`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"ReplicationAccessCrossAccount",
            "Effect":"Allow",
            "Principal":{
                "AWS":"arn:aws:iam::111122223333:root"
            },
            "Action":[
                "ecr:CreateRepository",
                "ecr:ReplicateImage"
            ],
            "Resource": [
                "arn:aws:ecr:us-west-2:444455556666:repository/prod-*"
            ]
        }
    ]
}
```

------

# 切換到擴展的登錄政策範圍
<a name="registry-permissions-account-settings"></a>

**重要**  
對於新使用者，您的登錄會自動設定為在建立時使用` V2`登錄政策。您不需要採取任何動作。Amazon ECR 不建議還原至先前的登錄政策 `V1` 。

您可以使用 主控台或 CLI 來檢視或變更登錄政策範圍。

------
#### [ AWS 管理主控台 ]

使用下列步驟來檢視您的帳戶設定。若要檢視或更新登錄政策範圍，請參閱此頁面上的 CLI 程序。

**開啟私有登錄檔的增強型登錄檔政策**

1.  在 https：/[/https://console.aws.amazon.com/ecr/private-registry/repositories](https://console---aws.amazon.com.rproxy.govskope.usecr/private-registry/repositories) 開啟 Amazon ECR 主控台

1. 從導覽列中選擇區域。

1. 在導覽窗格中，選擇**私有登錄**檔、**功能和設定**，然後選擇**許可**。

1. 在**許可**頁面上，針對**登錄檔政策**檢視您的政策 JSON。如果您有 V1 政策，則會顯示橫幅，其中包含更新至 V2 的指示。選擇**啟用**。

   橫幅會顯示 ，指出登錄政策範圍已更新為 V2。

1. 您也可以選擇使用 CLI 設定許可。如需詳細資訊，請參閱[Amazon ECR 中的私有登錄檔設定](registry-settings.md)。
**注意**  
若要檢視或更新登錄政策範圍，請參閱此頁面上的 CLI 程序。

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

Amazon ECR 會產生 V2 登錄檔政策。使用下列步驟來檢視或更新登錄政策範圍。您無法在主控台中檢視或變更登錄政策範圍
+ 擷取您目前使用的登錄政策。

  ```
  aws ecr get-account-setting --name REGISTRY_POLICY_SCOPE
  ```

   參數名稱是必要欄位。如果您未提供名稱，則會收到下列錯誤：

  ```
   aws: error: the following arguments are required: --name
  ```

  檢視登錄政策命令的輸出。在下列範例輸出中，登錄政策版本為 V1。

  ```
  {
      "name": "REGISTRY_POLICY_SCOPE",
      "value": "V1"
  }
  ```

  您可以將登錄政策版本從 變更為 `V1` `V2`。V1 不是建議的登錄政策範圍。

  ```
  aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value value
  ```

  例如，使用下列命令來更新至 V2。

  ```
  aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value V2
  ```

  檢視登錄政策命令的輸出。在下列範例輸出中，登錄政策版本已更新為 V2。

  ```
  {
      "name": "REGISTRY_POLICY_SCOPE",
      "value": "V2"
  }
  ```

------

# 授予 Amazon ECR 中跨帳戶複寫的登錄檔許可
<a name="registry-permissions-create-replication"></a>

跨帳戶政策類型用於將許可授予 AWS 委託人，允許將儲存庫從來源登錄檔複寫到您的登錄檔。根據預設，您可以在自己的登錄檔中設定跨區域複寫的許可。您只需要設定登錄檔政策，如果您授予另一個帳戶將內容複寫到登錄檔的許可。

登錄檔政策必須授予 `ecr:ReplicateImage` API 動作的許可。這個 API 為內部的 Amazon ECR API，可以在區域或帳戶之間複寫映像。您也可以授予 ` ecr:CreateRepository` 許可，這允許 Amazon ECR 在您的登錄檔中建立儲存庫 (如果它們尚不存在)。如果未提供 `ecr:CreateRepository` 許可，則必須在登錄檔中手動建立具有與來源儲存庫相同名稱的儲存庫。如果兩者都未完成，複寫則會失敗。任何失敗的 `CreateRepository`或 `ReplicateImage` API 動作都會顯示在 CloudTrail 中。

## 設定複寫許可政策 (AWS 管理主控台)
<a name="registry-permissions-create-console"></a>

1. 在 [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/) 開啟 Amazon ECR 主控台。

1. 從導覽列，選擇要在其中設定登錄檔政策的區域。

1. 在導覽窗格中，選擇**私有登錄**檔，選擇**功能和設定**，然後選擇**許可**。

1. 在 **Registry permissions** (登錄檔許可) 頁面上，選擇 **Generate statement** (產生陳述式)。

1. 使用政策產生器完成下列步驟以定義您的政策陳述式。

   1. 針對**政策類型**，選擇**複寫 - 跨帳戶**。

   1. 針對**陳述式 ID**，輸入唯一的陳述式 ID。此欄位用作 `Sid` 在登錄檔政策上。

   1. 對於 **Accounts** (帳戶)，輸入您要授予許可的每個帳戶的帳戶 ID。指定多個帳戶 ID 時，以逗號分隔。

1. 選擇**儲存**。

## 設定複寫許可政策 (AWS CLI)
<a name="registry-permissions-create-cli"></a>

1. 建立名為 `registry_policy.json` 的檔案，並將其填入登錄檔政策。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement":[
           {
               "Sid":"ReplicationAccessCrossAccount",
               "Effect":"Allow",
               "Principal":{
                   "AWS":"arn:aws:iam::111122223333:root"
               },
               "Action":[
                   "ecr:CreateRepository",
                   "ecr:ReplicateImage"
               ],
               "Resource": [
                   "arn:aws:ecr:us-west-2:444455556666:repository/*"
               ]
           }
       ]
   }
   ```

------

1. 使用政策檔案建立登錄檔政策。

   ```
   aws ecr put-registry-policy \
         --policy-text file://registry_policy.json \
         --region us-west-2
   ```

1. 擷取登錄檔的政策以確認。

   ```
   aws ecr get-registry-policy \
         --region us-west-2
   ```

# 授予 Amazon ECR 中提取快取的登錄檔許可
<a name="registry-permissions-create-pullthroughcache"></a>

Amazon ECR 私有登錄檔許可可用來設定個別 IAM 實體使用提取快取的許可範圍。如果 IAM 實體擁有的由 IAM 政策授予的許可多過登錄檔許可政策授予的許可，則 IAM 政策優先。

**建立私有登錄檔的許可政策 (AWS 管理主控台)**

1. 在 [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/) 開啟 Amazon ECR 主控台。

1. 從導覽列選擇要在其中設定私有登錄檔許可陳述式的區域。

1. 在導覽窗格中，選擇**私有登錄**檔，選擇**功能和設定**，然後選擇**許可**。

1. 在 **Registry permissions** (登錄檔許可) 頁面上，選擇 **Generate statement** (產生陳述式)。

1. 針對您要建立的每個提取快取許可政策陳述式，執行下列動作。

   1. 針對 **Policy type** (政策類型)，選擇 **Pull through cache policy** (提取快取政策)。

   1. 針對 **Statement id** (陳述式 ID)，提供提取快取陳述式政策的名稱。

   1. 針對 **IAM entities** (IAM 實體)，指定要包含在政策中的使用者、群組或角色。

   1. 針對**快取命名空間**，選取要與政策建立關聯的提取快取規則。

   1. 針對 **Repository names** (儲存庫名稱)，指定要套用規則的儲存庫基本名稱。例如，如果您想要在 Amazon ECR Public 上指定 Amazon Linux 儲存庫，則儲存庫名稱會是 ` amazonlinux`。