Подтвердить что ты не робот

AWS CLI загрузите URL-адрес S3 для частного ведра из AWS CLI

Я могу загрузить файл в ведро private S3 с помощью следующей команды:

aws s3 cp "myfile.txt" "s3://myfolder/myfile.txt" --region=us-east-1 --output=json

Я хотел бы отправить команду AWS CLI, чтобы вернуть мне временную загрузку URL-адреса для myfile.txt и кто-нибудь знает как?

Я googled и выгляжу так, как будто мне нужно сделать некоторые подписи, чтобы получить временный URL-адрес, например: http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

4b9b3361

Ответ 1

Я googled вокруг и решил написать это script, чтобы помочь мне создать петь-url для S3.

https://github.com/gdbtek/aws-tools

Ответ 2

Вы можете использовать следующий формат URL:

https://<bucket-name>.s3.amazonaws.com/<object or key name>

или старый стиль:

https://s3.amazonaws.com/<bucket-name>/<object or key name>

Чтобы иметь доступ к нему, вам необходимо разрешить публичный доступ к вашему объекту или прикрепить соответствующую политику ведра.

Например, следующая политика bucket показывает открытый доступ к ведру zzzyyy object 'yyyeee'

$ aws s3 get-object-acl --bucket zzzyyy --key yyyeee
{
    "Owner": {
        "DisplayName": "owner",
        "ID": "Some hash of owner"
    },
    "Grants": [
        {
            "Grantee": {
                "DisplayName": "owner",
                "ID": "Some hash of owner"
            },
            "Permission": "READ"
        },
        {
            "Grantee": {
                "DisplayName": "owner",
                "ID": "Some hash of owner"
            },
            "Permission": "WRITE"
        },
        {
            "Grantee": {
                "DisplayName": "owner",
                "ID": "Some hash of owner"
            },
        "Permission": "READ_ACP"
        },
        {
            "Grantee": {
                "DisplayName": "owner",
                "ID": "Some hash of owner"
            },
            "Permission": "WRITE_ACP"
        },
        {
            "Grantee": {
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ"
        },
        {
            "Grantee": {
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ_ACP"
        }
    ]
}

Здесь вы можете увидеть примеры политик ковша:

http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html

Вы также можете использовать консоль S3, как показано здесь:

S3 Console

Ответ 3

aws cli теперь поддерживает команду presign. Вы можете запустить

$ aws s3 presign s3://test-bucket/test-file.txt
https://test-bucket/test-file.txt?Expires=1499152189&Signature=some-sha

Это создаст URL-адрес, с которым вы сможете поделиться им с кем-либо, чтобы загрузить этот файл за 3600 секунд.

Вы можете изменить период времени с помощью --expires-in

$ aws s3 presign s3://test-bucket/test-file.txt --expires-in 600 

Сгенерированный URL-адрес истечет через 10 минут.

Вы можете узнать больше о имени в aws cli docs.

Ответ 4

В качестве альтернативы вы можете посмотреть https://github.com/minio/mc и дать нам обратную связь. Мы всегда хотели иметь интерфейс Dropbox CLI, конечно, не как графический интерфейс, а с возможностью сценариев и для автоматизации. Таким образом, мы завершили реализацию удобной команды для mc для решения двух вариантов использования.

  • Для совместного использования URL-адресов для загрузки файлов (Presigned Get)
  • Для обмена формой curl для загрузки файлов (заданная политика POST)

В следующих примерах рассматриваются оба варианта использования.

$ mc share
NAME:
  mc share - Download and upload documents.

USAGE:
  mc share command [arguments...]

COMMANDS:
  download  Generate URL to download documents.
  upload    Generate ‘curl’ command to upload files.
  list      List the shared URLs

Эти команды могут использоваться в обычном смысле или также с помощью . Для сценариев mc для всех команд предоставляется вывод --json.

Пример для mc share download

$ mc share download https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3
https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJVA5BMMU2RHO6IOQ%2F20151109%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20151109T060251Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=3c69928bee38b7b465547f9fa97146ff606480bbead8042c0351840c578a2ceb

$ mc --json share download https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3 | jq .

{
  "expiry": {
    "days": 7
  },
  "downloadUrl": "https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJVA5BMMU2RHO6IOQ%2F20151109%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20151109T060618Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=48f7a521396ac8e36443cc86ce16c2619f9fa81371aad9a309375c933ea48d99",
  "keyName": "https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3"
}

Пример для mc share upload

$ mc share upload --expire=2h --content-type=image/png https://s3.amazonaws.com/backup/2007-Mar-2/... 
curl https://s3.amazonaws.com/backup -F x-amz-credential=AKIAJVA5BMMU2RHO6IOQ/20151109/us-east-1/s3/aws4_request -F x-amz-date=20151109T061202Z -F x-amz-signature=61c234dd17fc9e5888417ac4546b37d61755e551674a9617f33f5232ec53c8b6 -F Content-Type=image/png -F bucket=backup -F policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wOVQwODoxMjowMi40MDZaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkQ29udGVudC1UeXBlIiwiaW1hZ2UvcG5nIl0sWyJlcSIsIiRidWNrZXQiLCJiYWNrdXAiXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsIjIwMDctTWFyLTIvIl0sWyJlcSIsIiR4LWFtei1kYXRlIiwiMjAxNTExMDlUMDYxMjAyWiJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQVdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsIkFLSUFKVkE1Qk1NVTJSSE82SU9RLzIwMTUxMTA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 -F x-amz-algorithm=AWS4-HMAC-SHA256 -F key=2007-Mar-2/<FILE> -F [email protected]<FILE>

$ mc --json share upload --expire=2h --content-type=image/png https://s3.amazonaws.com/backup/2007-Mar-2/... | jq .
{
  "expiry": {
    "hours": 2
  },
  "uploadCommand": "curl https://s3.amazonaws.com/backup -F x-amz-signature=4b349a15e76ab403424ec6b1e289336f67c02c427ccc98522d6f654eee5b7de6 -F Content-Type=image/png -F bucket=backup -F policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wOVQwODoxMzoyMS4zODFaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkQ29udGVudC1UeXBlIiwiaW1hZ2UvcG5nIl0sWyJlcSIsIiRidWNrZXQiLCJiYWNrdXAiXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsIjIwMDctTWFyLTIvIl0sWyJlcSIsIiR4LWFtei1kYXRlIiwiMjAxNTExMDlUMDYxMzIxWiJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQVdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsIkFLSUFKVkE1Qk1NVTJSSE82SU9RLzIwMTUxMTA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 -F x-amz-algorithm=AWS4-HMAC-SHA256 -F x-amz-credential=AKIAJVA5BMMU2RHO6IOQ/20151109/us-east-1/s3/aws4_request -F x-amz-date=20151109T061321Z -F key=2007-Mar-2/<FILE> -F [email protected]<FILE> ",
  "keyName": "https://s3.amazonaws.com/backup/2007-Mar-2/..."
}

Ожидаем некоторую обратную связь. Благодаря

Ответ 5

Команда неверна; вместо:

$ aws s3 get-object-acl --bucket zzzyyy --key yyyeee

Это должно быть:

$ aws s3api get-object-acl --bucket zzzyyy --key yyyeee

Ответ 6

Знайте, что это на 8 месяцев, но я только что узнал, что вы можете использовать Eclipse с AWS Toolkit для Eclipse (http://aws.amazon.com/eclipse/), чтобы генерировать предварительно подписанные URL-адреса с помощью щелчка правой кнопкой мыши по целевому файлу, даже позволяет установить дату истечения срока... Это довольно гладкий.