授予 Lightsail 容器服务访问亚马逊 ECR 私有存储库的权限 - Amazon Lightsail

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

授予 Lightsail 容器服务访问亚马逊 ECR 私有存储库的权限

Amazon Elastic Container Registry (Amazon ECR) AWS 是一项托管容器镜像注册服务,它使用 (IAM) 支持具有基于资源的权限 AWS Identity and Access Management 的私有存储库。您可以授予您的 Amazon Lightsail 容器服务访问您的 Amazon ECR 私有存储库的权限。 AWS 区域然后,您可以将映像从私有存储库部署到容器服务。

您可以使用 Lightsail 控制台或 () 来管理 Lightsail 容器服务和 Amazon ECR 私有存储库的访问权限。 AWS Command Line Interface AWS CLI但是,我们建议您使用 Lightsail 控制台,因为它可以简化流程。

有关容器服务的更多信息,请参阅容器服务。有关 Amazon ECR 的更多信息,请参阅 Amazon ECR 用户指南

内容

所需的权限

负责管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限的用户必须在 IAM 中拥有以下权限策略之一。有关更多信息,请参阅《AWS Identity and Access Management 用户指南》中的添加和删除 IAM 标识权限

授予对任何 Amazon ECR 私有存储库的访问权限

以下权限策略向用户授予配置对任何 Amazon ECR 私有存储库的访问的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageEcrPrivateRepositoriesAccess", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:DeleteRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:*:AwsAccountId:repository/*" } ] }

在政策中,AwsAccountId替换为您的 AWS 账号。

授予对特定 Amazon ECR 私有存储库的访问权限

以下权限策略向用户授予在特定 AWS 区域中配置对特定 Amazon ECR 私有存储库的访问的权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageEcrPrivateRepositoriesAccess", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:DeleteRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:AwsRegion:AwsAccountId:repository/RepositoryName" } ] }

在该策略中,将以下示例文本替换为自己的文本:

  • AwsRegion— 私有存储库的 AWS 区域 代码(例如us-east-1)。您的 Lightsail 容器服务必须与您要访问 AWS 区域 的私有存储库位于同一个存储库中。

  • AwsAccountId— 您的 AWS 账户 ID 号。

  • RepositoryName— 您要管理其访问权限的私有存储库的名称。

以下是使用示例值填充的权限策略的示例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageEcrPrivateRepositoriesAccess", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:DeleteRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:us-east-1:111122223333:repository/my-private-repo" } ] }

使用 Lightsail 控制台管理对私有仓库的访问权限

完成以下过程,使用 Lightsail 控制台管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限。

  1. 登录 Lightsail 控制台

  2. 在 Lightsail 主页上,选择容器选项卡。

  3. 选择您想要为其配置对 Amazon ECR 私有存储库的访问权限的容器服务的名称。

    Lightsail 控制台中的容器服务
  4. 选择映像选项卡。

    Lightsail 控制台容器服务管理页面中的 “图像” 选项卡
  5. 选择添加存储库以授予您的容器服务访问 Amazon ECR 私有存储库的权限。

    注意

    您可以选择删除以从先前添加的 Amazon ECR 私有存储库中删除容器服务的访问权限。

    “映像”选项卡的 Amazon ECR 私有存储库部分
  6. 在出现的下拉菜单中,选择要访问的私有存储库,然后选择 Add(添加)。

    Amazon ECR 私有存储库下拉选项

    Lightsail 花点时间为您的容器服务激活 Amazon ECR 图像提取器 IAM 角色,其中包括主要的亚马逊资源名称 (ARN)。然后,Lightsail 会自动将 IAM 角色委托人 ARN 添加到您选择的 Amazon ECR 私有存储库的权限策略中。这将授予容器服务对私有存储库及其映像的访问权限。在出现的模式表明该过程已完成之前,不要关闭浏览器窗口,您可以选择 Continue(继续)。

    确认权限正在添加到 Amazon ECR 私有存储库的模式
  7. 在激活完成时选择 Continue(继续)。

    添加选择的 Amazon ECR 私有存储库后,它将列在页面的 Amazon ECR 私有存储库部分。该页面包含有关如何将镜像从私有存储库部署到 Lightsail 容器服务的说明。要使用私有存储库中的映像,请在创建容器服务部署时将页面上显示的 URI 格式指定为 Image(映像)值。在您指定的 URI 中,将示例 {image tag} 替换为您想要部署的映像的标签。有关更多信息,请参阅创建和管理容器服务的部署

    添加 Amazon ECR 私有存储库之后的后续步骤

使用来管理 AWS CLI 对私有仓库的访问权限

使用 AWS Command Line Interface (AWS CLI) 管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限需要执行以下步骤:

重要

我们建议您使用 Lightsail 控制台来管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限,因为它可以简化流程。有关更多信息,请参阅本指南前面的 “使用 Lightsail 控制台管理私有仓库的访问权限”。

  1. 激活或停用 Amazon ECR 图像提取器 IAM 角色 — 使用 Lightsail AWS CLI update-container-service 的命令激活或停用 Amazon ECR 图像提取器 IAM 角色。当您激活 Amazon ECR 映像拉取器 IAM 角色时,会为该角色创建一个主体 Amazon 资源名称(ARN)。有关更多信息,请参阅本指南的激活或停用 Amazon ECR 映像拉取器 IAM 角色一节。

  2. 确定您的 Amazon ECR 私有存储库是否有策略语句:激活 Amazon ECR 映像拉取器 IAM 角色之后,您需要确定您想要使用容器服务访问的 Amazon ECR 私有存储库是否具有现有的策略语句。有关更多信息,请参阅本指南后面部分中的确定您的 Amazon ECR 私有存储库是否有策略语句

    您可以使用以下方法之一将 IAM 角色主体 ARN 添加到存储库中,具体取决于存储库是否具有现有策略语句:

    1. 向没有政策声明的私有存储库添加策略 — 使用 Amazon ECR AWS CLI set-repository-policy 命令将您的容器服务的 Amazon ECR 图像提取器角色委托人 ARN 添加到具有现有策略的私有存储库中。有关更多信息,请参阅本指南后面部分中的将策略添加到没有策略语句的私有存储库

    2. 向包含策略声明的私有存储库添加策略 — 使用 Amazon ECR AWS CLI set-repository-policy 命令将容器服务的 Amazon ECR 图像提取器角色添加到没有现有策略的私有存储库中。有关更多信息,请参阅本指南后面部分中的将策略添加到有策略语句的私有存储库

激活或停用 Amazon ECR 映像拉取器 IAM 角色

完成以下步骤以激活或停用 Lightsail 容器服务的 Amazon ECR 图像提取器 IAM 角色。你可以使用 Lightsail 的命令激活或停用 Amazon ECR 图像提取器 IAM 角色 AWS CLI update-container-service。有关更多信息,请参阅《AWS CLI 命令参考update-container-service中的。

注意

必须先为 Lightsail 安装 AWS CLI 并对其进行配置,然后才能继续执行此过程。有关更多信息,请参阅配置为与 Lightsail 配合使用。 AWS CLI

  1. 打开命令提示符或终端窗口。

  2. 输入以下命令以更新容器服务并激活或停用 Amazon ECR 映像拉取器 IAM 角色。

    aws lightsail update-container-service --service-name ContainerServiceName --private-registry-access ecrImagePullerRole={isActive=RoleActivationState} --region AwsRegionCode

    在该命令中,将以下示例文本替换为自己的文本:

    • ContainerServiceName— 要为其激活或停用 Amazon ECR 图像提取器 IAM 角色的容器服务的名称。

    • RoleActivationState— Amazon ECR 图像提取器 IAM 角色的激活状态。指定 true 以激活角色,或指定 false 停用角色。

    • AwsRegionCode— 容器服务的 AWS 区域 代码(例如,us-east-1)。

    示例:

    • 激活 Amazon ECR 映像拉取器 IAM 角色:

      aws lightsail update-container-service --service-name my-container-service --private-registry-access ecrImagePullerRole={isActive=true} --region us-east-1
    • 停用 Amazon ECR 映像拉取器 IAM 角色:

      aws lightsail update-container-service --service-name my-container-service --private-registry-access ecrImagePullerRole={isActive=false} --region us-east-1
  3. 如果您:

    • 已激活 Amazon ECR 映像拉取器角色:在收到之前的回复后至少等待 30 秒钟。然后,继续下一步以获取您的容器服务的 Amazon ECR 映像拉取器 IAM 角色的主体 ARN。

    • 已停用 Amazon ECR 映像拉取器角色:如果您之前已将 Amazon ECR 映像拉取器 IAM 角色主体 ARN 添加到您的 Amazon ECR 私有存储库的权限策略,则您应该从存储库中删除该权限策略。有关更多信息,请参阅《Amazon ECR 用户指南》中的删除私有存储库策略语句

  4. 输入以下命令以获取您的容器服务的 Amazon ECR 映像拉取器 IAM 角色的主体 ARN。

    aws lightsail get-container-services --service-name ContainerServiceName --region AwsRegionCode

    在该命令中,将以下示例文本替换为自己的文本:

    • ContainerServiceName— 要为其获取 Amazon ECR 图像提取器 IAM 角色主体 ARN 的容器服务的名称。

    • AwsRegionCode— 容器服务的 AWS 区域 代码(例如,us-east-1)。

    例如:

    aws lightsail get-container-services --service-name my-container-service --region us-east-1

    在响应中寻找 ECR 映像拉取器 IAM 角色主体 ARN。如果列出了角色,请将其复制或记下来。在本指南的下一部分,您将需要它。接下来,您需要确定您想要使用容器服务访问的 Amazon ECR 私有存储库上是否有现有的策略语句。继续浏览本指南的确定 Amazon ECR 私有存储库是否具有策略语句一节。

确定您的 Amazon ECR 私有存储库是否有策略语句

使用以下程序确定您的 Amazon ECR 私有存储库是否有策略语句。您可以将该 AWS CLI get-repository-policy命令用于 Amazon ECR。有关更多信息,请参阅《AWS CLI 命令参考update-container-service中的。

注意

必须先为 Amazon ECR 安装 AWS CLI 并对其进行配置,然后才能继续执行此过程。有关更多信息,请参阅《Amazon ECR 用户指南》中的对 Amazon ECR 进行设置

  1. 打开命令提示符或终端窗口。

  2. 输入以下命令以获取特定私有存储库的策略语句。

    aws ecr get-repository-policy --repository-name RepositoryName --region AwsRegionCode

    在该命令中,将以下示例文本替换为自己的文本:

    • RepositoryName— 您要为其配置 Lightsail 容器服务访问权限的私有仓库的名称。

    • AwsRegionCode— 私有存储库的 AWS 区域 代码(例如,us-east-1)。

    例如:

    aws ecr get-repository-policy --repository-name my-private-repo --region us-east-1

    您应看到以下响应之一:

将策略添加到没有策略语句的私有存储库

完成以下过程以将策略添加到没有策略语句的 Amazon ECR 私有存储库。您添加的策略必须包含您的 Lightsail 容器服务的 Amazon ECR 图片提取器 IAM 角色主体 ARN。这将授予容器服务访问权限,以部署私有存储库中的映像。

重要

当你使用 Lightsail 控制台配置访问权限时,Lightsail 会自动将 Amazon ECR 图像提取器角色添加到你的亚马逊 ECR 私有存储库中。在这种情况下,您不必使用本部分中的程序将 Amazon ECR 映像拉取器角色手动添加到您的私有存储库中。有关更多信息,请参阅本指南前面的 “使用 Lightsail 控制台管理私有仓库的访问权限”。

您可以使用 AWS CLI向私有存储库添加策略。为此,您可以创建包含策略的 JSON 文件,然后使用 Amazon ECR 的 set-repository-policy 命令引用该文件。有关更多信息,请参阅《AWS CLI 命令参考set-repository-policy中的。

注意

在继续执行此过程之前,您必须为 Amazon ECR 安装 AWS CLI 并对其进行配置。有关更多信息,请参阅《Amazon ECR 用户指南》中的对 Amazon ECR 进行设置

  1. 打开文本编辑器,然后将以下策略语句粘贴到新的文本文件中。

    { "Version": "2008-10-17", "Statement": [ { "Sid": "AllowLightsailPull-ecr-private-repo-demo", "Effect": "Allow", "Principal": { "AWS": "IamRolePrincipalArn" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] } ] }

    在文本中,IamRolePrincipalArn用本指南前面部分的容器服务的 Amazon ECR 图像提取器 IAM 角色主体 ARN 替换。

  2. 在计算机上的可访问位置将文件另存为 ecr-policy.json(例如,Windows 上的 C:\Temp\ecr-policy.json 或 macOS 或 Linux 上的 /tmp/ecr-policy.json)。

  3. 记下所创建的 ecr-policy.json 文件的文件路径位置。您将在此过程后面部分的命令中指定它。

  4. 打开命令提示符或终端窗口。

  5. 输入以下命令,为要使用容器服务访问的私有存储库设置策略语句。

    aws ecr set-repository-policy --repository-name RepositoryName --policy-text file://path/to/ecr-policy.json --region AwsRegionCode

    在该命令中,将以下示例文本替换为自己的文本:

    • RepositoryName— 您要为其添加策略的私有存储库的名称。

    • path/to/:至您在本指南前面部分创建的计算机上的 ecr-policy.json 文件的路径。

    • AwsRegionCode— 私有存储库的 AWS 区域 代码(例如,us-east-1)。

    示例:

    • 在 Windows 上:

      aws ecr set-repository-policy --repository-name my-private-repo --policy-text file://C:\Temp\ecr-policy.json --region us-east-1
    • 在 macOS 或 Linux 上:

      aws ecr set-repository-policy --repository-name my-private-repo --policy-text file:///tmp/ecr-policy.json --region us-east-1

    您的容器服务现在能够访问您的私有存储库及其映像。要使用存储库中的映像,请将以下 URI 指定为您的容器服务部署的 Image(映像)值。在 URI 中,将示例 tag 替换为您想要部署的映像的标签。有关更多信息,请参阅创建和管理容器服务的部署

    AwsAccountId.dkr.ecr.AwsRegionCode.amazonaws.com/RepositoryName:ImageTag

    在 URI 中,将以下示例文本替换为自己的文本:

    • AwsAccountId— 您的 AWS 账户 ID 号。

    • AwsRegionCode— 私有存储库的 AWS 区域 代码(例如,us-east-1)。

    • RepositoryName— 用于部署容器映像的私有存储库的名称。

    • ImageTag— 私有存储库中要部署在容器服务上的容器镜像的标签。

    例如:

    111122223333.dkr.ecr.us-east-1.amazonaws.com/my-private-repo:myappimage

将策略添加到有策略语句的私有存储库

完成以下过程以将策略添加到有策略语句的 Amazon ECR 私有存储库。您添加的策略必须包括现有策略和包含您的 Lightsail 容器服务的 Amazon ECR 图像提取器 IAM 角色主体 ARN 的新策略。这将维护私有存储库上的现有权限,同时授予容器服务从私有存储库部署映像的访问权限。

重要

当你使用 Lightsail 控制台配置访问权限时,Lightsail 会自动将 Amazon ECR 图像提取器角色添加到你的亚马逊 ECR 私有存储库中。在这种情况下,您不必使用本部分中的程序将 Amazon ECR 映像拉取器角色手动添加到您的私有存储库中。有关更多信息,请参阅本指南前面的 “使用 Lightsail 控制台管理私有仓库的访问权限”。

您可以使用 AWS CLI向私有存储库添加策略。您可以通过创建包含现有策略和新策略的 JSON 文件来完成此操作。然后,使用 Amazon ECR 的 set-repository-policy 命令引用该文件。有关更多信息,请参阅《AWS CLI 命令参考set-repository-policy中的。

注意

必须先为 Amazon ECR 安装 AWS CLI 并对其进行配置,然后才能继续执行此过程。有关更多信息,请参阅《Amazon ECR 用户指南》中的对 Amazon ECR 进行设置

  1. 打开命令提示符或终端窗口。

  2. 输入以下命令以获取特定私有存储库的策略语句。

    aws ecr get-repository-policy --repository-name RepositoryName --region AwsRegionCode

    在该命令中,将以下示例文本替换为自己的文本:

    • RepositoryName— 您要为其配置 Lightsail 容器服务访问权限的私有仓库的名称。

    • AwsRegionCode— 私有存储库的 AWS 区域 代码(例如,us-east-1)。

    例如:

    aws ecr get-repository-policy --repository-name my-private-repo --region us-east-1
  3. 在响应中,复制现有策略并继续下一个步骤。

    您应该仅复制显示在双引号之间的 policyText 的内容,见下面示例中突出显示的内容。

    对没有政策声明的私有仓库的 get-repository-policy 命令的响应
  4. 打开文本编辑器,将在上一步中复制的私有存储库的现有策略粘贴在其中。

    结果应该类似以下示例。

    示例策略语句 JSON 文件
  5. 在粘贴的文本中,将 \n 替换为换行符并删除剩余的 \

    结果应该类似以下示例。

    编辑策略语句 JSON 文件示例
  6. 将以下策略语句粘贴在文本文件末尾。

    , { "Version": "2008-10-17", "Statement": [ { "Sid": "AllowLightsailPull-ecr-private-repo-demo", "Effect": "Allow", "Principal": { "AWS": "IamRolePrincipalArn" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] } ] }
  7. 在文本中,IamRolePrincipalArn用本指南前面部分的容器服务的 Amazon ECR 图像提取器 IAM 角色主体 ARN 替换。

    结果应该类似以下示例。

    完成策略语句 JSON 文件示例
  8. 在计算机上的可访问位置将文件另存为 ecr-policy.json(例如,Windows 上的 C:\Temp\ecr-policy.json 或 macOS 或 Linux 上的 /tmp/ecr-policy.json)。

  9. 记下 ecr-policy.json 文件的文件路径位置。您将在此过程后面部分的命令中指定它。

  10. 打开命令提示符或终端窗口。

  11. 输入以下命令,为要使用容器服务访问的私有存储库设置策略语句。

    aws ecr set-repository-policy --repository-name RepositoryName --policy-text file://path/to/ecr-policy.json --region AwsRegionCode

    在该命令中,将以下示例文本替换为自己的文本:

    • RepositoryName— 您要为其添加策略的私有存储库的名称。

    • path/to/:至您在本指南前面部分创建的计算机上的 ecr-policy.json 文件的路径。

    • AwsRegionCode— 私有存储库的 AWS 区域 代码(例如,us-east-1)。

    示例:

    • 在 Windows 上:

      aws ecr set-repository-policy --repository-name my-private-repo --policy-text file://C:\Temp\ecr-policy.json --region us-east-1
    • 在 macOS 或 Linux 上:

      aws ecr set-repository-policy --repository-name my-private-repo --policy-text file:///tmp/ecr-policy.json --region us-east-1

    您应看到类似于以下示例的响应。

    对 set-repository-policy 命令的响应

    如果您再次运行 get-repository-policy 命令,您应该会看到私有存储库上新的附加策略语句。您的容器服务现在能够访问您的私有存储库及其映像。要使用存储库中的映像,请将以下 URI 指定为您的容器服务部署的 Image(映像)值。在 URI 中,将示例 tag 替换为您想要部署的映像的标签。有关更多信息,请参阅创建和管理容器服务的部署

    AwsAccountId.dkr.ecr.AwsRegionCode.amazonaws.com/RepositoryName:ImageTag

    在 URI 中,将以下示例文本替换为自己的文本:

    • AwsAccountId— 您的 AWS 账户 ID 号。

    • AwsRegionCode— 私有存储库的 AWS 区域 代码(例如,us-east-1)。

    • RepositoryName— 用于部署容器映像的私有存储库的名称。

    • ImageTag— 私有存储库中要部署在容器服务上的容器镜像的标签。

    例如:

    111122223333.dkr.ecr.us-east-1.amazonaws.com/my-private-repo:myappimage