如何创建签名的S3 URL

时间:2016-05-25 15:50:33

标签: r security amazon-s3

我想使用fread包中的data.table来读取S3中的csv文件,如下所示:

 ulr_with_signature <- signURL(url, access_key, secret_key)
 DT <- fread(ulr_with_signature)

是否有一个包或一段代码允许我使用访问/密钥对构建URL。

我不想使用awscli来阅读数据。

1 个答案:

答案 0 :(得分:7)

您可以使用AWS S3 package

执行阅读:

# These variables should be set in your environment, but you could set them in R:
Sys.setenv("AWS_ACCESS_KEY_ID" = "mykey",
       "AWS_SECRET_ACCESS_KEY" = "mysecretkey",
       "AWS_DEFAULT_REGION" = "us-east-1")

library("aws.s3")

如果您要将R对象obj保存到AWS,稍后会阅读:

s3save(obj, bucket = "my_bucket", object = "object")
# and then later
obj <- s3load("object", bucket = "my_bucket")

显然,将存储桶名称和文件名(AWS存储桶中的对象名称)替换为实际值。该软件包还具有相应的s3save功能。您还可以使用s3saveRDSs3readRDS保存并加载RDS格式。

如果你需要阅读一个文本文件,它有点复杂,因为图书馆的功能&#39; get_object&#39;返回一个原始向量,我们必须自己解析它:

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"))

据我所知,您无法获得“签名网址”的概念。需要注意的是,您是否应该尝试开发这样的解决方案:考虑将秘密访问密钥存储在源代码中的安全隐患非常重要。

关于'signed url'的另一个问题是,该对象将存储在内存中。如果保存工作空间,它将存储在磁盘上。这样的解决方案必须仔细审查安全性。