Создать бакет minio с помощью curl

Вопрос или проблема

Я хочу создать бакет в Minio с помощью curl, но это не срабатывает

curl -X PUT -u "minioroot:miniopassword" "http://localhost:9000/ci-bucket"

Предоставленный вами механизм авторизации не поддерживается. Пожалуйста, используйте AWS4-HMAC-SHA256.

У меня Minio работает в кластере kind.

Как создать бакет с помощью curl?

Я бы хотел избежать установки команды mc.

Ответ или решение

Для успешного создания ведра (bucket) в MinIO с использованием инструмента curl необходимо учитывать ряд особенностей, касающихся механизма аутентификации. Ваша команда не сработала из-за ненадлежащего метода авторизации. MinIO использует механизм аутентификации AWS Signature Version 4, что требует отправки запроса с правильно сформированными заголовками.

Как создать ведро в MinIO с помощью curl

  1. Подготовка окружения:
    Убедитесь, что у вас установлен curl и что MinIO запущен и доступен по адресу http://localhost:9000. Также убедитесь, что у вас есть доступ к вашим учетным данным MinIO (Access Key и Secret Key).

  2. Генерация необходимых заголовков:
    Для выполнения запроса на создание ведра необходимо сформировать заголовки, соответствующие AWS Signature Version 4. Следующий пример демонстрирует, как это сделать:

  3. Пример создания ведра:
    Вот пример скрипта на bash, который создаст ведро в MinIO с использованием curl:

    #!/bin/bash
    
    # Конфигурация
    MINIO_URL="http://localhost:9000"
    ACCESS_KEY="minioroot"          # Ваш Access Key
    SECRET_KEY="miniopassword"      # Ваш Secret Key
    BUCKET_NAME="ci-bucket"         # Имя создаваемого ведра
    
    # Дата и время в формате RFC 2616
    DATE=$(date -u "+%a, %d %b %Y %H:%M:%S GMT")
    SERVICE="s3"
    REGION="us-east-1"
    TARGET_URI="/${BUCKET_NAME}"
    
    # Хеширование строки для авторизации
    CANONICAL_REQUEST="PUT\n${TARGET_URI}\n\nhost:${MINIO_URL#http://}\nx-amz-date:${DATE}\n\nhost;x-amz-date\n$(echo -n "PUT\n/${BUCKET_NAME}\n\nhost:${MINIO_URL#http://}\nx-amz-date:${DATE}" | openssl dgst -sha256 | awk '{print $2}')"
    
    # Подписываем запрос
    SIGNATURE=$(echo -n "${CANONICAL_REQUEST}" | openssl dgst -sha256 -hmac "${SECRET_KEY}" | awk '{print $2}')
    
    # Отправка запроса
    RESPONSE=$(curl -X PUT "${MINIO_URL}/${BUCKET_NAME}" \
       -H "Host: ${MINIO_URL#http://}" \
       -H "x-amz-date: ${DATE}" \
       -H "Authorization: AWS4-HMAC-SHA256 Credential=${ACCESS_KEY}/${DATE}/$REGION/$SERVICE/aws4_request, SignedHeaders=host;x-amz-date, Signature=${SIGNATURE}" \
       -w "%{http_code}" -o /dev/null)
    
    # Проверка ответа
    if [ "$RESPONSE" -eq 200 ]; then
       echo "Ведро '${BUCKET_NAME}' успешно создано."
    else
       echo "Ошибка при создании ведра '${BUCKET_NAME}'. Код ответа: ${RESPONSE}."
    fi

Примечания:

  • Обязательно замените minioroot и miniopassword на ваши реальные учетные данные.
  • Убедитесь, что порт 9000 открыт и доступен для подключения.
  • Этот скрипт обрабатывает создание ведра и проверку статуса ответа.
  • Данные шаги обеспечивают совместимость с механизмом AWS Signature Version 4.

Заключение

Создание ведра в MinIO с использованием curl требует соблюдения строгих требований к аутентификации. Приведенный выше алгоритм включает все необходимые шаги для правильной авторизации и выполнения запроса. Теперь вы можете управлять вашими данными в MinIO без установки дополнительных инструментов, что позволяет избежать излишней сложности.

Оцените материал
Добавить комментарий

Капча загружается...