Как получить доступ к данным S3 из R на EC2, используя функции пакета aws.s3 (write_using и read_using)? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь читать / писать на S3 из R в EC2, используя write_using() из пакета aws.s3.

Что я сделал до сих пор

К EC2 подключен IAM, который позволяет выполнять чтение / запись в определенную корзину AWS S3

Я связал IAM с EC2. Я также создал корзину (в этом примере, пожалуйста, предположите, что она называется my-unique-bucket)

Когда я вхожу в EC2 и открываю R, тогда запускаю что-то вроде s3write_using(mtcars, FUN = write.csv, object = "mtcars.csv", bucket = "my-unique-bucket")

Понятно

List of 4
 $ Code     : chr "AccessDenied"
 $ Message  : chr "Access Denied"
 $ RequestId: chr "3B942C125C154B49"
 $ HostId   : chr "0dgc4Iuv3EXdQxMgkh4Qkxt+aADzxsVYp6pq2k3/OjSztFlV1nftjn4MkIvNZ+wCVqzeJsttY44="
 - attr(*, "headers")=List of 6
  ..$ x-amz-request-id : chr "3B942C125C154B49"
  ..$ x-amz-id-2       : chr "0dgc4Iuv3EXdQxMgkh4Qkxt+aADzxsVYp6pq2k3/OjSztFlV1nftjn4MkIvNZ+wCVqzeJsttY44="
  ..$ content-type     : chr "application/xml"
  ..$ transfer-encoding: chr "chunked"
  ..$ date             : chr "Tue, 18 Jun 2019 12:57:45 GMT"
  ..$ server           : chr "AmazonS3"
  ..- attr(*, "class")= chr [1:2] "insensitive" "list"
 - attr(*, "class")= chr "aws_error"
NULL
Error in parse_aws_s3_response(r, Sig, verbose = verbose) : 
  Forbidden (HTTP 403).

Я бы ожидал, что это сработает? Вместо этого это выглядит как проблема аутентификации

Далее

Я не уверен, что попробовать дальше, так как я надеялся, что вышесказанное сработает.

Учитывая, что это не так, нужно ли мне как-то аутентифицировать EC2 (или сеанс R, запущенный на EC2)? Я бы подумал, что аутентификация с использованием учетных данных root противоречит цели IAM (поскольку у пользователя root есть разрешения на все, в то время как IAM, связанный с экземпляром, имеет только права на чтение / запись в S3). Так что я не уверен, что это правильно (кажется, что был бы лучший способ - то есть, чтобы S3 знал, что у EC2 есть IAM, разрешающий доступ). Но я не уверен, как это сделать или где я ошибся при попытке этого

1 Ответ

0 голосов
/ 20 июня 2019

Доступ к данным S3 из R

Это будет работать с в любом месте (например, Windows, Mac и т. Д. Независимо от того, работает ли он на EC2 или иным образом). Вам нужен этот код в R:

key <- "ALIAVI5FAYD9B(8MVJZ" # Substitute with your own (see below)
secret <- "ePy7jMlRj5jTVAruqmb3uap9bHXmnsSHI+zqfdmHL" # (see below)

Sys.setenv("AWS_ACCESS_KEY_ID" = key,
           "AWS_SECRET_ACCESS_KEY" = secret)

bucketlist() # This returns a list of all your buckets if authentication was successful 

Чтобы все заработало, вам необходимо ввести свои уникальные key и secret. Это займет всего 1 минуту, сделайте следующее:

  1. Перейдите в раздел IAM в AWS в браузере
  2. Создание пользователя IAM (выберите «Программный доступ» для типа доступа)
  3. Дайте ему предопределенное разрешение AmazonS3FullAccess (сделайте это, нажав «Присоединить существующие политики напрямую» и выполнив поиск «AmazonS3FullAccess»). Нет необходимости для тегов или чего-либо еще.
  4. Кликните и создайте пользователя. Вы увидите ключ доступа и секрет в браузере на последнем экране.
  5. Вставьте ключ и секрет в код R (см. Выше), и все готово! Это все, что нужно сделать.

Некоторые дополнительные советы

# Write to your S3 bucket
s3write_using(mtcars, FUN = write.csv, object = "mtcars.csv", bucket = "your-bucket-name")

# Read from your S3 bucket
myfile <- s3read_using(FUN = read.csv, object = "mtcars.csv", bucket = "your-bucket-name")

# In case you need to remove an environment variable AWS_SESSION_TOKEN, this will clear it
Sys.unsetenv("AWS_SECRET_ACCESS_KEY")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...