Deja Dup / Boto S3 备份使用有效凭证时出现 403

Deja Dup / Boto S3 备份使用有效凭证时出现 403

我正在使用 Deja Dup 将我的笔记本电脑备份到 S3。这已经用于许多备份,但从 20 天前开始就停止工作了。

Traceback (most recent call last):
  File "/usr/bin/duplicity", line 1532, in <module>
    with_tempdir(main)
  File "/usr/bin/duplicity", line 1526, in with_tempdir
    fn()
  File "/usr/bin/duplicity", line 1364, in main
    action = commandline.ProcessCommandLine(sys.argv[1:])
  File "/usr/lib/python2.7/dist-packages/duplicity/commandline.py", line 1108, in ProcessCommandLine
    globals.backend = backend.get_backend(args[0])
  File "/usr/lib/python2.7/dist-packages/duplicity/backend.py", line 223, in get_backend
    obj = get_backend_object(url_string)
  File "/usr/lib/python2.7/dist-packages/duplicity/backend.py", line 209, in get_backend_object
    return factory(pu)
  File "/usr/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 161, in __init__
    self.resetConnection()
  File "/usr/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 194, in resetConnection
    raise e
S3ResponseError: S3ResponseError: 403 Forbidden

我已经验证了用户策略是正确的。我在 AWS 策略测试器中对它们进行了测试,并使用它们与 AWS CLI 一起列出了存储桶、从备份存储桶中读取数据以及向备份存储桶写入数据。

我的台式机上的备份仍然有效,并且使用相同的凭据。台式机和笔记本电脑的备份不进入同一个存储桶,但使用相同的用户凭据。

我的机器时间没有不同步。

我已经验证了 UI 和 dconf 编辑器中的 deja dup 设置在正确无误。

我使用笔记本电脑的次数比使用台式机的次数多,因此笔记本电脑可能进行了一些更新,从而导致一些问题,但我不确定是什么问题。

已经研究了几个小时,但还是不知所措。在不久的将来尝试升级到 18.04 之前,我希望有此备份。

版本信息:aws-cli/1.15.79 Python/2.7.12 Linux/4.15.0-30-generic botocore/1.10.78 boto 2.49.0
botocore 1.10.78

编辑:以上内容适用于 Ubuntu 16。我最近升级到了 Ubuntu 18,但仍然遇到问题。我认为是同一个问题,但日志略有不同。以下是 Ubuntu 18 上的内容:

DUPLICITY: ERROR 30 S3ResponseError
DUPLICITY: . Traceback (innermost last):
DUPLICITY: .   File "/usr/bin/duplicity", line 1555, in <module>
DUPLICITY: .     with_tempdir(main)
DUPLICITY: .   File "/usr/bin/duplicity", line 1541, in with_tempdir
DUPLICITY: .     fn()
DUPLICITY: .   File "/usr/bin/duplicity", line 1380, in main
DUPLICITY: .     action = commandline.ProcessCommandLine(sys.argv[1:])
DUPLICITY: .   File "/usr/lib/python2.7/dist-packages/duplicity/commandline.py", line 1127, in ProcessCommandLine
DUPLICITY: .     globals.backend = backend.get_backend(args[0])
DUPLICITY: .   File "/usr/lib/python2.7/dist-packages/duplicity/backend.py", line 223, in get_backend
DUPLICITY: .     obj = get_backend_object(url_string)
DUPLICITY: .   File "/usr/lib/python2.7/dist-packages/duplicity/backend.py", line 209, in get_backend_object
DUPLICITY: .     return factory(pu)
DUPLICITY: .   File "/usr/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 166, in __init__
DUPLICITY: .     self.resetConnection()
DUPLICITY: .   File "/usr/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 191, in resetConnection
DUPLICITY: .     location=self.my_location)
DUPLICITY: .   File "/home/aaronloes/.local/lib/python2.7/site-packages/boto/s3/connection.py", line 628, in create_bucket
DUPLICITY: .     response.status, response.reason, body)
DUPLICITY: .  S3ResponseError: S3ResponseError: 403 Forbidden
DUPLICITY: . <?xml version="1.0" encoding="UTF-8"?>
DUPLICITY: . <Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>XXXXXCENSORXXXXX</AWSAccessKeyId><StringToSign>PUT

我清除了日志中的密钥,但已验证这是正确的密钥。我不确定如何让 duplicity/dejadup 再次提示我输入 AWS 密钥,因为可能因为某种原因缓存不当?

awscli 1.15.79
Python 2.7.15rc1 4.15.0-38-通用 boto 2.49.0
botocore 1.10.78

编辑 能够让 deja-dup 提示我输入新凭证,但仍然没有任何变化。我毫不怀疑 duplicity 使用的是正确的凭证,而且我毫不怀疑凭证是有效的。

答案1

尝试重新安装 duplicity。大多数此类问题都可以通过简单的重新安装来解决。否则,请使用 tar 创建 / 的备份,其中包含 dialog 和以下代码:

#!/bin/sh
# Backup all files under / directory
# Display message with option to cancel
dialog --title "Backup" --msgbox "Time for backup! Press <Enter> to start backup or <Esc> to cancel." 0 0
# Return status of non-zero indicates cancel
if [ "$?" != "0" ]
then
  dialog --title "Backup" --msgbox "Backup was canceled at your request." 0 0
else
  tarlocation=$(dialog --inputbox "Where would you like to save the TAR file?" 0 0)
  dialog --title "Backup" --infobox "Backup in progress..." 0 0
  cd ~
  # Backup using tar; redirect any errors to a
  # temporary file      
  tar -czf $tarlocation 0 0 >|/tmp/ERRORS$$ 2>&1
  # zero status indicates backup was successful
  if [ "$?" = "0" ]
  then
    dialog --title "Backup" --msgbox "Backup completed successfully." 0 0
  else
    # Backup failed, display error log
    dialog --title "Backup" --msgbox "Backup failed -- Press <Enter> to see error log." 0 0
    dialog --title "Error Log" --textbox /tmp/ERRORS$$ 0 0
  fi
fi
rm -f /tmp/ERRORS$$
clear

谢谢!

答案2

所以我终于搞明白了。这花了一段时间,因为我不再将有问题的电脑作为我的主力电脑。我最近需要使用它,于是决定再试一次,然后我就找到了答案。

在某个时候,boto(不太可能)或 duplicity/deja-dup 停止使用我在其配置中提供的凭据,并开始使用我在环境变量中设置的凭据。Boto 应该在查找环境之前获取提供的凭据,因此我假设它与 duplicity/deja-dup 有关。我知道发生了变化,因为我在拿到这台电脑的那天设置了备份和那些环境变量。

我删除了环境变量并且备份再次开始工作。

谜团终于解开了。

相关内容