Amazon ECR 权限 - AWS HealthOmics

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

Amazon ECR 权限

在该 HealthOmics 服务可以在您的私有 Amazon ECR 存储库的容器中运行工作流程之前,您需要为存储库创建资源策略。该策略授予 HealthOmics 服务使用容器的权限。您可以将此资源策略添加到工作流程引用的每个私有存储库中。

注意

私有存储库和工作流程必须位于同一区域。

如果不同的 AWS 账户拥有工作流程和存储库,则需要配置跨账户权限。

您无需为共享工作流程授予额外的存储库访问权限。但是,您可以创建允许或拒绝特定工作流程访问容器映像的策略。

要使用 Amazon ECR 直通缓存功能,您需要创建注册表权限策略。

以下各节介绍如何针对这些场景配置 Amazon ECR 资源权限。有关 Amazon ECR 中权限的更多信息,请参阅 Amazon ECR 中的私有注册表权限

为 Amazon ECR 存储库创建资源策略

创建资源策略以允许 HealthOmics 服务使用存储库中的容器运行工作流程。该政策授予 HealthOmics 服务主体访问所需的 Amazon ECR 操作的权限。

请按照以下步骤创建策略:

  1. 在 Amazon ECR 控制台中打开私有存储库页面,然后选择您要授予访问权限的存储库。

  2. 在侧栏导航中,选择 “权限”。

  3. 选择编辑

  4. 选择编辑策略 JSON

  5. 添加以下政策声明,然后选择保存

    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": "*" } ] }

使用跨账户容器运行工作流程

如果不同的 AWS 账户拥有工作流程和容器,则需要配置以下跨账户权限:

  1. 更新存储库的 Amazon ECR 政策,以明确向拥有该工作流程的账户授予权限。

  2. 更新拥有该工作流程的账户的服务角色,以授予其访问容器镜像的权限。

以下示例演示了 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 政策

注意

HealthOmics 当工作流程在订阅者的账户中运行时,自动允许共享工作流程访问工作流程所有者账户中的 Amazon ECR 存储库。您无需为共享工作流程授予额外的存储库访问权限。有关更多信息,请参阅共享 HealthOmics 工作流程

默认情况下,订阅者无权访问 Amazon ECR 存储库来使用底层容器。或者,您可以通过向存储库的资源策略添加条件密钥来自定义对 Amazon ECR 存储库的访问权限。以下各节提供了策略示例。

限制对特定工作流程的访问权限

您可以在条件语句中列出各个工作流程,因此只有这些工作流程才能使用存储库中的容器。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" } } } ] }

限制对特定账户的访问权限

您可以在条件语句中列出订阅者账户,这样只有这些账户才有权使用存储库中的容器。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 通过缓存提取策略

要使用 Amazon ECR 提取缓存,您需要创建注册表权限策略。您还可以创建存储库创建模板,该模板定义了由 Amazon ECR 提取缓存创建的存储库的权限。

以下各节包括这些政策的示例。有关提取缓存的更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的将上游注册表与 Amazon ECR 私有注册表同步。

注册表权限政策

要使用 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/*" ] } ] }

存储库创建模板

要在中使用直通缓存 HealthOmics,Amazon ECR 存储库必须具有存储库创建模板。该模板定义了为上游注册表创建的私有仓库的配置设置。

每个模板都包含存储库命名空间前缀,Amazon ECR 使用该前缀将新存储库与特定模板进行匹配。模板可以指定所有存储库设置的配置,包括基于资源的访问策略、标签不变性、加密和生命周期策略。有关更多信息,请参阅 Amazon 弹性容器注册表用户指南中的存储库创建模板

在以下示例中,该策略允许 HealthOmics 服务启动来自上游存储库的上游拉取请求。

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

跨账户 Amazon ECR 访问政策

对于跨账户访问,私有仓库的所有者更新注册表权限策略和仓库创建模板,以允许其他账户和该账户的运行角色进行访问。

在注册权限策略中,添加策略声明以允许其他账户的运行角色访问 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}/*" } ] }