Вопрос или проблема
Я хочу создать бакет в 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
-
Подготовка окружения:
Убедитесь, что у вас установленcurl
и что MinIO запущен и доступен по адресуhttp://localhost:9000
. Также убедитесь, что у вас есть доступ к вашим учетным данным MinIO (Access Key и Secret Key). -
Генерация необходимых заголовков:
Для выполнения запроса на создание ведра необходимо сформировать заголовки, соответствующие AWS Signature Version 4. Следующий пример демонстрирует, как это сделать: -
Пример создания ведра:
Вот пример скрипта на 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 без установки дополнительных инструментов, что позволяет избежать излишней сложности.