AWS:身份验证问题尝试将指标从EC2推送到CloudWatch

时间:2017-06-29 13:40:45

标签: linux amazon-web-services amazon-cloudwatch

我正在尝试设置一个EC2(RHEL7)实例,使用perl脚本将指标推送到cloudwatch,如http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html

中所述

我收到HTTP状态400消息"请求中包含的安全令牌无效"

实例配置文件与附加了以下策略的实例相关联:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeTags"
            ],
            "Resource": "*"
        }
    ]
}

我从实例元数据中提取 AWSAccessKeyId AWSSecretKey ,如下所示:

ROLE=$(curl http://169.254.169.254/latest/meta-data/iam/security-credentials/)
CRED=$(curl http://169.254.169.254/latest/meta-data/iam/security-credentials/$ROLE)

AWSAccessKeyId=$(sed '/AccessKeyId/!d; s/.*:\ \+"\(.\+\)",/\1/g' <<< "$CRED")
AWSSecretKey=$(sed '/SecretAccessKey/!d; s/.*:\ \+"\(.\+\)",/\1/g' <<< "$CRED")

...当我检查它们时,上述变量中​​设置的值是正确的......

我正在运行脚本以按如下方式推送到cloudwatch(使用存储在上面变量中的信用卡):

./mon-put-instance-data.pl --mem-util --verbose --aws-access-key-id  $AWSAccessKeyId --aws-secret-key $AWSSecretKey

有什么想法拒绝我的凭据?

提前致谢

3 个答案:

答案 0 :(得分:0)

如果您使用的是IAM配置文件,则无需为脚本调用添加凭据。从您的通话中删除访问密钥和密钥。

./mon-put-instance-data.pl --mem-util --verbose

答案 1 :(得分:0)

是。你是对的 - 如果你没有指定并且似乎有效,它会自动获得角色信用。

不确定为什么它不能通过手动设置信誉来工作,但我可以看一下perl脚本来相当容易地解决这个问题。

感谢您的帮助。

答案 2 :(得分:0)

来自documentation

以下示例假定您提供了IAM角色或awscreds.conf文件。否则,必须为这些命令使用--aws-access-key-id和--aws-secret-key参数提供凭据。

出现错误时的一种选择:

错误:无法调用CloudWatch:HTTP400。消息:请求中包含的安全令牌无效。

脚本使用配置文件(例如,凭据错误)

aws-scripts-mon/awscreds.conf

因此,必须提供IAM角色或awscreds.conf--aws*参数。 而且IAM角色具有正确的permissions

cloudwatch:PutMetricData
cloudwatch:GetMetricStatistics
cloudwatch:ListMetrics
ec2:DescribeTags