Amazon ECR 中的私有存储库策略示例
重要
此页面上的存储库策略示例旨在应用于 Amazon ECR 私有存储库。如果直接与 IAM 主体结合使用,这些存储库策略将无法正常工作,除非进行修改,将 Amazon ECR 存储库指定为资源。有关如何设置存储库策略的更多信息,请参阅在 Amazon ECR 中设置私有存储库策略声明。
Amazon ECR 存储库策略是 IAM policy 的一部分,这些策略专用于控制对单个 Amazon ECR 存储库的访问。IAM policy 通常用于应用针对整个 Amazon ECR 服务的权限,但也可用于控制对特定资源的访问。有关更多信息,请参阅 存储库策略与 IAM policy。
以下存储库策略示例显示了可用于控制对 Amazon ECR 私有存储库的访问权限的权限声明。
重要
Amazon ECR 要求用户有权通过 IAM policy 调用 ecr:GetAuthorizationToken
API,然后才能对注册表进行身份验证并从任意 Amazon ECR 存储库推送或提取任意镜像。Amazon ECR 提供多个托管 IAM policy,用于控制不同级别下的用户访问;有关更多信息,请参阅 Amazon Elastic Container Registry 基于身份的策略示例。
示例:允许一个或多个 用户
以下存储库策略允许一个或多个 用户向存储库推送和从存储库提取映像。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPushPull", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
account-id
:user/push-pull-user-1
", "arn:aws:iam::account-id
:user/push-pull-user-2
" ] }, "Action": [ "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability", "ecr:CompleteLayerUpload", "ecr:GetDownloadUrlForLayer", "ecr:InitiateLayerUpload", "ecr:PutImage", "ecr:UploadLayerPart" ] } ] }
示例:允许其他账户
以下存储库策略允许特定账户推送镜像。
重要
您授予权限的账户必须启用所创建存储库策略的区域,否则将发生错误。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountPush", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
account-id
:root" }, "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:CompleteLayerUpload", "ecr:InitiateLayerUpload", "ecr:PutImage", "ecr:UploadLayerPart" ] } ] }
以下存储库策略允许部分用户拉取镜像(pull-user-1
和 pull-user-2
),并为其他用户提供完全的访问权限(admin-user
)。
注意
对于 AWS Management Console 中当前不支持的较复杂的存储库策略,您可以使用 set-repository-policy AWS CLI 命令应用此策略。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPull", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
account-id
:user/pull-user-1
", "arn:aws:iam::account-id
:user/pull-user-2
" ] }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] }, { "Sid": "AllowAll", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id
:user/admin-user
" }, "Action": [ "ecr:*" ] } ] }
示例:拒绝所有
以下存储库策略拒绝所有账户中的所有用户提取镜像。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyPull", "Effect": "Deny", "Principal": "*", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] } ] }
示例:限制对特定 IP 地址的访问权限
以下示例拒绝向任何用户授予在应用于来自特定地址范围的存储库时执行任何 Amazon ECR 操作的权限。
此语句中的条件确定允许的 Internet 协议版本 4 (IPv4) IP 地址范围为 54.240.143.*
。
Condition
块使用 NotIpAddress
条件和 aws:SourceIp
条件键(这是 AWS 范围的条件键)。有关这些条件键的更多信息,请参阅 AWS 全局条件上下文键。aws:sourceIp
IPv4 值使用标准 CIDR 表示法。有关更多信息,请参阅 IAM 用户指南中的 IP 地址条件运算符。
{ "Version": "2012-10-17", "Id": "
ECRPolicyId1
", "Statement": [ { "Sid": "IPAllow
", "Effect": "Deny", "Principal": "*", "Action": "ecr:*", "Condition": { "NotIpAddress": { "aws:SourceIp": "54.240.143.0/24
" } } } ] }
示例:允许 AWS 服务
以下存储库策略允许 AWS CodeBuild 访问与该服务集成所需的 Amazon ECR API 操作。使用以下示例时,您应该使用 aws:SourceArn
和 aws:SourceAccount
条件键来限定哪些资源可以使用这些权限。有关更多信息,请参阅 AWS CodeBuild 用户指南中的用于 CodeBuild 的 Amazon ECR 示例。
{ "Version":"2012-10-17", "Statement":[ { "Sid":"CodeBuildAccess", "Effect":"Allow", "Principal":{ "Service":"codebuild.amazonaws.com" }, "Action":[ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:codebuild:
region
:123456789012
:project/project-name
" }, "StringEquals":{ "aws:SourceAccount":"123456789012
" } } } ] }