无法移除ACR镜像隔离标记:PATCH请求返回未授权问题
解决ACR镜像隔离标记移除的未授权问题
以下是排查和解决你遇到的未授权问题的几个关键点:
修复Shell变量引用问题
你的curl命令中,authorization头里的$acr_access_token被包裹在单引号中,Shell不会对单引号内的变量进行替换,导致实际发送的是字符串$acr_access_token而非真正的访问令牌。把单引号改成双引号即可:curl --header "authorization: Bearer $acr_access_token" --header 'Host: cr.azurecr.io' --header 'Content-Type: application/json' --request PATCH --url https://cr.azurecr.io/acr/v1/msc-todo/_manifests/sha256:651d76853edb22c702bb30aeb099a411015e92a347182fe6028f81efc8ef47f4 --data '{"quarantineState": "Passed", "quarantineDetails": "{\"state\":\"scan passed\",\"link\":\"http://test.io/test\"}" }'添加Content-Type请求头
发送JSON格式的请求体时,必须指定Content-Type: application/json头,否则ACR服务器可能无法正确解析请求数据,进而导致权限校验失败或请求被拒绝。验证访问令牌的权限范围
确认az acr login获取的令牌包含acr:quarantine_write权限。可以通过解码JWT令牌检查scp字段是否包含该权限。如果当前登录身份没有对应权限,需要确保使用的服务主体已被正确授予AcrQuarantineWriter角色,并且在执行az acr login时指定该服务主体:az acr login --name cr --service-principal --username <service-principal-id> --password <service-principal-secret> --expose-token --output tsv --query accessToken检查镜像路径的正确性
确认请求URL中的仓库名称msc-todo和镜像摘要sha256:xxx完全正确,路径错误也可能被服务器返回未授权(部分场景下服务器会用通用错误码隐藏实际问题)。
内容的提问来源于stack exchange,提问作者Shree
相关产品推荐
相关产品推荐

