Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建签名的S3URL_R_Security_Amazon S3 - Fatal编程技术网

如何创建签名的S3URL

如何创建签名的S3URL,r,security,amazon-s3,R,Security,Amazon S3,我想使用数据中的fread读取S3中的csv文件。如下所示: ulr_with_signature <- signURL(url, access_key, secret_key) DT <- fread(ulr_with_signature) ulr\u带有\u签名您可以使用: 要执行阅读,请执行以下操作: 如果您有一个R对象obj要保存到AWS,请稍后阅读: s3save(obj, bucket = "my_bucket", object = "object") # and

我想使用
数据中的
fread
读取S3中的csv文件。如下所示:

 ulr_with_signature <- signURL(url, access_key, secret_key)
 DT <- fread(ulr_with_signature)
ulr\u带有\u签名您可以使用:

要执行阅读,请执行以下操作:

如果您有一个R对象
obj
要保存到AWS,请稍后阅读:

s3save(obj, bucket = "my_bucket", object = "object")
# and then later
obj <- s3load("object", bucket = "my_bucket")
据我所知,您的“签名URL”概念不可用。如果您试图开发这样一种解决方案,请注意:在源代码中存储您的秘密访问密钥会带来安全隐患,这一点很重要


关于“签名url”的另一个问题是,对象将存储在内存中。如果保存了工作区,它将存储在磁盘上。这样的解决方案必须仔细检查安全性。

很抱歉,太早按enter键。您担心这会创建一个临时文件吗?啊哈。从代码中我可以看出,这实际上并没有创建一个临时文件,但我可能弄错了
s3load
调用
get\u object
(此处无文件创建),
get\u object
调用
s3HTTP
,仍然没有本地文件,该函数从
httr
包调用get方法。我在任何地方都看不到
awscli
。这是云中文件的文件名,也就是S3文件名。好的,我想我们已经到了。我想做
fread(url)
我可以使用aws.signature包中的
signature\u v2\u auth
signature\u v4\u auth
不,对不起,那不行。无法通过身份验证将URL存储到AWS文件。身份验证通过将签名(由
signature\u v4\u auth
方法创建)作为GET请求的头发送来工作。因此请求看起来是这样的(不完全是这样,但要点很清楚):
GET/bucket/filename;身份验证:在此处验证令牌
。您的想法的问题是URL与身份验证令牌是分开的,并且它不能作为单个对象存储。(很抱歉格式化)这是因为
get\u object
返回的是原始向量,而不是字符向量或连接。您可以这样做,当然有点复杂:
fread(iconv(readBin(get_object(url,bucket),character()),from=“UTF-8”,to=“UTF-8”))
(用适当的编码替换from=“UTF-8”)下面是一个关于直接将数据写入S3的问题,以及读取内存时的答案:
s3save(obj, bucket = "my_bucket", object = "object")
# and then later
obj <- s3load("object", bucket = "my_bucket")
raw_data <- get_object('data.csv', 'my_bucket')

# this method to parse the data is copied from the httr library
# substitute encoding from as needed
data <- iconv(readBin(raw_data, character()), from="UTF-8", to="UTF-8")

# now the data can be read by any R function, eg.
read.csv(data)
fread(data)

# All this can be done without temporary objects:
fread(iconv(
  readBin(get_object('data.csv', 'my_bucket'), character()),
  from="UTF-8", to="UTF-8"))