Problemy z uwierzytelnianiem API R + httr i EC2

Chciałbym użyć pakietu Rhttr dostęp do usług EC2 za pośrednictwem ich API. Ale jestem trochę niepewny, jak zacząć, ponieważ nie mieści się w zwykłym formacie uwierzytelniania „Oauth2.0”, w którym masz zwykły system: klucz, sekret, token i podpis. Myślę, że EC2 używa metody „podpis wersji 2”, ale nie jestem pewien, jak to działa.

Przeglądając dokumentację udostępnianą przez EC2 w odniesieniu do tworzenia zapytańhttp://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using-query-api.html

Myślę, że potrzebuję wartości do podpisu .... ale nie wiem jak go zdobyć

Próbowałem użyć niektórych podanych komend używająchttr jak pokazano niżej. Mogę dostosować większość parametrów w ciągu URL do reprezentowania mnie i rzeczy, które chcę zrobić, npAWSAccessKeyId, ImageId, endpoint iAction etc .... ale po prostu nie wiem, gdzie można uzyskać wartość podpisu.

Również w niektórych podanych przykładach nie wydają się one zapewniać tajnego klucza dostępu ...

Tak więc wypróbowane polecenia są następujące, zmieniając niektóre wartości, aby reprezentowały mnie, ale mają następujące:

require(httr)
GET("https://ec2.amazonaws.com/
?Action=RunInstances
&ImageId=ami-60a54009
&MaxCount=3
&MinCount=1
&Placement.AvailabilityZone=us-east-1b
&Monitoring.Enabled=true
&AWSAccessKeyId=0GS7553JW74RRM612K02EXAMPLE
&Version=2012-10-01
&Expires=2010-10-10T12:00:00Z
&Signature=lBP67vCvGlDMBQ1dofZxg8E8SUEXAMPLE
&SignatureVersion=2
&SignatureMethod=HmacSHA256")

na które otrzymuję odpowiedź:

Response [http://aws.amazon.com/ec2/]
  Status: 200
  Content-type: text/html; charset=UTF-8


  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <link rel="icon" type="image/ico" href="//d36cz9buwru1tt.cloudfront.net/favicon.ico">
  <link rel="shortcut icon" type="image/ico" href="//d36cz9buwru1tt.cloudfront.net/favicon.ico">
  <meta name="description" content="Amazon Elastic Compute Cloud delivers scalable, pay-as-you-go compute capacity in the cloud. " /><meta name="keywords" content="" /> ...

Czy ktoś miał jakieś doświadczenie z aplikacją EC2 i jej procedurą uwierzytelniania i czy korzystanie z R byłoby łatwe, aby móc konfigurować i uruchamiać instancje Linuksa z wybranymi przeze mnie AMI (na które załadowano R i inne odpowiednie pakiety) uruchomić kilka komend R w tych instancjach i przywrócić wyjście?

Nie myśl, że jest to naprawdę związane z moją sesją, ale na wszelki wypadek tutaj:

sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] httr_0.2

loaded via a namespace (and not attached):
[1] digest_0.5.2   plyr_1.7.1     RCurl_1.95-1.1 stringr_0.6.1  tools_2.15.1  

EDYTOWAĆ:

Tak więc w następnej próbie podążania za dokumentacją sugerowaną przez @hadley to właśnie próbowałem i dostałem ... wszelkie pomocne wskazówki dotyczące tego, gdzie pójdę źle, będą bardzo mile widziane ...:

require(httr)

aws.key <- "xxxxxxx"
aws.secret <- "xxxxxxxxxxxx"

verb <- "GET"
zone <- "ec2.amazonaws.com"
func <- "DescribeImages"

ami.number <- "ami-xxxxxxxxx"

params <- list(paste0("ImageId.1=",ami.number),
    "Version=2012-10-01",
    "Expires=2012-11-20T12%3A00%3A00Z")


# adding in method and key parameters for creation of string to sign
orig.len.params <- length(params)
params.w.method.key <- params
params.w.method.key[[orig.len.params+1]] <- "SignatureVersion=2"
params.w.method.key[[orig.len.params+2]] <- "SignatureMethod=HmacSHA1"
params.w.method.key[[orig.len.params+3]] <- paste0("AWSAccessKeyId=",aws.key)

# String to sign (s2s)
s2s <- paste(c(paste0(verb,"\n",zone,"\n","/\n","AWSAccessKeyId=",aws.key),paste0("Action=",func),paste(sort(unlist(params.w.method.key)),collapse="&")),collapse="&")

# Signature(sig)
sig <- hmac_sha1(aws.secret, s2s)

# adding in signature, method and key parameters for signed request url generation
params.w.sig.method.key <- params
params.w.sig.method.key[[orig.len.params+1]] <- paste0("Signature=",sig)
params.w.sig.method.key[[orig.len.params+2]] <- "SignatureVersion=2"
params.w.sig.method.key[[orig.len.params+3]] <- "SignatureMethod=HmacSHA1"
params.w.sig.method.key[[orig.len.params+4]] <- paste0("AWSAccessKeyId=",aws.key)

# Signed request (sr)
sr <- paste(c(paste0("https://",zone,paste0("?Action=",func)),paste(unlist(params.w.sig.method.key),collapse="&")),collapse="&")

# GET signed request
GET(sr)

na które otrzymuję odpowiedź:

 Response [https://ec2.amazonaws.com?Action=DescribeImages&ImageId.1=[ami.number.from.before]&Version=2012-10-01&Expires=2012-11-20T12%3A00%3A00Z&Signature=[sig.value.from.before]&SignatureVersion=2&SignatureMethod=HmacSHA1&AWSAccessKeyId=[aws.key.from.before]/]
  Status: 401
  Content-type: 
 <?xml version="1.0" encoding="UTF-8"?>
 <Response><Errors><Error><Code>AuthFailure</Code><Message>AWS was not able to validate the provided access credentials</Message></Error></Errors><RequestID>5e10fb0b-f304-4677-9c64-98b4537c659a</RequestID></Response> 

questionAnswers(1)

yourAnswerToTheQuestion