

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

# Amazon ECR 許可
<a name="permissions-ecr"></a>

在 HealthOmics 服務從您的私有 Amazon ECR 儲存庫在容器中執行工作流程之前，您可以為儲存庫建立資源政策。政策會授予 HealthOmics 服務使用容器的許可。您可以將此資源政策新增至工作流程參考的每個私有儲存庫。

**注意**  
私有儲存庫和工作流程必須位於相同區域。

如果不同的 AWS 帳戶擁有工作流程和儲存庫，您需要設定跨帳戶許可。

您不需要為共用工作流程授予其他儲存庫存取權。不過，您可以建立允許或拒絕特定工作流程存取容器映像的政策。

若要使用 Amazon ECR 提取快取功能，您需要建立登錄檔許可政策。

下列各節說明如何設定這些案例的 Amazon ECR 資源許可。如需 Amazon ECR 中許可的詳細資訊，請參閱 [Amazon ECR 中的私有登錄檔許可](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-permissions.html)。

**Topics**
+ [為 Amazon ECR 儲存庫建立資源政策](#permissions-resource-policy)
+ [使用跨帳戶容器執行工作流程](#permissions-cross-account-containers)
+ [共用工作流程的 Amazon ECR 政策](#permissions-shared-workflows)
+ [Amazon ECR 提取快取的政策](#permissions-ecr-ptc)

## 為 Amazon ECR 儲存庫建立資源政策
<a name="permissions-resource-policy"></a>

建立資源政策，以允許 HealthOmics 服務使用儲存庫中的容器執行工作流程。此政策授予 HealthOmics 服務主體存取所需 Amazon ECR 動作的許可。

請依照下列步驟建立政策：

1. 在 Amazon ECR 主控台中開啟[私有儲存庫](https://console.aws.amazon.com/ecr/private-registry/repositories)頁面，然後選取您要授予存取權的儲存庫。

1. 從側邊列導覽中，選取**許可**。

1. 選擇**編輯**。

1. 選擇**編輯政策 JSON**。

1. 新增下列政策陳述式，然後選取**儲存**。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "omics workflow access",
               "Effect": "Allow",
               "Principal": {
                   "Service": "omics.amazonaws.com"
               },
               "Action": [
                   "ecr:GetDownloadUrlForLayer",
                   "ecr:BatchGetImage",
                   "ecr:BatchCheckLayerAvailability"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

## 使用跨帳戶容器執行工作流程
<a name="permissions-cross-account-containers"></a>

如果不同的 AWS 帳戶擁有工作流程和容器，您需要設定下列跨帳戶許可：

1. 更新儲存庫的 Amazon ECR 政策，將許可明確授予擁有工作流程的帳戶。

1. 更新擁有工作流程之帳戶的 服務角色，以授予其對容器映像的存取權。

下列範例示範 Amazon ECR 資源政策，授予擁有工作流程之帳戶的存取權。

在此範例中：
+ 工作流程帳戶 ID：111122223333
+ 容器儲存庫帳戶 ID：444455556666 
+ 容器名稱：samtools

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "omics.amazonaws.com"
            },
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowAccessToTheServiceRoleOfTheAccountThatOwnsTheWorkflow",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/DemoCustomer"
            },
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        }
    ]
}
```

------

若要完成設定，請將下列政策陳述式新增至擁有工作流程之帳戶的服務角色。政策會授予服務角色存取「samtools」容器映像的許可。請務必使用您自己的值取代帳戶號碼、容器名稱和區域。

```
{
    "Sid": "CrossAccountEcrRepoPolicy",
    "Effect": "Allow",
    "Action": ["ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer"],
    "Resource": "arn:aws:ecr:us-west-2:444455556666:repository/samtools"
}
```

## 共用工作流程的 Amazon ECR 政策
<a name="permissions-shared-workflows"></a>

**注意**  
HealthOmics 會自動允許共用工作流程存取工作流程擁有者帳戶中的 Amazon ECR 儲存庫，而工作流程是在訂閱者的帳戶中執行。您不需要為共用工作流程授予其他儲存庫存取權。如需詳細資訊，請參閱[共用 HealthOmics 工作流程](https://docs.aws.amazon.com/omics/latest/dev/sharing-workflows.html)。

根據預設，訂閱者無法存取 Amazon ECR 儲存庫來使用基礎容器。或者，您也可以將條件索引鍵新增至儲存庫的資源政策，以自訂對 Amazon ECR 儲存庫的存取。下列各節提供範例政策。

### 限制對特定工作流程的存取
<a name="permissions-limit-workflows"></a>

您可以在條件陳述式中列出個別工作流程，因此只有這些工作流程可以使用儲存庫中的容器。**SourceArn** 條件索引鍵指定共用工作流程的 ARN。下列範例會授予指定工作流程使用此儲存庫的許可。

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

****  

```
{  
  "Version":"2012-10-17",		 	 	 
  "Statement": [
     {
       "Sid": "OmicsAccessPrincipal",
       "Effect": "Allow",
       "Principal": {
         "Service": "omics.amazonaws.com"
       },
       "Action": [
         "ecr:GetDownloadUrlForLayer",
         "ecr:BatchGetImage",
         "ecr:BatchCheckLayerAvailability"
       ],
       "Resource": "*",
       "Condition": {
          "StringEquals": {
             "aws:SourceArn": "arn:aws:omics:{{us-east-1}}:{{111122223333}}:workflow/1234567"
          }
       }
     }
  ]
}
```

------

### 限制對特定帳戶的存取
<a name="permissions-limit-users"></a>

您可以在條件陳述式中列出訂閱者帳戶，以便只有這些帳戶具有在儲存庫中使用容器的許可。**SourceAccount** 條件索引鍵會指定訂閱 AWS 帳戶 者的 。下列範例會授予指定帳戶使用此儲存庫的許可。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "OmicsAccessPrincipal",
      "Effect": "Allow",
      "Principal": {
        "Service": "omics.amazonaws.com"
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{111122223333}}"
        }
      }
    }
  ]
}
```

------

您也可以拒絕特定訂閱者的 Amazon ECR 許可，如下列範例政策所示。

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

****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "OmicsAccessPrincipal",
              "Effect": "Allow",
              "Principal": {
                  "Service": "omics.amazonaws.com"
              },
              "Action": [
                  "ecr:GetDownloadUrlForLayer",
                  "ecr:BatchGetImage",
                  "ecr:BatchCheckLayerAvailability"
              ],
              "Resource": "*",
              "Condition": {
                "StringNotEquals": {
                  "aws:SourceAccount": "{{111122223333}}"
                }
             }  
         }
      ]
  }
```

------

## Amazon ECR 提取快取的政策
<a name="permissions-ecr-ptc"></a>

若要使用 Amazon ECR 提取快取，您可以建立登錄檔許可政策。您也可以建立儲存庫建立範本，定義 Amazon ECR 提取快取所建立儲存庫的許可。

下列各節包含這些政策的範例。如需提取快取的詳細資訊，請參閱《[Amazon Elastic Container Registry 使用者指南》中的將上游登錄與 Amazon ECR 私有登錄同步](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-private.html)。 **

### 登錄檔許可政策
<a name="permissions-reg"></a>

若要使用 Amazon ECR 提取快取，請建立登錄檔許可政策。登錄檔許可政策提供對複寫的控制，並提取快取許可。

對於跨帳戶複寫，您必須明確允許每個 AWS 帳戶 可以將其儲存庫複寫到您的登錄檔。

根據預設，當您建立提取快取規則時，具有從私有登錄檔提取映像許可的任何 IAM 主體也可以使用提取快取規則。您可以使用登錄檔許可，將這些許可進一步縮小到特定儲存庫的範圍。

將登錄檔許可政策新增至擁有容器映像的帳戶。

在下列範例中，政策允許 HealthOmics 服務為每個上游登錄檔建立儲存庫，並從建立的儲存庫啟動上游提取請求。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPTCinRegPermissions",
            "Effect": "Allow",
            "Principal": {
                "Service": "omics.amazonaws.com"
            },
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchImportUpstreamImage"
            ],
            "Resource": [
                "arn:aws:ecr:{{us-east-1}}:{{123456789012}}:repository/ecr-public/*",
                "arn:aws:ecr:{{us-east-1}}:{{123456789012}}:repository/docker-hub/*"
            ] 
        }
    ]
}
```

------

### 儲存庫建立範本
<a name="permissions-reg"></a>

若要在 HealthOmics 中使用提取快取，Amazon ECR 儲存庫必須具有儲存庫建立範本。範本會定義為上游登錄檔建立之私有儲存庫的組態設定。

每個範本都包含儲存庫命名空間字首，Amazon ECR 會使用此字首將新儲存庫與特定範本比對。範本可以指定所有儲存庫設定的組態，包括資源型存取政策、標籤不變性、加密和生命週期政策。如需詳細資訊，請參閱《*Amazon Elastic Container Registry 使用者指南*》中的[儲存庫建立範本](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-creation-templates.html)。

在下列範例中， 政策允許 HealthOmics 服務從上游儲存庫啟動上游提取請求。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PTCRepoCreationTemplate",
            "Effect": "Allow",
            "Principal": {
                "Service": "omics.amazonaws.com"
            },
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### 跨帳戶 Amazon ECR 存取的政策
<a name="permissions-cross-account"></a>

對於跨帳戶存取，私有儲存庫的擁有者會更新登錄許可政策和儲存庫建立範本，以允許其他帳戶和該帳戶的執行角色存取。

在登錄許可政策中，新增政策陳述式，以允許其他帳戶的執行角色存取 Amazon ECR 動作：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCrossAccountPTCinRegPermissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:role/{{RUN_ROLE}}"},
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchGetImage",
                "ecr:BatchImportUpstreamImage"
            ],
            "Resource": "arn:aws:ecr:{{us-east-1}}:{{123456789012}}:repository/{{path}}/*" 
        }
    ]
}
```

------

在儲存庫建立範本中，新增政策陳述式，以允許其他帳戶的執行角色存取新的容器映像。或者，您可以新增條件陳述式來限制對特定工作流程的存取：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCrossAccountPTCinRepoCreationTemplate",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/{{RUN_ROLE}}"},
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:omics:us-east-1:{{444455556666}}:workflow/{{WORKFLOW_ID}}",
                    "aws:SourceAccount": "{{111122223333}}"
                }
            }
        }
    ]
}
```

------

在執行角色中新增兩個額外動作 (CreateRepository 和 BatchImportUpstreamImage) 的許可，並指定執行角色可存取的資源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccountPTCRunRolePolicy",
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchImportUpstreamImage",       
                "ecr:BatchCheckLayerAvailability", 
                "ecr:BatchGetImage", 
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage"
            ],
            "Resource": "arn:aws:ecr:{{us-east-1}}:{{123456789012}}::repository/{path}/*"
        }
    ]
}
```

------