ec2-consistent-snapshot 无法验证提供的访问凭证

ec2-consistent-snapshot 无法验证提供的访问凭证

我正在尝试在专用的 mysql 服务器上使用 Eric Hammond 的 ec2-consistent-snapshot 实用程序。

我已经创建了一个 IAM 用户并附加了一个高级用户权限策略(使用 AWS 控制台)。

在 32 位 Ubuntu 10.10 ec2 实例和 XFS 卷上,我按照以下说明安装了 ec2-consistent-snapshot:http://alestic.com/mt/mt-search.cgi?blog_id=1&tag=ec2-consistent-snapshot&limit=20

我启动的命令如下:

ec2-consistent-snapshot \ 
    --freeze-filesystem /data03 \
    --description "Test description $(date +'%Y-%m-%d %H:%M:%S')"  \
    --mysql \
    --mysql-user <my user>  \
    --mysql-host 127.0.0.1 \
    --mysql-socket /var/run/mysqld/mysqld.sock \
    --debug \
    vol-11111111

调试输出是:

ec2-consistent-snapshot: Using AWS access key: AWSAccessKeyId=AKI[...]
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: MySQL connect as <my user>
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: MySQL flush
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: MySQL flush & lock
ec2-consistent-snapshot: master_log_file="mysql-bin.000726", master_log_pos=106
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: sync
ec2-consistent-snapshot: Thu Mar 22 10:28:53 2012: xfs_freeze -f /data03
ec2-consistent-snapshot: Thu Mar 22 10:28:54 2012: create EC2 object
ec2-consistent-snapshot: Thu Mar 22 10:28:54 2012: ec2-create-snapshot vol-11111111
ec2-consistent-snapshot: ERROR: AWS was not able to validate the provided access credentials
ec2-consistent-snapshot: Thu Mar 22 10:28:56 2012: xfs_freeze -u /data03
ec2-consistent-snapshot: Thu Mar 22 10:28:56 2012: MySQL unlock
ec2-consistent-snapshot: Thu Mar 22 10:28:56 2012: MySQL disconnect
ec2-consistent-snapshot: Thu Mar 22 10:28:56 2012: done

(当然,volume id实际上并不是111111111)。

我尝试修改代码以确保它使用的是正确的密钥,结果证明是正确的。

我还有一个指向 /root/.awssecret 的环境变量

echo $AWS_CREDENTIAL_FILE
/root/.awssecret

我还尝试过其他方法,并产生了相同的结果: - 将凭证文件的路径作为参数传递。 - 生成新的凭证并使用这些凭证。 - 将区域指定为 us-east-1,而不是让其变为默认值。

我的凭证文件如下:

AWSAccessKeyId=AKI[...]
AWSSecretKey=DPh[..]

就是这样了,感谢您的帮助。

答案1

ec2-consistent-snapshot 的调试输出通常为:

'Using AWS access key: AKI[...]'

由于您看到的输出包括AWSAccessKeyId=并且快速浏览了代码(第 470-471 行)后 - 它只是读取每一行,而无需进一步解析:

($aws_access_key_id, $aws_secret_access_key) =
      File::Slurp::read_file($aws_credentials_file);

解决方案可能是省略凭证文件中的“AWSAccessKeyId=”和“AWSSecretKey=”前缀。因此,您的凭证文件应类似于:

AKI[...]
DPh[...]

根据脚本的文档,该文件应按顺序在单独的行上包含 Amazon AWS 访问密钥和秘密访问密钥。此外,该脚本还会读取 $AWS_CREDENTIALS 环境变量。

--aws-access-key-id您还可以尝试使用和参数将身份验证参数直接传递给脚本--aws-secret-access-key

相关内容