

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

# 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 弹性容器注册表用户指南*中的[存储库创建模板](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}/*"
        }
    ]
}
```

------