为什么ec2-consistent-snapshot不能find我的AWS证书/密钥?

我有两个系统,一个运行Ubuntu 11.04,一个运行10.04 LTS。 两台机器的相同configuration产生不同的结果。 10.04LTS机器无法find我的AWS凭证文件。

11.04

export | grep EC2 declare -x EC2_CERT="/home/jdw/.ec2/cert-PJU5MW2PCN24SKPOIVFTWCMBUXWWZO7U.pem" declare -x EC2_HOME="/opt/ec2-ami-tools-1.3-66634" declare -x EC2_PRIVATE_KEY="/home/jdw/.ec2/pk-PJU5MW2PCN24SKPOIVFTWCMBUXWWZO7U.pem" ls -al /home/jdw/.ec2/ total 16 drwxr-xr-x 2 jdw jdw 4096 2011-08-18 13:31 . drwxr-xr-x 58 jdw jdw 4096 2011-09-23 10:24 .. -rw-r--r-- 1 jdw jdw 916 2011-08-18 13:30 cert-PJU5MW2PCN24SKPOIVFTWCMBUXWWZO7U.pem -rw-r--r-- 1 jdw jdw 928 2011-08-18 13:30 pk-PJU5MW2PCN24SKPOIVFTWCMBUXWWZO7U.pem /usr/bin/ec2-consistent-snapshot --description "Autosnapshot root" vol-283d5246 --region us-west-1 snap-0c679a62 

在10.04 LTS

 export | grep EC2 declare -x EC2_CERT="/root/.ec2/cert-PJU5MW2PCN24SKPOIVFTWCMBUXWWZO7U.pem" declare -x EC2_HOME="/mnt/ec2-api-tools-1.4.4.2" declare -x EC2_PRIVATE_KEY="/root/.ec2/pk-PJU5MW2PCN24SKPOIVFTWCMBUXWWZO7U.pem" ls -al /root/.ec2 total 16 drwxr-xr-x 2 root root 4096 2011-09-23 10:50 . drwx------ 8 root root 4096 2011-09-23 10:50 .. -rw-r--r-- 1 root root 916 2011-09-23 10:11 cert-PJU5MW2PCN24SKPOIVFTWCMBUXWWZO7U.pem -rw-r--r-- 1 root root 928 2011-09-23 10:47 pk-PJU5MW2PCN24SKPOIVFTWCMBUXWWZO7U.pem /usr/bin/ec2-consistent-snapshot --description "Autosnapshot root" vol-283d5246 --region us-west-1 ec2-consistent-snapshot: ERROR: Can't find AWS access key or secret access key at /usr/bin/ec2-consistent-snapshot line 97. 

我假设我错过了对10.04盒子的一些依赖,但没有任何运气发现它可能是我。 我运行的唯一依赖项是两个机器上都存在的PERL_MM_USE_DEFAULT = 1 cpan Net :: Amazon :: EC2。

更多信息。

看来,尽pipe我的环境variables设置正确,ec2-consistent-snapshot正在寻找一个名为.awssecret的文件中的密钥

open(“/ root / .awssecret”,O_RDONLY)= -1 ENOENT(没有这样的文件或目录)write(2,“ec2-consistent-snapshot:ERROR:”…,124)= 124 exit_group(2)= ? 〜

而且,从命令行提供凭据似乎会截短凭证名称:

execve(“/ usr / bin / ec2-consistent-snapshot”,[“/ usr / bin / ec2-consistent-snapshot”,“–aws-access-key-id-file”,“/root/.ec2/ cert-PJU5MW2PCN44GRAV“…”,“aws-secret-access-key-file”,“/root/.ec2/pk-PJU5MW2PCN44GRAVIV”…,“–description”,“Autosnapshot SMC root”,“ vol-283d5446“,” – region“,”us-west-1“],[/ * 21 vars * /])= 0

我试图使用较短的名称和名称.awssecret为pem文件,这将删除'找不到'的条件,但它导致'无法validation凭据'的错误。 因此,我认为解决主要的错误很可能会解决次要问题。

我很积极,这是一些缺失的库或我的10.04系统上的东西。

我明白了什么是混乱 这在AWS上很常见,我第一次看到你的描述时就没有注意到。 您在命令行选项中传递了错误的凭据对象。

ec2一致快照程序需要“访问密钥ID”和“秘密访问密钥”。 这些是与“证书”和“私钥”完全不同的值,尽pipe它们被用来实现相同的目的。

下面是我写的一篇文章,试图解释许多不同的证书以及在哪里可以find它们:

了解AWS / EC2的访问凭证
http://alestic.com/2009/11/ec2-credentials

我是ec2-consistent-snapshot的作者/维护者(感谢补丁的其他贡献者),并且会第一个承认通过在太多的地方search来find你的AWS证书。 不幸的是,亚马逊工具和其他第三方工具告诉你放置你的证书的地方几乎没有一致性。 我的目标是避免增加这个问题,所以我认为最好查找几个最常见的地方,并使用find的第一个凭据。

这适用于大多数场景,但如果您的文件系统中存储了多个不同的AWS凭证,环境variables和指向文件系统的环境variables,则会导致问题。

这个软件使得一些关于优先考虑哪些值应该覆盖其他值的select很差。 例如,它看起来像在命令行中指定了–aws-access-key-id-file,但是如果设置了这个参数,它将被variables$ AWS_ACCESS_KEY_ID覆盖。 命令行选项应该覆盖环境或文件系统设置,但在这种情况下,它会变得很混乱,因为它是在环境中指定的特定值与在命令行中指定的文件path相比,它select特定值而不是存储在某个文件中的值。

打开–debug命令行选项,并查找debugging输出的信息,如:

 ec2-consistent-snapshot: Using AWS access key: ... 

如果这是正确的访问密钥ID,那么你可能想要编辑程序,并在之后直接添加一个debugging行,输出秘密访问密钥。 如果不是正确的访问密钥ID,那么您需要查看软件查找AWS凭据的不同位置(请参阅联机帮助页),并find获取该信息的位置。

注意:在您的debugging行中,我不认为这些凭据实际上在软件中被截断。 我相信这只是debugging者说的,实际的价值观比我们关心的要长。

这已经解决了。 感谢@eric通过证书走我。

整个环境variables副命令行variables的问题对我来说是一个红鲱鱼。 事实certificate,工作11.04盒子工作,因为在某些时候,我已经把我的AWS凭证放入我的主目录中的.awssecret文件。 我也有各种环境variables设置的事实是无关紧要的。

一旦我将.awssecret文件设置为10.04框中的相同值,一切都很好。

事实certificate,使用格式正确的.awssecret文件,不需要以下环境variables:

EC2-CERT,EC2_PRIVATE_KEY,AWS_ACCESS_KEY_ID或AWS_SECRET_ACCESS_KEY。