Использовать учетные данные aws на удаленном сервере, не сохраняя их на удаленном сервере? - PullRequest
0 голосов
/ 13 апреля 2020

Можно ли использовать aws учетные данные на удаленном сервере без явного их копирования?

Например, я могу использовать свой локальный ключ s sh на сервере, например ssh-add && ssh -A <server_name>, есть ли что-то подобное для aws cli без копирования ~/.aws/credentials и ~/.aws/config?

Я хочу использовать эти aws учетные данные только для загрузки некоторых файлов из S3.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Для S SH на удаленном сервере ваш publi c ключ уже должен присутствовать на удаленном сервере. Ваш инструмент использует закрытый ключ для шифрования сообщений. Поэтому ваше предположение, что ваши учетные данные не нужны на удаленном сервере, неверно.

EC2 поддерживает получение учетных данных из метаданных. Вы можете создать роль IAM s3access и затем принять эту роль внутри EC2. Вы даже можете получить эти учетные данные, используя инструмент командной строки curl. Пример:

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

Пример вывода:

{
  "Code" : "Success",
  "LastUpdated" : "2012-04-26T16:39:16Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
  "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "Token" : "token",
  "Expiration" : "2017-05-17T15:09:54Z"
}

Обратитесь к этой ссылке для получения дополнительной информации об учетных данных метаданных.

Вы также можете настроить CLI для автоматического использования учетных данных метаданных. Обратитесь к этой ссылке для получения дополнительной информации.

Если ваша цель состоит в том, чтобы не иметь учетных данных в экземпляре EC2, вам нужно будет использовать предварительно назначенные URL-адреса. Обратитесь к этой ссылке для получения дополнительной информации.

0 голосов
/ 13 апреля 2020

Если все, что вам нужно, это загрузить некоторые файлы с S3, переназначенные URL-адреса могут быть более простым и безопасным вариантом. AWS позволяет создавать URL-адреса для любого действия API AWS, которое можно использовать только в течение определенного периода времени. Вы можете сгенерировать эти URL-адреса к указанным вами c файлам, отправить их на ваш сервер и заставить сервер использовать их для загрузки файлов.

Например:

aws s3 presign s3://awsexamplebucket/test2.txt --expires-in 604800

Все различные фреймворки, такие как boto3 и aws -sdk, также поддерживают создание URL-адресов.

Другой вариант - создание временных учетных данных . AWS позволяет создавать учетные данные только на определенный период времени. Это также позволяет вам ограничить их область действия, поэтому вы можете попросить, чтобы они разрешали загрузку только из указанного c контейнера, например. Используя STS, вы получите новый набор ключей доступа и токена сеанса, отправите их на свой сервер и разрешите серверу использовать их для выполнения своих задач.

Если вы хотите, чтобы токен имел именно те же учетные данные, что и у вызывающей роли, используйте:

aws sts get-session-token

В противном случае вам нужно будет создать роль с соответствующими разрешениями и использовать:

aws sts assume-role --role-arn arn:aws:iam::123456789012:role/xaccounts3access --role-session-name s3-access-example

Как и в случае с предварительно назначенными URL-адресами, эти API-интерфейсы доступны в каждом SDK, а не только в командной строке.

...