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

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

我有两个系统,一个运行 Ubuntu 11.04,另一个运行 10.04 LTS。两台机器上的相同配置产生不同的结果。10.04LTS 机器无法找到我的 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,它在两台机器上都存在。

更多信息。

尽管我的环境变量设置正确,但 ec2-consistent-snapshot 似乎仍在名为 .awssecret 的文件中寻找我的密钥

open("/root/.awssecret", O_RDONLY) = -1 ENOENT(没有这样的文件或目录)写入(2,“ec2-consistent-snapshot:错误:”...,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”,“自动快照 SMC 根”,“vol-283d5446”,“--region”,“us-west-1”],[/* 21 变量 */])= 0

我尝试使用较短的名称和 pem 文件的名称 .awssecret,这消除了“无法找到”的情况,但导致“无法验证凭证”错误。因此,我觉得解决主要错误很可能也会解决次要错误。

我确信这是我的 10.04 系统上缺少的某个库或某些东西。

答案1

我明白这是什么混淆。这在 AWS 上很常见,我第一次阅读您的描述时甚至没有注意到。您在命令行选项中传递了错误的凭证对象。

ec2-consistent-snapshot 程序需要“访问密钥 ID”和“秘密访问密钥”。这些值与“证书”和“私钥”完全不同,尽管它们用于实现相同的目的。

这是我写的一篇文章,试图解释许多不同的凭证以及在哪里可以找到它们:

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

答案2

我是ec2 一致快照(感谢其他补丁贡献者)并且首先承认,它过于努力地在太多地方搜索以找到您的 AWS 凭证。不幸的是,Amazon 工具和其他第三方工具告诉您将凭证放在哪里几乎没有一致性。我的目标是避免加剧这个问题,所以我认为最好在几个最常见的地方查找并使用找到的第一个凭证。

这在大多数情况下都很有效,但如果您的文件系统、环境变量以及指向文件系统的环境变量中存储了多个不同的 AWS 凭证,则可能会导致问题。

软件在确定哪些值应覆盖其他值的优先级方面做出了一些糟糕的选择。例如,看起来您在命令行上指定了 --aws-access-key-id-file,但如果设置了变量 $AWS_ACCESS_KEY_ID,它将被该变量覆盖。命令行选项应该覆盖环境或文件系统设置,但在这种情况下,它会感到困惑,因为它是环境中指定的特定值,而不是命令行中指定的文件路径,并且它选择特定值而不是存储在某个文件中的值。

打开 --debug 命令行选项并查找包含如下信息的调试输出:

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

如果这是正确的访问密钥 ID,那么您可能需要编辑程序并在之后直接添加一个输出秘密访问密钥的调试行。如果它不是正确的访问密钥 ID,那么您需要查看软件查找 AWS 凭证的不同位置(请参阅手册页)并找到它从哪里获取该信息。

注意:在您的调试行中,我不认为凭据实际上在软件中被截断。我相信那只是调试器在说传递的实际值比它想要显示的要长。

答案3

问题已解决。感谢 @eric 向我介绍了凭证。

整个环境变量问题(而不是命令行变量)对我来说都是一个干扰。事实证明,11.04 机器可以正常工作,因为在某个时候,我将我的 AWS 凭证放入了主目录中的 .awssecret 文件中。事实上,我还设置了各种环境变量,但这并不重要。

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

事实证明,使用格式正确的 .awssecret 文件,就不需要以下环境变量:

EC2-CERT、EC2_PRIVATE_KEY、AWS_ACCESS_KEY_ID 或 AWS_SECRET_ACCESS_KEY 均已设置。

相关内容