Yes steven you are right. In the new python boto versions they are sending the arguments via final headers but we are expecting on the query string. See the example.
python boto 2.32.1:
DEBUG [2014-11-12 11:13:48,915] cfn-push-stats called Namespace(cpu_util=False, credential_file='/etc/cfn/cfn-credentials', disk_path='/', disk_space_avail=False, disk_space_used=False, disk_space_util=False, disk_units='megabytes', haproxy=False, haproxy_latency=False, heartbeat=False, mem_avail=False, mem_used=False, mem_util=False, memory_units='megabytes', metric=None, service_failure=True, swap_used=False, swap_util=False, units=None, value=None, verbose=False, watch='restarter-HttpFailureAlarm') DEBUG [2014-11-12 11:13:48,916] Using access key provided by client. DEBUG [2014-11-12 11:13:48,916] Using secret key provided by client. INFO [2014-11-12 11:13:48,916] Sending metric ServiceFailure, Units Counter, Value 1 DEBUG [2014-11-12 11:13:48,917] Method: POST DEBUG [2014-11-12 11:13:48,917] Path: /v1/ DEBUG [2014-11-12 11:13:48,917] Data: DEBUG [2014-11-12 11:13:48,917] Headers: {} DEBUG [2014-11-12 11:13:48,917] Host: 10.32.10.151 DEBUG [2014-11-12 11:13:48,917] Port: 8003 DEBUG [2014-11-12 11:13:48,917] Params: {'MetricData.member.1.Dimensions.member.2.Value': 'restarter-HttpFailureAlarm', 'MetricData.member.1.Dimensions.member.2.Name': 'AlarmName', 'Namespace': 'system/linux', 'MetricData.member.1.Unit': 'Counter', 'MetricData.member.1.Value': 1, 'Action': 'PutMetricData', 'MetricData.member.1.Dimensions.member.1.Name': 'InstanceId', 'Version': '2010-08-01', 'MetricData.member.1.Dimensions.member.1.Value': u'90b27502-49cf-43f8-804c-fccd304e796d', 'MetricData.member.1.MetricName': 'ServiceFailure'} DEBUG [2014-11-12 11:13:48,917] establishing HTTP connection: kwargs={'port': 8003, 'timeout': 70} DEBUG [2014-11-12 11:13:48,917] Token: None DEBUG [2014-11-12 11:13:48,919] CanonicalRequest: POST /v1/
host:10.32.10.151:8003 x-amz-date:20141112T101348Z
host;x-amz-date 67f215d4c6638325995976310e635a69f4c10c56de61e8d9855e9f80e1f34186 DEBUG [2014-11-12 11:13:48,919] StringToSign: AWS4-HMAC-SHA256 20141112T101348Z 20141112/32/10/aws4_request 55d0054ff53524a243e0bef360f267ffbac6b31d061a622553b20042053780da DEBUG [2014-11-12 11:13:48,919] Signature: 4086ffd920db62e40af076da8e2a0b02408b2d430eb9c059eca1034a506c7fce DEBUG [2014-11-12 11:13:48,919] Final headers: {'Content-Length': '438', 'User-Agent': 'Boto/2.32.1 Python/2.6.6 Linux/2.6.32-431.23.3.el6.x86_64', 'Host': '10.32.10.151:8003', 'X-Amz-Date': '20141112T101348Z', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Authorization': 'AWS4-HMAC-SHA256 Credential=27178e0b9c71478e837c02d17fe1aa4d/20141112/32/10/aws4_request,SignedHeaders=host;x-amz-date,Signature=4086ffd920db62e40af076da8e2a0b02408b2d430eb9c059eca1034a506c7fce'} DEBUG [2014-11-12 11:13:48,935] Response headers: [('date', 'Wed, 12 Nov 2014 10:13:49 GMT'), ('content-length', '195'), ('content-type', 'application/xml; charset=UTF-8')] DEBUG [2014-11-12 11:13:48,935] <ErrorResponse><Error><Message>The request signature we calculated does not match the signature you provided</Message><Code>SignatureDoesNotMatch</Code><Type>Sender</Type></Error></ErrorResponse> ERROR [2014-11-12 11:13:48,935] 403 SignatureDoesNotMatch ERROR [2014-11-12 11:13:48,936] <ErrorResponse><Error><Message>The request signature we calculated does not match the signature you provided</Message><Code>SignatureDoesNotMatch</Code><Type>Sender</Type></Error></ErrorResponse>
python boto 2.12.0:
DEBUG [2014-11-12 11:19:40,501] cfn-push-stats called Namespace(cpu_util=False, credential_file='/etc/cfn/cfn-credentials', disk_path='/', disk_space_avail=False, disk_space_used=False, disk_space_util=False, disk_units='megabytes', haproxy=False, haproxy_latency=False, heartbeat=False, mem_avail=False, mem_used=False, mem_util=False, memory_units='megabytes', metric=None, service_failure=True, swap_used=False, swap_util=False, units=None, value=None, verbose=False, watch='restarter-HttpFailureAlarm') DEBUG [2014-11-12 11:19:40,502] Using access key provided by client. DEBUG [2014-11-12 11:19:40,502] Using secret key provided by client. INFO [2014-11-12 11:19:40,502] Sending metric ServiceFailure, Units Counter, Value 1 DEBUG [2014-11-12 11:19:40,503] Method: POST DEBUG [2014-11-12 11:19:40,503] Path: /v1/ DEBUG [2014-11-12 11:19:40,503] Data: DEBUG [2014-11-12 11:19:40,503] Headers: {} DEBUG [2014-11-12 11:19:40,503] Host: 10.32.10.151:8003 DEBUG [2014-11-12 11:19:40,503] Params: {'MetricData.member.1.Dimensions.member.2.Value': 'restarter-HttpFailureAlarm', 'MetricData.member.1.Dimensions.member.2.Name': 'AlarmName', 'Namespace': 'system/linux', 'MetricData.member.1.Unit': 'Counter', 'MetricData.member.1.Value': 1, 'Action': 'PutMetricData', 'MetricData.member.1.Dimensions.member.1.Name': 'InstanceId', 'Version': '2010-08-01', 'MetricData.member.1.Dimensions.member.1.Value': u'90b27502-49cf-43f8-804c-fccd304e796d', 'MetricData.member.1.MetricName': 'ServiceFailure'} DEBUG [2014-11-12 11:19:40,503] establishing HTTP connection: kwargs={'timeout': 70} DEBUG [2014-11-12 11:19:40,503] Token: None DEBUG [2014-11-12 11:19:40,504] using _calc_signature_2 DEBUG [2014-11-12 11:19:40,504] query string: AWSAccessKeyId=27178e0b9c71478e837c02d17fe1aa4d&Action=PutMetricData&MetricData.member.1.Dimensions.member.1.Name=InstanceId&MetricData.member.1.Dimensions.member.1.Value=90b27502-49cf-43f8-804c-fccd304e796d&MetricData.member.1.Dimensions.member.2.Name=AlarmName&MetricData.member.1.Dimensions.member.2.Value=restarter-HttpFailureAlarm&MetricData.member.1.MetricName=ServiceFailure&MetricData.member.1.Unit=Counter&MetricData.member.1.Value=1&Namespace=system%2Flinux&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2014-11-12T10%3A19%3A40Z&Version=2010-08-01 DEBUG [2014-11-12 11:19:40,505] string_to_sign: POST 10.32.10.151:8003 /v1/ AWSAccessKeyId=27178e0b9c71478e837c02d17fe1aa4d&Action=PutMetricData&MetricData.member.1.Dimensions.member.1.Name=InstanceId&MetricData.member.1.Dimensions.member.1.Value=90b27502-49cf-43f8-804c-fccd304e796d&MetricData.member.1.Dimensions.member.2.Name=AlarmName&MetricData.member.1.Dimensions.member.2.Value=restarter-HttpFailureAlarm&MetricData.member.1.MetricName=ServiceFailure&MetricData.member.1.Unit=Counter&MetricData.member.1.Value=1&Namespace=system%2Flinux&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2014-11-12T10%3A19%3A40Z&Version=2010-08-01 DEBUG [2014-11-12 11:19:40,505] len(b64)=44 DEBUG [2014-11-12 11:19:40,505] base64 encoded digest: Vaw1C+YfSbaVZg4tm6iR10QelU73Ll1VwTaJjOvU+HU= DEBUG [2014-11-12 11:19:40,505] query_string: AWSAccessKeyId=27178e0b9c71478e837c02d17fe1aa4d&Action=PutMetricData&MetricData.member.1.Dimensions.member.1.Name=InstanceId&MetricData.member.1.Dimensions.member.1.Value=90b27502-49cf-43f8-804c-fccd304e796d&MetricData.member.1.Dimensions.member.2.Name=AlarmName&MetricData.member.1.Dimensions.member.2.Value=restarter-HttpFailureAlarm&MetricData.member.1.MetricName=ServiceFailure&MetricData.member.1.Unit=Counter&MetricData.member.1.Value=1&Namespace=system%2Flinux&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2014-11-12T10%3A19%3A40Z&Version=2010-08-01 Signature: Vaw1C+YfSbaVZg4tm6iR10QelU73Ll1VwTaJjOvU+HU= DEBUG [2014-11-12 11:19:40,939] <PutMetricDataResponse><PutMetricDataResult><ResponseMetadata>None</ResponseMetadata></PutMetricDataResult></PutMetricDataResponse>
Yes steven you are right. In the new python boto versions they are sending the arguments via final headers but we are expecting on the query string. See the example.
python boto 2.32.1:
DEBUG [2014-11-12 11:13:48,915] cfn-push-stats called Namespace( cpu_util= False, credential_ file='/ etc/cfn/ cfn-credentials ', disk_path='/', disk_space_ avail=False, disk_space_ used=False, disk_space_ util=False, disk_units= 'megabytes' , haproxy=False, haproxy_ latency= False, heartbeat=False, mem_avail=False, mem_used=False, mem_util=False, memory_ units=' megabytes' , metric=None, service_ failure= True, swap_used=False, swap_util=False, units=None, value=None, verbose=False, watch=' restarter- HttpFailureAlar m') member. 1.Dimensions. member. 2.Value' : 'restarter- HttpFailureAlar m', 'MetricData. member. 1.Dimensions. member. 2.Name' : 'AlarmName', 'Namespace': 'system/linux', 'MetricData. member. 1.Unit' : 'Counter', 'MetricData. member. 1.Value' : 1, 'Action': 'PutMetricData', 'MetricData. member. 1.Dimensions. member. 1.Name' : 'InstanceId', 'Version': '2010-08-01', 'MetricData. member. 1.Dimensions. member. 1.Value' : u'90b27502- 49cf-43f8- 804c-fccd304e79 6d', 'MetricData. member. 1.MetricName' : 'ServiceFailure'}
DEBUG [2014-11-12 11:13:48,916] Using access key provided by client.
DEBUG [2014-11-12 11:13:48,916] Using secret key provided by client.
INFO [2014-11-12 11:13:48,916] Sending metric ServiceFailure, Units Counter, Value 1
DEBUG [2014-11-12 11:13:48,917] Method: POST
DEBUG [2014-11-12 11:13:48,917] Path: /v1/
DEBUG [2014-11-12 11:13:48,917] Data:
DEBUG [2014-11-12 11:13:48,917] Headers: {}
DEBUG [2014-11-12 11:13:48,917] Host: 10.32.10.151
DEBUG [2014-11-12 11:13:48,917] Port: 8003
DEBUG [2014-11-12 11:13:48,917] Params: {'MetricData.
DEBUG [2014-11-12 11:13:48,917] establishing HTTP connection: kwargs={'port': 8003, 'timeout': 70}
DEBUG [2014-11-12 11:13:48,917] Token: None
DEBUG [2014-11-12 11:13:48,919] CanonicalRequest:
POST
/v1/
host:10. 32.10.151: 8003 20141112T101348 Z
x-amz-date:
host;x-amz-date 5995976310e635a 69f4c10c56de61e 8d9855e9f80e1f3 4186 32/10/aws4_ request 243e0bef360f267 ffbac6b31d061a6 22553b200420537 80da 40af076da8e2a0b 02408b2d430eb9c 059eca1034a506c 7fce 6.32-431. 23.3.el6. x86_64' , 'Host': '10.32. 10.151: 8003', 'X-Amz-Date': '20141112T101348Z', 'Content-Type': 'application/ x-www-form- urlencoded; charset=UTF-8', 'Authorization': 'AWS4-HMAC-SHA256 Credential= 27178e0b9c71478 e837c02d17fe1aa 4d/20141112/ 32/10/aws4_ request, SignedHeaders= host;x- amz-date, Signature= 4086ffd920db62e 40af076da8e2a0b 02408b2d430eb9c 059eca1034a506c 7fce'} <Error> <Message> The request signature we calculated does not match the signature you provided< /Message> <Code>Signature DoesNotMatch< /Code>< Type>Sender< /Type>< /Error> </ErrorResponse > tMatch <Error> <Message> The request signature we calculated does not match the signature you provided< /Message> <Code>Signature DoesNotMatch< /Code>< Type>Sender< /Type>< /Error> </ErrorResponse >
67f215d4c663832
DEBUG [2014-11-12 11:13:48,919] StringToSign:
AWS4-HMAC-SHA256
20141112T101348Z
20141112/
55d0054ff53524a
DEBUG [2014-11-12 11:13:48,919] Signature:
4086ffd920db62e
DEBUG [2014-11-12 11:13:48,919] Final headers: {'Content-Length': '438', 'User-Agent': 'Boto/2.32.1 Python/2.6.6 Linux/2.
DEBUG [2014-11-12 11:13:48,935] Response headers: [('date', 'Wed, 12 Nov 2014 10:13:49 GMT'), ('content-length', '195'), ('content-type', 'application/xml; charset=UTF-8')]
DEBUG [2014-11-12 11:13:48,935] <ErrorResponse>
ERROR [2014-11-12 11:13:48,935] 403 SignatureDoesNo
ERROR [2014-11-12 11:13:48,936] <ErrorResponse>
python boto 2.12.0:
DEBUG [2014-11-12 11:19:40,501] cfn-push-stats called Namespace( cpu_util= False, credential_ file='/ etc/cfn/ cfn-credentials ', disk_path='/', disk_space_ avail=False, disk_space_ used=False, disk_space_ util=False, disk_units= 'megabytes' , haproxy=False, haproxy_ latency= False, heartbeat=False, mem_avail=False, mem_used=False, mem_util=False, memory_ units=' megabytes' , metric=None, service_ failure= True, swap_used=False, swap_util=False, units=None, value=None, verbose=False, watch=' restarter- HttpFailureAlar m') member. 1.Dimensions. member. 2.Value' : 'restarter- HttpFailureAlar m', 'MetricData. member. 1.Dimensions. member. 2.Name' : 'AlarmName', 'Namespace': 'system/linux', 'MetricData. member. 1.Unit' : 'Counter', 'MetricData. member. 1.Value' : 1, 'Action': 'PutMetricData', 'MetricData. member. 1.Dimensions. member. 1.Name' : 'InstanceId', 'Version': '2010-08-01', 'MetricData. member. 1.Dimensions. member. 1.Value' : u'90b27502- 49cf-43f8- 804c-fccd304e79 6d', 'MetricData. member. 1.MetricName' : 'ServiceFailure'} 27178e0b9c71478 e837c02d17fe1aa 4d&Action= PutMetricData& MetricData. member. 1.Dimensions. member. 1.Name= InstanceId& MetricData. member. 1.Dimensions. member. 1.Value= 90b27502- 49cf-43f8- 804c-fccd304e79 6d&MetricData. member. 1.Dimensions. member. 2.Name= AlarmName& MetricData. member. 1.Dimensions. member. 2.Value= restarter- HttpFailureAlar m&MetricData. member. 1.MetricName= ServiceFailure& MetricData. member. 1.Unit= Counter& MetricData. member. 1.Value= 1&Namespace= system% 2Flinux& SignatureMethod =HmacSHA256& SignatureVersio n=2&Timestamp= 2014-11- 12T10%3A19% 3A40Z&Version= 2010-08- 01 27178e0b9c71478 e837c02d17fe1aa 4d&Action= PutMetricData& MetricData. member. 1.Dimensions. member. 1.Name= InstanceId& MetricData. member. 1.Dimensions. member. 1.Value= 90b27502- 49cf-43f8- 804c-fccd304e79 6d&MetricData. member. 1.Dimensions. member. 2.Name= AlarmName& MetricData. member. 1.Dimensions. member. 2.Value= restarter- HttpFailureAlar m&MetricData. member. 1.MetricName= ServiceFailure& MetricData. member. 1.Unit= Counter& MetricData. member. 1.Value= 1&Namespace= system% 2Flinux& SignatureMethod =HmacSHA256& SignatureVersio n=2&Timestamp= 2014-11- 12T10%3A19% 3A40Z&Version= 2010-08- 01 tm6iR10QelU73Ll 1VwTaJjOvU+ HU= 27178e0b9c71478 e837c02d17fe1aa 4d&Action= PutMetricData& MetricData. member. 1.Dimensions. member. 1.Name= InstanceId& MetricData. member. 1.Dimensions. member. 1.Value= 90b27502- 49cf-43f8- 804c-fccd304e79 6d&MetricData. member. 1.Dimensions. member. 2.Name= AlarmName& MetricData. member. 1.Dimensions. member. 2.Value= restarter- HttpFailureAlar m&MetricData. member. 1.MetricName= ServiceFailure& MetricData. member. 1.Unit= Counter& MetricData. member. 1.Value= 1&Namespace= system% 2Flinux& SignatureMethod =HmacSHA256& SignatureVersio n=2&Timestamp= 2014-11- 12T10%3A19% 3A40Z&Version= 2010-08- 01 Signature: Vaw1C+YfSbaVZg4 tm6iR10QelU73Ll 1VwTaJjOvU+ HU= esponse> <PutMetricDataR esult>< ResponseMetadat a>None< /ResponseMetada ta></PutMetricD ataResult> </PutMetricData Response>
DEBUG [2014-11-12 11:19:40,502] Using access key provided by client.
DEBUG [2014-11-12 11:19:40,502] Using secret key provided by client.
INFO [2014-11-12 11:19:40,502] Sending metric ServiceFailure, Units Counter, Value 1
DEBUG [2014-11-12 11:19:40,503] Method: POST
DEBUG [2014-11-12 11:19:40,503] Path: /v1/
DEBUG [2014-11-12 11:19:40,503] Data:
DEBUG [2014-11-12 11:19:40,503] Headers: {}
DEBUG [2014-11-12 11:19:40,503] Host: 10.32.10.151:8003
DEBUG [2014-11-12 11:19:40,503] Params: {'MetricData.
DEBUG [2014-11-12 11:19:40,503] establishing HTTP connection: kwargs={'timeout': 70}
DEBUG [2014-11-12 11:19:40,503] Token: None
DEBUG [2014-11-12 11:19:40,504] using _calc_signature_2
DEBUG [2014-11-12 11:19:40,504] query string: AWSAccessKeyId=
DEBUG [2014-11-12 11:19:40,505] string_to_sign: POST
10.32.10.151:8003
/v1/
AWSAccessKeyId=
DEBUG [2014-11-12 11:19:40,505] len(b64)=44
DEBUG [2014-11-12 11:19:40,505] base64 encoded digest: Vaw1C+YfSbaVZg4
DEBUG [2014-11-12 11:19:40,505] query_string: AWSAccessKeyId=
DEBUG [2014-11-12 11:19:40,939] <PutMetricDataR