Русский
Русский
English
Статистика
Реклама

Oracle cloud

Получаем бесплатные сервера в Oracle Cloud Free Tier

09.02.2021 02:22:17 | Автор: admin

Сразу предупреждаю, что бесплатно выдаются машинки достаточно слабенькие (одноядерные, на каждой RAM 1Gb, суммарное дисковое пространство обоих машин до 100Gb, подключение к сети 480Mbit), но для экспериментов этого более чем достаточно. Впрочем на них вполне можно развернуть почтовый сервер для небольшой организации, собственную систему управления умным домом или какой-нибудь FreePBX.

Я не буду здесь полностью описывать процедуру регистрации в Oracle Cloud, она достаточно хорошо представлена на официальном сайте, ссылка есть в конце статьи. Просто скажу, что для этого вам понадобится действующий адрес электронной почты, действующий (российский) телефон с возможностью приема SMS и банковская карта, на которой имеется хотя бы 1EUR или соответствующий рублевой эквивалент. Электронная почта и телефон используются в процессе регистрации, на них отправляются коды, которые необходимо будет затем подтвердить. На последнем шаге привязывается банковская карта (я использовал цифровую дебетовую от банка ВТБ), на ней в процессе регистрации блокируется сумма порядка 1EUR для проверки валидности карты. В дальнейшем она возвращается и больше карта никак не используется, если только вы не захотите сделать апгрейд с Free Tier на какой-либо платный тариф. Замечу, что сразу после завершения регистрации вам предоставляется бонус в размере 250EUR на 30 дней. Т.е. в течении месяца вы можете абсолютно бесплатно попробовать и другие сервисы, которые не входят в программу Free Tier.

В процессе регистрации вас попросят выбрать домашний регион. По умолчанию все ресурсы будут создаваться именно в нем, для создания ресурсов в других регионах надо будет сделать на них подписку. Однако в лимитах после создания учетной записи (той, что нам требуется для Free Tier) разрешена подписка только на один (домашний) регион. Возможно при обращении в техническую поддержку это ограничение и снимается, я не проверял. Но лучше сразу выбирайте в качестве домашнего регион, с которым у вас наилучшая пропускная способность каналов связи или минимальная задержка сигнала. Ссылка на сервис, который поможет вам определить параметры доступа до всех регионов, есть в конце статьи.

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

В Oracle Cloud облачная приватная сеть (VCN), имеющая подключение к Интернет, в общем случае выглядит следующим образом:

Service Gateway, так же как и NAT Gateway, нам пока не нужны. Мы хотим получить виртуальную машину, полностью доступную из внешнего мира. Правда (и, видимо, это особенность большинства сервис-провайдеров) внешний адрес IP будет назначен не непосредственно виртуальной машине, а посредством технологии NAT 1:1 (на рисунке выше она фактически реализуется в объекте Internet Gateway).

Итак начнем с создания собственной сети (VCN) в датацентре домашнего региона. Для этого в меню (левый верхний угол страницы) выбираем пункт Networking.

Выбираем в меню "Networking"=>"Virtual Cloud Networks" и нажимаем на кнопку "Create VCN". Придумываем и вводим в поле "Name" идентификатор нашей VCN, а в поле "CIDR Blocks" добавляем минимум одну сеть. Пусть это будет сеть 172.31.254.0/26, в адресном пространстве которой будут адреса создаваемых нами виртуальных машин и всякие служебные туннели для связи виртуальной сети с нашей локальной или офисной сетью. Галочку в пункте "USE DNS HOSTNAMES IN THIS VCN" оставляем отмеченной, чтобы впоследствии можно было бы привязать внутренний DNS к этой VCN.

После создания VCN система также создаст нам следующие объекты по умолчанию: CIDR Blocks (1 шт), Route Tables (1 шт), Security Lists (1 шт) и DHCP Options (1 шт).

Теперь мы должны будем создать внутри VCN подсеть IP-адресов. Для этого нажимаем кнопку "Create Subnet". В поле "Name" вводим имя подсети (сейчас создаем подсеть, в которой будут располагаться виртуальные машины, поэтому назовем ее "Virtual Machines"). Subnet type выбираем "Regional", в поле "CIDR Block" запишем значение 172.31.254.0/28 (хватит нам для начала 13 адресов на 2 бесплатные виртуальные машины?). В "SUBNET ACCESS" выбираем "PUBLIC SUBNET" (чтобы на виртуальные машины нам потом выделили внешние IP-адреса), остальные поля заполняем единственно доступными для выбора на данном этапе значениями.

После создания VCN мы можем создать в ней Internet Gateways. Здесь вообще все просто: в поле "Name" вводим имя создаваемого Internet Gateway и нажимаем кнопку "Create Internet Gateway"

Остался предпоследний шаг, который обеспечит нам возможность выходить из нашей VCN в сеть Интернет (а также входить из Интернета в нашу VCN, используя NAT 1:1). Сначала в меню идем по пунктам "Networking"=>"Virtual Cloud Networks", затем в списке выбираем созданную ранее VCN Zurich, внутри нее в блоке "Resources" выбираем "Route Tables", в появившемся списке выбираем таблицу "Default Route Table for VCN Zurich" (она была создана ранее автоматически), и нажимаем кнопку "Add Route Rule". В поле "Target type" выбираем "Internet Gateway", в поле "DESTINATION CIDR BLOCK" пишем маршрут по умолчанию 0.0.0.0/0, в поле "Target Internet Gateway" выбираем элемент, созданный нами на предыдущем шаге (впрочем он пока вообще будет единственным в списке выбора).

А теперь стоит разрешить ICMP Echo запросы из внешнего мира к нашей внутренней инфраструктуре (по умолчанию они запрещены). Для этого снова выбираем наш VCN Zurich, в его ресурсах выбираем Security Lists. Там будет единственный элемент, созданный автоматически при создании VCN.

Выбираем его в списке, нажимаем кнопку "Add Ingress Rules" и добавляем правило, разрешающее ICMP Echo Requests с любых адресов.

Отлично, мы создали себе сетевую инфраструктуру с требуемым диапазоном внутренних адресов и с подключением к сети Интернет. Теперь можно перейти непосредственно к созданию виртуальных машин.

В меню выбираем пункты "Compute"=>"Instances" и нажимаем кнопку "Create Instance". В поле "Name" указываем имя создаваемой машины, выбираем требуемую нам ОС, в Shape указываем тип VM.Standard.E2.1.Micro (это бесплатная виртуальная машина), в блоке "Configure networking " устанавливаем значение "Assign a public IPv4 address: Yes" (чтобы нашей виртуальной машине выделили внешний адрес в сети Интернет). Ну и убеждаемся, что сеть VCN и подсеть внутри нее выбраны правильно (т.е. те, которые мы создавали на предыдущих шагах). При необходимости можно загрузить уже существующий открытый ключ SSH или создать новый.

Возвращаемся в пункт "Instances" чтобы узнать внешний IP-адрес вновь созданной виртуальной машины.

Примечание: на картинке выше в списке отображаются две виртуальные машины: одна только что созданная и одна с именем "eu-zurich-1-ad-1.vedga.com". Эту машину я создавал ранее, а потом удалил. Но она все равно еще сутки будет отображаться в этом списке в состоянии "Terminated". Беспокоиться нечего: удаленные машины ресурсы не потребляют и не помешают вам создавать новые виртуальные машины (в пределах бесплатного лимита).

Для проверки делаем ping на внешний адрес, и если сеть на предыдущих шагах была настроена правильно, то мы получим ответ от нашей виртуальной машины. Теперь на нее можно зайти по SSH. Замечу, что при создании виртуальной машины из образа Ubuntu, первый вход надо делать не с именем root, а с именем ubuntu и заданным при создании машины SSH-ключем. Впрочем если попробуете зайти под root сразу он вас хотя и не пустит, но укажет, что надо сделать. Для перехода в режим root введите команду sudo /bin/bash, скопируйте содержимое /home/ubuntu/.ssh/* в /root/.ssh и поменяйте владельца файла /root/.ssh/authorized_keys на root:root. Теперь можно будет зайти на машину сразу под root-пользователем, используя ключ SSH.

Теперь у вас есть одна (или две) виртуальных машины, защищенных облачным firewall, и доступ них из внешнего мира. Кому-то этого будет достаточно, кто-то быстро поставить на них OpenVPN и свяжет их со своей сетью. А мы будем строить VPN штатными средствами Oracle Cloud (IPSec со статической или динамической BGP маршрутизацией и Mikrotik или Linux на другом конце туннеля), но это уже тема отдельной статьи. Итак, продолжение следует...

Полезные ресурсы

Подробнее..

Бесплатные сервисы для разработчиков огромный список

06.04.2021 12:11:10 | Автор: admin

Бесплатное хранилище артефактов PackageCloud

Удивительно, но в интернете сотни сервисов, которыми разработчик может пользоваться совершенно бесплатно. Бесконечное время (пока компания не обанкротится или не изменит условия), без рекламы, пробного периода и других подводных камней.

Недавно мы обсуждали эту тему в статье Боль разработчика: Никогда не давайте пользователям бесплатный тариф. Речь шла о том, что на самом деле бесплатный план вовсе не бесплатен приходится тратить массу времени и усилий на поддержку этих тарифов.

Но для некоторых бесплатный тариф единственный способ завлечь новых клиентов. Это просто замечательно с точки зрения самих пользователей. Ведь перед нами десятки бесплатных хостингов, API, CMS, CDN, сервисов обработки данных, поисковых движков, репозиториев, инструментов проверки кода и других. Бесплатный тариф идеален для опенсорс-разработчиков, любительских и некоммерческих проектов, маленьких стартапов. Ни за что не надо платить.

Например, огромный список бесплатных сервисов для разработчиков ведётся в репозитории free-for-dev. Список составлен пул-реквестами более 900 участников.

Важно подчеркнуть, что конкретно в этом списке отсутствуют альтернативы на своём хостинге (о них см. ниже). Здесь исключительно онлайновые сервисы, то есть SaaS, PaaS, IaaS.

Приведены только сервисы с честным бесплатным тарифом, которым можно пользоваться без ограничения по времени, без перехода на платную подписку. Обычно такой честный тариф ограничен только по объёму услуг.

Для примера вот несколько тематических категорий.

Основные облачные провайдеры


Ниже указано, в каком объёме предоставляются бесплатные услуги.

Google Cloud Platform

  • App Engine 28 часов фронтенд-инстансов в день, 9 часов бэкенд-инстансов в день
  • Cloud Firestore 1ГБ места, 50000 чтений, 20000 записей, 20000 удалений в день
  • Compute Engine 1 невытесняемый инстанс f1-micro, 30ГБHDD, 5ГБ для снапшотов (не для всех регионов), сеть 1ГБ из Северной Америки во все регионы (кроме Китая и Аргентины) в месяц
  • Cloud Storage 5ГБ, трафик 1ГБ
  • Cloud Shell веб-терминал Linux и базовая IDE с хранилищем на 5ГБ. Лимит 60 часов в неделю
  • Cloud Pub/Sub 10ГБ сообщений в месяц
  • Cloud Functions 2 млн вызовов в месяц (включая все фоновые и HTTP-вызовы)
  • Cloud Run 2 млн запросов в месяц, 360000гигабайт-секунд памяти, 180000 vCPU-секунд вычислительного времени, трафик 1ГБ в месяц из Северной Америки в другие регионы
  • Google Kubernetes Engine отсутствие платы за управление для одного зонального кластера. Но при этом все узлы оплачиваются по стандартной цене Compute Engine
  • BigQuery 1ТБ запросов в месяц, 10ГБ хранилище на месяц
  • Cloud Build 120 минут сборки в день
  • Cloud Source Repositories до 5 пользователей, хранилище 50ГБ, трафик 50ГБ
  • Полный список бесплатных тарифов Google Cloud

Amazon Web Services

  • Amazon DynamoDB СУБД NoSQL на 25ГБ
  • Amazon Lambda 1млн запросов в месяц
  • Amazon SNS 1млн нотификаций в месяц
  • Amazon Cloudwatch 10 пользовательских метрик и 10 предупреждений
  • Amazon Glacier 10ГБ долговременного хранилища объектов
  • Amazon SQS 1 млн запросов из очереди сообщений
  • Amazon CodeBuild 100 минут сборки в месяц
  • Amazon Code Commit 5 активных пользователей в месяц
  • Amazon Code Pipeline 1 активный конвейер в месяц
  • Полный список бесплатных тарифов AWS

Microsoft Azure

  • Virtual Machines 1 виртуальная машина B1S под Linux, одна B1S под Windows
  • App Service 10 приложений (веб, мобильные или API)
  • Functions 1 млн запросов в месяц
  • DevTest Labs среда разработки и тестирования
  • Active Directory 500000 объектов
  • Active Directory B2C хранилище на 50000 пользователей в месяц
  • Azure DevOps 5 активных пользователей, неограниченные приватные репозитории Git
  • Azure Pipelines 10 бесплатных параллельных задач с неограниченным временем выполнения для опенсорсных проектов под Linux, macOS и Windows
  • Microsoft IoT Hub 8000 сообщений в день
  • Load Balancer 1 бесплатный публичный IP (VIP) с балансировкой нагрузки
  • Notification Hubs 1млн пуш-нотификаций
  • Bandwidth внешний трафик 5ГБ в месяц
  • Cosmos DB 5ГБ хранилище и обеспеченная пропускная способность на 400 RU (реквест-юнитов)
  • Static Web Apps сборка, деплой и хостинг статичных приложений и бессерверных функций, с бесплатным SSL, аутентификацией/авторизацией и пользовательскими доменами
  • Storage хранилище для файлов и блобов на 5ГБ в LRS (locally redundant storage)
  • Cognitive Services AI/ML API (компьютерное зрение, перевод, распознавание лиц, боты...) с бесплатным лимитом использования
  • Cognitive Search сервис индексации текстов и поиск на основе ИИ, бесплатно на 10000 документов
  • Azure Kubernetes Service бесплатное управление кластером Kubernetes (хотя при этом оплачиваются сами виртуальные машины, хранение данных и другие сервисы за пределами бесплатных лимитов)
  • Event Grid 100тыс. операций в месяц
  • Полный список бесплатных тарифов Azure

Oracle Cloud

  • Compute два инстанса VM.Standard.E2.1.Micro 1ГБ RAM
  • Block Volume 2 тома, в сумме 100ГБ (используется для вычислений)
  • Object Storage 10 ГБ
  • Load Balancer 1 инстанс на 10 Мбит/с
  • Databases 2 базы данных, по 20 ГБ каждая
  • Monitoring приём до 500млн точек данных, выдача до 1млрд точек данных
  • Bandwidth внешний трафик 10ТБ в месяц с ограничением скорости 5Мбит/с
  • Notifications 1 млн нотификаций в месяц, 1000 отправленных писем
  • Полный список бесплатных тарифов Oracle Cloud

IBM Cloud

  • Cloud Functions 5 млн выполнений в месяц
  • Object Storage 25ГБ в месяц
  • Cloudant Database хранилище на 1 ГБ
  • Db2 Database хранилище на 100МБ
  • API Connect 50000 вызовов API в месяц
  • Availability Monitoring 3 млн точек данных в месяц
  • Log Analysis анализ логов до 500МБ в сутки
  • Полный список бесплатных тарифов IBM Cloud

Аналитика, статистика, логи


Вот несколько сервисов бесплатной аналитики для мобильных приложений и сайтов. Здесь только бесплатные сторонние сервисы. Многие из них можно использовать вместо скриптов Google Analytics, поскольку GA рассматривается как угроза приватности.

Примечание. Программы self-hosted см. в отдельной категории.

  • AO Analytics бесплатная аналитика для любых сайтов, без ограничений по объёму
  • Indicative платформа аналитики до 50млн событий в месяц
  • Amplitude 1 млн событий в месяц, до 2 приложений
  • GoatCounter опенсорсная платформа веб-аналитики бесплатно для некоммерческого использования или self-hosted версия бесплатно для всех. Позиционируется как более приватная альтернатива коммерческим сервисам Google Analytics и Matomo. Бесплатный лимит 6 месяцев хранения данных и 100тыс. просмотров в месяц.
  • Google Analytics, без комментариев
  • Expensify учёт расходов, контроль личных финансов
  • GetInsights система аналитики без куков, бесплатно до 5000 событий в месяц.
  • Heap автоматический трекинг действий пользователя в iOS или веб-приложениях. Бесплатно до 5000 визитов в месяц
  • Keen разнообразные инструменты для сбора данных, анализа и визуализации. Бесплатно до 50000 событий в месяц
  • Яндекс.Метрика российская альтернатива GA, но не лишённая недостатков последнего (в том числе угроза приватности со стороны материнской корпорации)
  • Mixpanel лимит 100000 пользователей в месяц, неограниченный срок хранения данных


    Mixpanel
  • Moesif аналитика API для REST и GraphQL, бесплатно до 500000 вызовов API в месяц
  • Molasses Флаги функций и A/B-тестирование, бесплатно до 3 окружений по 5 флагов функций в каждом.
  • Optimizely A/B-тестирование, бесплатный стартовый план на 1 сайт, 1 приложение iOS и 1 приложение Android
  • Quantcast новый сервис бесплатной аналитики, запущен в марте 2021 года, лимиты бесплатного тарифа официально не объявлены
  • Sematext бесплатно до 50тыс. действий в месяц, хранение данных 1 день
  • Tableau Developer Program бесплатная версия для разработчиков (предрелизная тестовая версия аналитической платформы)
  • UsabilityHub тестирование юзабилити и эффективности разных вариантов веб-дизайна. Бесплатные тесты до 2 минут
  • Woopra бесплатная платформа аналитики для любых продуктов, до 500тыс. действий в месяц, хранение данных до 90 дней

Другие категории



Эмулятор основных операционных систем в браузере copy.sh

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


Опенсорсные инструменты безопасности


Компания Penetrum Security, которая специализируется на информационной безопасности, составила собственный список опенсорсных инструментов для разработчиков, с упором на безопасность.

Например, в нём есть системы для управления уязвимостями Faraday, Archery Sec, Jackhammer,
Watchdog и OpenVAS, сканер контейнеров trivy, менеджеры конфигурация вроде MGMT, Chef и Puppet, бесплатные системы SIEM (анализ событий в реальном времени и реагирование), VPN, инструменты для улучшения безопасности систем на Linux и Windows (Bastille, JShielder, nixarmor, Zeus (AWS), Docker-bench и др.), защита аутентификации в Linux, чёрные списки IP и доменов, прокси, socks-серверы, HTTP-туннели, FTP-прокси, DNS-прокси, инструменты сетевого и серверного мониторинга, системы для определения вторжений в сеть и на хост (NIDS и HIDS, соответственно), мониторинг и анализ логов, антивирусы, спам-фильтры, симуляторы инфраструктуры, файрволы для веб-приложений, сетевые сканеры, системы форензики (поиск цифровых улик), программы анализа файлов, метаданных, оперативной памяти и многие другие инструменты.

Всё бесплатно и с открытыми исходниками.

Бесплатные альтернативы на своём хостинге


Вышеупомянутый список free-for-dev не включает бесплатные инструменты на своём хостинге. Однако их очень много. Обычно это опенсорсные программы. Бывает, что какой-то коммерческий сервис SaaS одновременно публикует исходники, то есть предлагает параллельно платный и бесплатный тариф.

Вот список бесплатных альтернатив на своём хостинге в 81 категории из коллекции awesome-selfhosted:



Списки бесплатных ресурсов для разработчиков также ведутся в проектах FOSS-for-Dev, getAwesomeness и De-google-ify Internet.

Надеемся, что эта подборка окажется кому-то полезной.



Наша компания предлагает облачные серверы для любых задач и на любой операционной системе. Создавайте собственные конфигурации в течение минуты, минимальный тариф всего 6.5 рублей в день!
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Подробнее..

Создаём мини PHP SDK для подписи запросов к Oracle Cloud Infrastructure API

11.02.2021 04:19:49 | Автор: admin

Идея написать эту библиотеку возникла, когда захотелось в полной мере воспользоваться всеми преимуществамибесплатного предложенияOracle Cloud Infrastructure, а именно 10 ГБ хранилища объектов (Object Storage) и 10 ТБ исходящего трафика в месяц. Разница сAWSS3 простоогромнейшая. К сожалению,OracleCloudне имеетв наличииSDKдля всё еще самого популярного языка программирования для разработки веб-сайтов. Хорошая новость состоит в том, что сервисчастично совместимсAmazonS3, а это означает, что можно применить уже имеющиеся и отлично задокументированныеинструменты разработчика, в том числе дляPHP.

Тем, кому не терпится увидеть код, добро пожаловатьhttps://github.com/hitrov/oci-api-php-request-sign.

Действительно, с имеющимися инструментами можно выполнять почти все операции, которые можно представить - для создания, чтения и удаления корзин (buckets) и объектов (файлов). Корзины могут быть как публичными (с возможностью листинга файлов и без) и приватными. Есть возможность загружать файлы в приватную корзину, имея лишь секретныйURL(сгенерированный вручную с помощьюCLIили веб-интерфейса - консолиOracleCloud). На самом деле этого уже может быть достаточно для многих сценариев, особенно если генерировать стойкие к подбору имена файлов - в случае, если вы не хотите выставлять их на публику.

Меня интересовала возможность расшаривать файлы, то есть делиться общедоступными ссылками на файлы, и, конечно же, ограничивать доступ при необходимости. При небольшом количестве файлов можно делать это вручную, но мы собрались здесь, чтобы иметь программный доступ. ВAWS S3этоназываетсяPre-Signed URL,ауOracle -Pre-Authenticated Request.

Установка AWS PHP SDK

composer require aws/aws-sdk-php

Ниже будет показано, где взять доступы (AWS_ACCESS_KEY_IDи AWS_SECRET_ACCESS_KEY.

Namespace же можно увидеть

$namespaceName = 'frpegp***';$bucketName = 'test******05';$region = 'eu-frankfurt-1';$endpoint = "https://$namespaceName.compat.objectstorage.$region.oraclecloud.com";$s3 = new Aws\S3\S3Client([    'version' => 'latest',    'region'  => $region,    'endpoint' => $endpoint,    'signature_version' => 'v4',    'use_path_style_endpoint' => true,    'credentials' => [        'key'    => 'AKI***YYJ', // remove if you have env var AWS_ACCESS_KEY_ID        'secret' => 'ndK***cIf', , // remove if you have env var AWS_SECRET_ACCESS_KEY    ],]);$cmd = $s3->getCommand('GetObject', [    'Bucket' => $bucketName,    'Key' => 'fff.txt']);$request = $s3->createPresignedRequest($cmd, '+20 minutes');

К сожалению, данная операция, хотя и не вызывает ошибку, отдавая в ответPSR-7request, но возвращаемый имURLвида

https://{namespace}.compat.objectstorage.eu-frankfurt-1.oraclecloud.com/{bucket}/fff.txt?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=***%2F20210210%2Feu-frankfurt-1%2Fs3%2Faws4_request&X-Amz-Date=20210210T185244Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1200&X-Amz-Signature=a167a***9a857

просто не работает.

<?xml version="1.0" encoding="UTF-8"?><Error>    <Message>The required information to complete authentication was not provided.</Message>    <Code>SignatureDoesNotMatch</Code></Error>

Поскольку совместимость для данной операции не была заявлена, странно было бы ожидать иного, но попробовать стоило :)

Здесь я попробую очень кратко описать, что необходимо для подписи запроса кAPI, ведь все изложено довольно подробноздесь, пусть и с примерами для иных языков программирования.

Разумеется, подпись будет работать для всех запросов начиная от создания\остановки\бэкапаавтономной базы данных, управленияDNSи заканчивая отправкойEmail. Всё что указано в API Reference and Endpoints.

Прежде всего, для того, чтобы начать работу, нужны ключи доступа, в веб-интерфейсе (консоли)OracleCloud необходимо зайти вUserSettings

Действия в профиле Oracle CloudДействия в профиле Oracle Cloud

API KeysAdd API Key

API Keys - Add API KeyAPI Keys - Add API Key

Downloadprivatekey(сохраняем в надежном месте), затемAdd

Download Private Key and AddDownload Private Key and Add

Сохраняем все значения из текстового поля, они нам понадобятся через минуту

Configuration File exampleConfiguration File example

Для того, чтобы воспользоваться AWS PHP SDK, вам необходимы Customer Secret Keys (они же AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY в понимании Amazon.

Установка Oracle Cloud Infrastructure mini PHP SDK(никаких внешних зависимостей!)

composer require hitrov/oci-api-php-request-sign

Пакет использует стандартнуюPSR-4 автозагрузку классов.

require 'vendor/autoload.php';use Hitrov\OCI\Signer;

Для авторизации нужно задать переменные среды (замените на значения, взятые из текстового поля, проставьте путь к файлу с приватным ключом).

OCI_TENANCY_ID=ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsqOCI_USER_ID=ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjqOCI_KEY_FINGERPRINT=20:3b:97:13:55:1c:5b:0d:d3:37:d8:50:4e:c5:3a:34OCI_PRIVATE_KEY_FILENAME=/path/to/privatekey.pem

В этом случае конструктор не принимает аргументов.

$signer = new Signer;

Переменным среды есть несколько альтернативhttps://github.com/hitrov/oci-api-php-request-sign#alternatives-for-providing-credentials, не стану дублировать это здесь.

МыпопробуемвыполнитьCreatePreauthenticatedRequest.

Вся сложность (если можно так выразиться) абстрагирована в один публичный метод

public function getHeaders(    string $url, string $method = 'GET', ?string $body = null, ?string $contentType = 'application/json', string $dateString = null): array

Пример использования

$curl = curl_init();$url = 'https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/{namespaceName}/b/{bucketName}/p/';$method = 'POST';$body = '{"accessType": "ObjectRead", "name": "read-access-to-image.png", "objectName": "path/to/image.png", "timeExpires": "2021-03-01T00:00:00-00:00"}';$headers = $signer->getHeaders($url, $method, $body, 'application/json');var_dump($headers);$curlOptions = [  CURLOPT_URL => $url,  CURLOPT_RETURNTRANSFER => true,  CURLOPT_ENCODING => '',  CURLOPT_MAXREDIRS => 10,  CURLOPT_TIMEOUT => 5,  CURLOPT_FOLLOWLOCATION => true,  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,  CURLOPT_CUSTOMREQUEST => $method,  CURLOPT_HTTPHEADER => $headers,];if ($body) {  // not needed for GET or HEAD requests  $curlOptions[CURLOPT_POSTFIELDS] = $body;}curl_setopt_array($curl, $curlOptions);$response = curl_exec($curl);echo $response;curl_close($curl);
array(6) {  [0]=>  string(35) "date: Mon, 08 Feb 2021 20:49:22 GMT"  [1]=>  string(50) "host: objectstorage.eu-frankfurt-1.oraclecloud.com"  [2]=>  string(18) "content-length: 76"  [3]=>  string(30) "content-type: application/json"  [4]=>  string(62) "x-content-sha256: X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE="  [5]=>  string(538) "Authorization: Signature version=\"1\",keyId=\"ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq/ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjq/20:3b:97:13:55:1c:5b:0d:d3:37:d8:50:4e:c5:3a:34\",algorithm=\"rsa-sha256\",headers=\"date (request-target) host content-length content-type x-content-sha256\",signature=\"LXWXDA8VmXXc1NRbMmXtW61IS97DfIOMAnlj+Gm+oBPNc2svXYdhcXNJ+oFPoi9qJHLnoUiHqotTzuVPXSG5iyXzFntvkAn3lFIAja52iwwwcJflEIXj/b39eG2dCsOTmmUJguut0FsLhCRSX0eylTSLgxTFGoQi7K/m18nafso=\""}
{  "accessUri": "/p/AlIlOEsMok7oE7YkN30KJUDjDKQjk493BKbuM-ANUNGdBBAHzHT_5lFlzYC9CQiA/n/{namespaceName}/b/{bucketName}/o/path/to/image.png",  "id": "oHJQWGxpD+2PhDqtoewvLCf8/lYNlaIpbZHYx+mBryAad/q0LnFy37Me/quKhxEi:path/to/image.png",  "name": "read-access-to-image.png",  "accessType": "ObjectRead",  "objectName": "path/to/image.png",  "timeCreated": "2021-02-09T11:52:45.053Z",  "timeExpires": "2021-03-01T00:00:00Z"}

Вот и всё!

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

1) Прежде всего, нам необходимо собрать список подписываемых заголовков (SIGNING_HEADERS_NAMES). Он всегда содержит

  • date

  • (request-target)

  • host

ДляPOST|PUT|PATCHзапросов добавляются еще три

  • content-length

  • content-type

  • x-content-sha256

$signingHeadersNames = $signer->getSigningHeadersNames('POST');

2) SHA256 хэш тела запроса кодированный вbase64

$bodyHashBase64 = $signer->getBodyHashBase64($body);

3) Сформировать строку для подписи, в нашем случае она будет выглядеть следующим образом

date: Mon, 08 Feb 2021 20:51:33 GMT(request-target): post /n/{namespaceName}/b/{bucketName}/p/host: objectstorage.eu-frankfurt-1.oraclecloud.comcontent-length: 76content-type: application/jsonx-content-sha256: X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=
$signingString = $signer->getSigningString($url, $method, $body, 'application/json');

Хэш мы получили в (2).Важно, что дата и время не должны отличаться от текущих на более, чем 5 минут.

4) Подписать строку из (3) приватным ключом с помощью алгоритмаRSA-SHA256

$signature = $signer->calculateSignature($signingString, $privateKeyString);

5) Сформировать KEY_ID данными, которые вы скопировали при создании API Key, это строка, разделенная слешами

"{OCITENANCYID}/{OCIUSERID}/{OCIKEY_FINGERPRINT}"

$keyId = $signer->getKeyId();

6) Теперь мы готовы сгенерировать заголовок авторизации(версия 1останется таковой до отдельного уведомления отOracle)

Authorization: Signature version=\"1\",keyId=\"{KEY_ID}\",algorithm=\"rsa-sha256\",headers=\"{SIGNING_HEADERS_NAMES_STRING}\",signature=\"{SIGNATURE}\"

гдеSIGNING_HEADERS_NAMES_STRING это список из (1), разделенный пробелами.

date (request-target) host content-length content-type x-content-sha256

$signingHeadersNamesString = implode(' ', $signingHeadersNames);$authorizationHeader = $signer->getAuthorizationHeader($keyId, $signingHeadersNamesString, $signature);

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

Authorization: Signature version=\"1\",keyId=\"ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq/ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjq/20:3b:97:13:55:1c:5b:0d:d3:37:d8:50:4e:c5:3a:34\",algorithm=\"rsa-sha256\",headers=\"date (request-target) host content-length content-type x-content-sha256\",signature=\"LXWXDA8VmXXc1NRbMmXtW61IS97DfIOMAnlj+Gm+oBPNc2svXYdhcXNJ+oFPoi9qJHLnoUiHqotTzuVPXSG5iyXzFntvkAn3lFIAja52iwwwcJflEIXj/b39eG2dCsOTmmUJguut0FsLhCRSX0eylTSLgxTFGoQi7K/m18nafso=\"

Реальные заголовки запроса - см. выводvar_dump()выше - должны содержать всё из (3), за исключением поля(request-target)и его значения. И, конечно же, заголовок авторизации (6).

МнепомогластатьяOracle Cloud Infrastructure (OCI) REST call walkthrough with curl. Некоторые имена методов позаимствованы из официальногоGoLangSDK. Тест-кейсы оттуда же.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru