You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ECR拉取缓存配置:DockerHub与GHCR.io的密钥名称及权限疑问

解决方案:ECR拉取缓存配置(DockerHub & GHCR.io)

一、AWS Secrets Manager 密钥名称要求

不管是DockerHub还是GHCR.io,ECR拉取缓存要求Secrets Manager中的秘密必须包含**username和password**两个键——这是ECR固定的解析格式,其他命名(如access-token、token等)都会导致认证失败。

  • DockerHub:
    • username:你的DockerHub账号用户名
    • password:DockerHub个人访问令牌(PAT),不能用账号原密码(DockerHub已限制密码用于程序访问)
  • GHCR.io:
    • username:你的GitHub账号用户名
    • password:GitHub个人访问令牌(PAT)

二、访问令牌所需权限

DockerHub PAT权限

仅需勾选read:packages权限,足够用于拉取公共/私有镜像,无需额外权限。

GitHub PAT权限

  • 拉取公共GHCR镜像:理论上匿名可访问,但使用PAT可规避GitHub的请求速率限制,仅需勾选read:packages权限
  • 拉取私有GHCR镜像:需额外勾选repo权限(若镜像关联私有仓库)

三、GHCR.io公共镜像的拉取缓存支持

完全支持,包括Keda等官方发布的公共镜像。配置时只需确保拉取缓存规则的前缀匹配正确,例如:

  • ECR侧仓库前缀设为ghcr,则拉取public.ecr.aws/<你的ECR前缀>/ghcr.io/keda/keda:latest时,ECR会自动从GHCR拉取并缓存该镜像。

四、Terraform配置要点

  1. 确保Secrets Manager的秘密内容是JSON格式,包含username和password键
  2. 为ECR服务角色添加secretsmanager:GetSecretValue权限,允许ECR读取对应的秘密ARN
  3. 拉取缓存规则的upstream_registry_url需准确填写:DockerHub为docker.io,GHCR为ghcr.io

示例代码片段:

# DockerHub 认证秘密
resource "aws_secretsmanager_secret" "dockerhub_creds" {
  name = "ecr-pull-cache/dockerhub"
}

resource "aws_secretsmanager_secret_version" "dockerhub_creds" {
  secret_id     = aws_secretsmanager_secret.dockerhub_creds.id
  secret_string = jsonencode({
    username = "your-dockerhub-username"
    password = "your-dockerhub-pat"
  })
}

# GHCR 认证秘密
resource "aws_secretsmanager_secret" "ghcr_creds" {
  name = "ecr-pull-cache/ghcr"
}

resource "aws_secretsmanager_secret_version" "ghcr_creds" {
  secret_id     = aws_secretsmanager_secret.ghcr_creds.id
  secret_string = jsonencode({
    username = "your-github-username"
    password = "your-github-pat"
  })
}

# ECR 拉取缓存规则(DockerHub)
resource "aws_ecr_replication_configuration" "dockerhub_cache" {
  replication_configuration {
    rule {
      repository_filter {
        filter      = "docker.io/*"
        filter_type = "PREFIX_MATCH"
      }
      destination {
        region      = "us-east-1"
        registry_id = data.aws_caller_identity.current.account_id
      }
      pull_through_cache {
        ecr_repository_prefix = "dockerhub"
        upstream_registry_url = "docker.io"
        secret_arn            = aws_secretsmanager_secret.dockerhub_creds.arn
      }
    }
  }
}

# ECR 拉取缓存规则(GHCR)
resource "aws_ecr_replication_configuration" "ghcr_cache" {
  replication_configuration {
    rule {
      repository_filter {
        filter      = "ghcr.io/*"
        filter_type = "PREFIX_MATCH"
      }
      destination {
        region      = "us-east-1"
        registry_id = data.aws_caller_identity.current.account_id
      }
      pull_through_cache {
        ecr_repository_prefix = "ghcr"
        upstream_registry_url = "ghcr.io"
        secret_arn            = aws_secretsmanager_secret.ghcr_creds.arn
      }
    }
  }
}

内容的提问来源于stack exchange,提问作者richardnpaul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:55:04