我正在尝试设置一个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
有什么想法拒绝我的凭据?
提前致谢
答案 0 :(得分:0)
如果您使用的是IAM配置文件,则无需为脚本调用添加凭据。从您的通话中删除访问密钥和密钥。
./mon-put-instance-data.pl --mem-util --verbose
答案 1 :(得分:0)
是。你是对的 - 如果你没有指定并且似乎有效,它会自动获得角色信用。
不确定为什么它不能通过手动设置信誉来工作,但我可以看一下perl脚本来相当容易地解决这个问题。
感谢您的帮助。
答案 2 :(得分:0)
以下示例假定您提供了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