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配置要点
- 确保Secrets Manager的秘密内容是JSON格式,包含
username和password键 - 为ECR服务角色添加
secretsmanager:GetSecretValue权限,允许ECR读取对应的秘密ARN - 拉取缓存规则的
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
相关产品推荐
相关产品推荐

