如何创建签名的S3 url

ccrfmcuu  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(161)

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

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

是否有一个软件包或一段代码的地方,将允许我使用访问/密钥对建立URL。
我不想使用awscli阅读数据。

6l7fqoea

6l7fqoea1#

您可以使用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格式保存和加载。
如果你需要读取一个文本文件,那就有点复杂了,因为库的函数'get_object'返回一个原始向量,我们必须自己解析它:

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

据我所知,您的“签名URL”概念是不可用的。警告,如果您尝试开发这样的解决方案:考虑在源代码中存储秘密访问密钥的安全含义是很重要的。
另一个关于“签名的url”的问题是对象将被存储在内存中。如果工作区被保存,它将被存储在磁盘上。这样的解决方案必须仔细检查安全性。

fafcakar

fafcakar2#

稍有事后,还可以使用aws.s3包,可以做到:

data <- s3read_using(FUN = data.table::fread,
                     bucket = "my_bucket",
                     object = "path/to/file.csv")

相关问题