授予 Lightsail 容器服务访问 Amazon ECR 私有存储库的权限
Amazon Elastic Container Registry(Amazon ECR)是 AWS 托管容器映像注册表服务,它使用 AWS Identity and Access Management(IAM)支持具有基于资源权限的私有存储库。您可以授予您的 Amazon Lightsail 容器服务访问 Amazon ECR 私有存储库 AWS 区域 的权限。然后,您可以将映像从私有存储库部署到容器服务。
您可以通过使用 Lightsail 控制台或 AWS Command Line Interface(AWS CLI)管理您的 Lightsail 容器服务和 Amazon ECR 私有存储库的访问。但是,我们建议您使用 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 账户 ID 号码。
授予对特定 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 私有存储库的访问。
-
登录 Lightsail 控制台
。 -
在左侧导航窗格中,选择容器。
-
选择您想要为其配置对 Amazon ECR 私有存储库的访问权限的容器服务的名称。
-
选择映像选项卡。
-
选择添加存储库以授予您的容器服务访问 Amazon ECR 私有存储库的权限。
注意
您可以选择删除以从先前添加的 Amazon ECR 私有存储库中删除容器服务的访问权限。
-
在出现的下拉菜单中,选择要访问的私有存储库,然后选择 Add(添加)。
Lightsail 需要一些时间才能为容器服务激活 Amazon ECR 映像拉取器 IAM 角色,其中包含主体 Amazon 资源名称(ARN)。然后,Lightsail 会自动将 IAM 角色主体 ARN 添加到您选择的 Amazon ECR 私有存储库的权限策略。这将授予容器服务对私有存储库及其映像的访问权限。在出现的模式表明该过程已完成之前,不要关闭浏览器窗口,您可以选择 Continue(继续)。
-
在激活完成时选择 Continue(继续)。
添加选择的 Amazon ECR 私有存储库后,它将列在页面的 Amazon ECR 私有存储库部分。该页面包含有关如何将映像从私有存储库部署到 Lightsail 容器服务的说明。要使用私有存储库中的映像,请在创建容器服务部署时将页面上显示的 URI 格式指定为 Image(映像)值。在您指定的 URI 中,将示例
{image tag}
替换为您想要部署的映像的标签。有关更多信息,请参阅创建和管理容器服务的部署。
使用 AWS CLI 管理对私有存储库的访问
使用 AWS Command Line Interface(AWS CLI)管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限需要执行以下步骤:
重要
建议使用 Lightsail 控制台来管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限,因为它简化了流程。有关更多信息,请参阅本指南前面的使用 Lightsail 控制台管理对私有存储库的访问。
-
激活或停用 Amazon ECR 映像拉取器 IAM 角色:将 AWS CLI
update-container-service
命令用于 Lightsail 以激活或停用 Amazon ECR 映像拉取器 IAM 角色。当您激活 Amazon ECR 映像拉取器 IAM 角色时,会为该角色创建一个主体 Amazon 资源名称(ARN)。有关更多信息,请参阅本指南的激活或停用 Amazon ECR 映像拉取器 IAM 角色一节。 -
确定您的 Amazon ECR 私有存储库是否有策略语句:激活 Amazon ECR 映像拉取器 IAM 角色之后,您需要确定您想要使用容器服务访问的 Amazon ECR 私有存储库是否具有现有的策略语句。有关更多信息,请参阅本指南后面部分中的确定您的 Amazon ECR 私有存储库是否有策略语句。
您可以使用以下方法之一将 IAM 角色主体 ARN 添加到存储库中,具体取决于存储库是否具有现有策略语句:
-
将策略添加到没有策略语句的私有存储库:将 AWS CLI
set-repository-policy
命令用于 Amazon ECR,以将您的容器服务的 Amazon ECR 映像拉取器角色主体 ARN 添加到具有现有策略的私有存储库。有关更多信息,请参阅本指南后面部分中的将策略添加到没有策略语句的私有存储库。 -
将策略添加到有策略语句的私有存储库:将 AWS CLI
set-repository-policy
命令用于 Amazon ECR,以将您的容器服务的 Amazon ECR 映像拉取器角色添加到没有现有策略的私有存储库。有关更多信息,请参阅本指南后面部分中的将策略添加到有策略语句的私有存储库。
-
激活或停用 Amazon ECR 映像拉取器 IAM 角色
完成以下过程以激活或停用您的 Lightsail 容器服务的 Amazon ECR 映像拉取器 IAM 角色。您可以使用 AWS CLI update-container-service
命令为 Lightsail 激活或停用 Amazon ECR 映像拉取器 IAM 角色。有关更多信息,请参阅《AWS CLI Command Reference》中的 update-container-service。
注意
必须安装 AWS CLI 并为 Lightsail 配置它,然后才能继续执行此过程。有关更多信息,请参阅配置 AWS CLI 以使用 Lightsail。
-
打开命令提示符或终端窗口。
-
输入以下命令以更新容器服务并激活或停用 Amazon ECR 映像拉取器 IAM 角色。
aws lightsail update-container-service --service-name
ContainerServiceName
--private-registry-access ecrImagePullerRole={isActive=RoleActivationState
} --regionAwsRegionCode
在该命令中,将以下示例文本替换为自己的文本:
-
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
} --regionus-east-1
-
停用 Amazon ECR 映像拉取器 IAM 角色:
aws lightsail update-container-service --service-name
my-container-service
--private-registry-access ecrImagePullerRole={isActive=false
} --regionus-east-1
-
-
如果您:
-
已激活 Amazon ECR 映像拉取器角色:在收到之前的回复后至少等待 30 秒钟。然后,继续下一步以获取您的容器服务的 Amazon ECR 映像拉取器 IAM 角色的主体 ARN。
-
已停用 Amazon ECR 映像拉取器角色:如果您之前已将 Amazon ECR 映像拉取器 IAM 角色主体 ARN 添加到您的 Amazon ECR 私有存储库的权限策略,则您应该从存储库中删除该权限策略。有关更多信息,请参阅《Amazon ECR 用户指南》中的删除私有存储库策略语句。
-
-
输入以下命令以获取您的容器服务的 Amazon ECR 映像拉取器 IAM 角色的主体 ARN。
aws lightsail get-container-services --service-name
ContainerServiceName
--regionAwsRegionCode
在该命令中,将以下示例文本替换为自己的文本:
-
ContainerServiceName
:为其获取 Amazon ECR 映像拉取器 IAM 角色主体 ARN 的容器服务的名称。 -
AwsRegionCode
:容器服务的 AWS 区域 代码(例如us-east-1
)。
例如:
aws lightsail get-container-services --service-name
my-container-service
--regionus-east-1
在响应中寻找 ECR 映像拉取器 IAM 角色主体 ARN。如果列出了角色,请将其复制或记下来。在本指南的下一部分,您将需要它。接下来,您需要确定您想要使用容器服务访问的 Amazon ECR 私有存储库上是否有现有的策略语句。继续浏览本指南的确定 Amazon ECR 私有存储库是否具有策略语句一节。
-
确定您的 Amazon ECR 私有存储库是否有策略语句
使用以下程序确定您的 Amazon ECR 私有存储库是否有策略语句。您可以将 AWS CLI get-repository-policy
命令用于 Amazon ECR。有关更多信息,请参阅《AWS CLI Command Reference》中的 update-container-service。
注意
必须安装 AWS CLI 并为 Amazon ECR 配置它,然后才能继续执行此过程。有关更多信息,请参阅《Amazon ECR 用户指南》中的对 Amazon ECR 进行设置。
-
打开命令提示符或终端窗口。
-
输入以下命令以获取特定私有存储库的策略语句。
aws ecr get-repository-policy --repository-name
RepositoryName
--regionAwsRegionCode
在该命令中,将以下示例文本替换为自己的文本:
-
RepositoryName
:您想要配置 Lightsail 容器服务对其访问权限的私有存储库的名称。 -
AwsRegionCode
:私有存储库的 AWS 区域 代码(例如us-east-1
)。
例如:
aws ecr get-repository-policy --repository-name
my-private-repo
--regionus-east-1
您应看到以下响应之一:
-
RepositoryPolicyNotFoundException:您的私有存储库没有策略语句。如果您的存储库没有策略语句,请按照本指南稍后部分中的将策略添加到没有策略语句的私有存储库一节中的步骤。
-
存储库策略已找到 - 您的私有存储库具有策略语句,它在您的请求的响应中显示。如果存储库有策略语句,请复制现有策略,然后按照本指南稍后部分中的将策略添加到有策略语句的私有存储库一节中的步骤。
-
将策略添加到没有策略语句的私有存储库
完成以下过程以将策略添加到没有策略语句的 Amazon ECR 私有存储库。您添加的策略必须包含 Lightsail 容器服务的 Amazon ECR 映像拉取器 IAM 角色主体 ARN。这将授予容器服务访问权限,以部署私有存储库中的映像。
重要
当您使用 Lightsail 控制台配置访问权限时,Lightsail 会将 Amazon ECR 映像拉取器角色自动添加到您的 Amazon ECR 私有存储库。在这种情况下,您不必使用本部分中的程序将 Amazon ECR 映像拉取器角色手动添加到您的私有存储库中。有关更多信息,请参阅本指南前面的使用 Lightsail 控制台管理对私有存储库的访问。
您可以使用 AWS CLI 向私有存储库添加策略。为此,您可以创建包含策略的 JSON 文件,然后使用 Amazon ECR 的 set-repository-policy
命令引用该文件。有关更多信息,请参阅《AWS CLI Command Reference》中的 set-repository-policy。
注意
必须安装 AWS CLI 并为 Amazon ECR 配置它,才能继续执行此过程。有关更多信息,请参阅《Amazon ECR 用户指南》中的对 Amazon ECR 进行设置。
-
打开文本编辑器,然后将以下策略语句粘贴到新的文本文件中。
{ "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。 -
在计算机上的可访问位置将文件另存为
ecr-policy.json
(例如,Windows 上的C:\Temp\ecr-policy.json
或 macOS 或 Linux 上的/tmp/ecr-policy.json
)。 -
记下所创建的
ecr-policy.json
文件的文件路径位置。您将在此过程后面部分的命令中指定它。 -
打开命令提示符或终端窗口。
-
输入以下命令,为要使用容器服务访问的私有存储库设置策略语句。
aws ecr set-repository-policy --repository-name
RepositoryName
--policy-text file://path/to/
ecr-policy.json --regionAwsRegionCode
在该命令中,将以下示例文本替换为自己的文本:
-
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 --regionus-east-1
-
在 macOS 或 Linux 上:
aws ecr set-repository-policy --repository-name
my-private-repo
--policy-text file:///tmp/
ecr-policy.json --regionus-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 映像拉取器角色自动添加到您的 Amazon ECR 私有存储库。在这种情况下,您不必使用本部分中的程序将 Amazon ECR 映像拉取器角色手动添加到您的私有存储库中。有关更多信息,请参阅本指南前面的使用 Lightsail 控制台管理对私有存储库的访问。
您可以使用 AWS CLI 向私有存储库添加策略。您可以通过创建包含现有策略和新策略的 JSON 文件来完成此操作。然后,使用 Amazon ECR 的 set-repository-policy
命令引用该文件。有关更多信息,请参阅《AWS CLI Command Reference》中的 set-repository-policy。
注意
必须安装 AWS CLI 并为 Amazon ECR 配置它,然后才能继续执行此过程。有关更多信息,请参阅《Amazon ECR 用户指南》中的对 Amazon ECR 进行设置。
-
打开命令提示符或终端窗口。
-
输入以下命令以获取特定私有存储库的策略语句。
aws ecr get-repository-policy --repository-name
RepositoryName
--regionAwsRegionCode
在该命令中,将以下示例文本替换为自己的文本:
-
RepositoryName
:您想要配置 Lightsail 容器服务对其访问权限的私有存储库的名称。 -
AwsRegionCode
:私有存储库的 AWS 区域 代码(例如us-east-1
)。
例如:
aws ecr get-repository-policy --repository-name
my-private-repo
--regionus-east-1
-
-
在响应中,复制现有策略并继续下一个步骤。
您应该仅复制显示在双引号之间的
policyText
的内容,见下面示例中突出显示的内容。 -
打开文本编辑器,将在上一步中复制的私有存储库的现有策略粘贴在其中。
结果应该类似以下示例。
-
在粘贴的文本中,将
\n
替换为换行符并删除剩余的\
。结果应该类似以下示例。
-
将以下策略语句粘贴在文本文件末尾。
, { "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。结果应该类似以下示例。
-
在计算机上的可访问位置将文件另存为
ecr-policy.json
(例如,Windows 上的C:\Temp\ecr-policy.json
或 macOS 或 Linux 上的/tmp/ecr-policy.json
)。 -
记下
ecr-policy.json
文件的文件路径位置。您将在此过程后面部分的命令中指定它。 -
打开命令提示符或终端窗口。
-
输入以下命令,为要使用容器服务访问的私有存储库设置策略语句。
aws ecr set-repository-policy --repository-name
RepositoryName
--policy-text file://path/to/
ecr-policy.json --regionAwsRegionCode
在该命令中,将以下示例文本替换为自己的文本:
-
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 --regionus-east-1
-
在 macOS 或 Linux 上:
aws ecr set-repository-policy --repository-name
my-private-repo
--policy-text file:///tmp/
ecr-policy.json --regionus-east-1
您应看到类似于以下示例的响应。
如果您再次运行
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
-