AWS S3 JS SDK调用restoreObject带OutputLocation时触发MalformedXML错误
解决S3 Glacier恢复时的MalformedXML异常问题
核心原因
你的restoreParams中OutputLocation.S3缺少必填的RoleArn参数,这是导致XML格式验证失败的直接原因。AWS要求在指定恢复输出位置时,必须提供一个IAM角色的ARN,用于授权S3将恢复后的对象写入目标位置。
修正后的参数配置
let restoreParams = { Bucket: "bucketExample", Key: "file.txt", RestoreRequest: { Days: 1, GlacierJobParameters: { Tier: "Standard" }, OutputLocation: { S3: { BucketName: "bucketExample", Prefix: "_restoreComplete", RoleArn: "arn:aws:iam::123456789012:role/YourS3RestoreRole" // 替换为你的IAM角色ARN } } } };
关键权限配置
你需要确保这个IAM角色具备以下权限:
- 允许从源S3桶读取对象的权限(
s3:GetObject) - 允许向目标桶(这里是同一个桶)写入对象的权限(
s3:PutObject) - 角色的信任策略必须允许
s3.amazonaws.com作为可信实体,示例信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
其他检查点
- 确认
RoleArn中的账号ID和角色名称正确无误 - 目标桶的前缀
_restoreComplete没有包含AWS禁止的特殊字符 - 你的CORS配置修改与该异常无关,因为这是服务器端的XML Schema验证错误,并非跨域请求问题
内容的提问来源于stack exchange,提问作者doydoy
相关产品推荐
相关产品推荐

