从AWS Glacier向S3桶恢复数据失败:遇权限错误
问题解决与指导
首先解决AccessDeniedException错误
你的CLI命令里的--account-id参数用错了,你填的AKIA3XOWVUQKSRK6R5N4是IAM用户的Access Key ID,而Glacier要求的account-id是你的AWS账号ID(12位数字),也就是错误信息里的806293447701。修正后的命令应该是:
aws glacier initiate-job --account-id 806293447701 --vault-name bitcoin-class --job-parameters file://inventory-retrieval.json
另外,确认你的IAM策略是否正确关联到用户salman,有时候会出现策略已创建但未附加到用户的情况。你可以在IAM控制台检查用户的权限列表,确认AmazonGlacierFullAccess确实已附加。
你的问题解答
1. 恢复流程中是否有我忽略的特定配置?
- 除了上面提到的
account-id参数错误,还要检查你的恢复任务参数文件inventory-retrieval.json:如果是要提取归档到S3,参数里需要指定SNSTopic(接收任务完成通知)和ArchiveId(单个归档恢复时),或者配置InventoryRetrieval的同时指定后续S3目标。 - 确保Glacier vault所在区域(us-west-2)与你CLI配置的区域一致,否则需要在命令里加上
--region us-west-2参数。 - 检查是否开启了Vault锁,如果Vault有锁策略,可能会限制
InitiateJob操作。
2. 如何调试数据未出现在S3桶中的问题?
- 首先确认Glacier恢复任务是否成功完成:用
aws glacier describe-job命令查询任务状态,命令示例:
只有当任务状态为aws glacier describe-job --account-id 806293447701 --vault-name bitcoin-class --job-id <你的任务ID>Succeeded时,数据才会准备好。 - 检查S3桶的权限:确保Glacier有写入该S3桶的权限,你可以在S3桶的权限策略里添加允许Glacier服务写入的规则,或者确认你的IAM用户有足够的S3权限来触发传输。
- 查看CloudTrail日志:搜索Glacier的
InitiateJob和CompleteMultipartUpload(大文件场景)操作,以及S3的PutObject操作,确认是否有错误日志。 - 检查S3桶的存储类和区域:确保桶的区域与Glacier vault区域兼容,或者跨区域传输是否被允许。
3. 将恢复的数据传输至S3是否需要额外步骤?
是的,需要额外步骤:
- 如果是单个归档恢复:在
initiate-job的参数文件里,需指定SNSTopic,任务成功后,可使用aws glacier get-job-output命令将数据下载到本地再上传到S3;也可以在恢复任务中配置直接归档到S3(需在参数里指定S3Destination配置,包括桶名、存储类、权限等)。 - 如果是批量归档恢复:先发起inventory retrieval任务获取所有归档列表,然后逐个发起归档恢复任务,每个任务完成后再将数据传输到S3。
- 注意:Glacier恢复任务有不同的检索速度(标准、批量、快速),不同速度的任务完成时间不同:批量1-5小时,标准3-5小时,快速1-5分钟(仅限小归档)。
内容的提问来源于stack exchange,提问作者Salman Khalid
相关产品推荐
相关产品推荐

