API aracılığıyla EC2 hizmetlerine erişmek için R paketini httr
kullanmak istiyorum. Ancak, her zamanki gibi "Oauth2.0" 'ın normal kimlik doğrulama biçimine girmediğinden nasıl başlayacağınızdan biraz emin değilim: anahtar, sır, jeton ve imza sistemi. EC2'nin "imzalı sürüm 2" yöntemini kullandığını düşünüyorum, ancak bunun nasıl çalıştığına dair açık değilim.R + httr ve EC2 api kimlik doğrulama sorunları
at yapma sorgu taleplerin ben imza için değer gerektiğini düşünüyorum ile sağlamaktadır belgelere baktığımızda
.... ama
Ben nasıl bilmiyorum Verilen komutların bazılarını aşağıda gösterildiği gibi httr
kullanarak kullanmayı denedim. URL dizisindeki parametrelerin çoğunu bana ve örneğin AWSAccessKeyId
, ImageId
, endpoint
ve Action
vb. Yapmak istediğim şeyleri temsil edebilirim, ancak sadece imza değerini almak için nereye gideceğinizi bilmiyorum. Verilen örneklerden bazıları da
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")
hangi i yanıt almak için:
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="" /> ...
herkes EC2 API ve kimlik doğrulama prosedürü ile herhangi bir deneyimi vardı ve b olur Has E tarafından seçilen AMI'lerle (R ve buna yüklenen diğer ilgili paketler var) linux örneklerini kurmak ve çalıştırmak için R'yi kullanacak kadar kolay, daha sonra bu örneklerde birkaç R komutunu çalıştırmak ve çıkışı geri getirmek için?
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
DÜZENLEME:
Yani belgelerine takip etmek bir başka girişim @ önerdiği gibi
onun gerçekten benim sessionInfo ilgili ama sadece burada durumda olduğunu sanmıyorum Hadley bu ... denedim ve got ... ters gidiyor im büyük takdir nerede bir daha yararlı ipuçları nedir:
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)
ki ben yanıt almak için:
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>
imza üretmek için temel algoritma http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using-query-api.html#query-authentication ortaya koydu 3. adım için 'hmac' işlevi – hadley
teşekkürler ... bunu gördüm ama ne anlama geldiğini anladığımdan emin değildim ... bir örnek verebileceğin bir olasılık var mı? –
veya düzenlemelerim sırasında nereye yanlış gittiğimi görebilir miyim? Sanırım imkansız ... –