Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Object Storage
    • Все инструменты
      • Все SDK
      • AWS SDK для Java
      • AWS SDK для JavaScript
      • AWS SDK для Python (boto)
      • AWS SDK для .NET
      • AWS SDK для C++
      • AWS SDK для PHP
      • AWS SDK для Go
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Подготовка к работе
  • Установка
  • Настройка
  • Особенности
  • Примеры кода
  • См. также
  1. Инструменты
  2. SDK
  3. AWS SDK для .NET

AWS SDK для .NET

Статья создана
Yandex Cloud
Обновлена 16 апреля 2025 г.
  • Подготовка к работе
  • Установка
  • Настройка
  • Особенности
  • Примеры кода
  • См. также

AWS SDK для .NET — это комплект средств разработки для работы с сервисами AWS.

Подготовка к работеПодготовка к работе

  1. Создайте сервисный аккаунт.

  2. Назначьте сервисному аккаунту роли, которые нужны для вашего проекта, например storage.editor на бакет — для работы с конкретным бакетом, или на каталог — для работы со всеми бакетами в каталоге. Подробнее о ролях см. на странице Управление доступом с помощью Yandex Identity and Access Management.

    Чтобы работать с объектами в зашифрованном бакете, у пользователя или сервисного аккаунта вместе с ролью storage.configurer должны быть следующие роли на ключ шифрования:

    • kms.keys.encrypter — для чтения ключа, шифрования и загрузки объектов;
    • kms.keys.decrypter — для чтения ключа, расшифровки и скачивания объектов;
    • kms.keys.encrypterDecrypter — включает разрешения, предоставляемые ролями kms.keys.encrypter и kms.keys.decrypter.

    Подробнее см. Сервисные роли Key Management Service.

  3. Создайте статический ключ доступа.

    В результате вы получите данные статического ключа доступа. Для аутентификации в Object Storage вам понадобятся:

    • key_id — идентификатор статического ключа доступа;
    • secret — секретный ключ.

    Сохраните key_id и secret, так как повторное получение значения ключа будет невозможно.

Примечание

Сервисный аккаунт может просматривать список бакетов только в том каталоге, в котором он был создан.

Сервисный аккаунт может выполнять действия с объектами в бакетах, которые созданы в каталогах, отличных от каталога сервисного аккаунта. Для этого назначьте сервисному аккаунту роли на нужный каталог или бакет в нем.

УстановкаУстановка

Для установки AWS SDK для .NET воспользуйтесь инструкцией на сайте производителя.

НастройкаНастройка

  1. Создайте директорию для хранения аутентификационных данных и перейдите в нее:

    Для macOS и Linux:

    mkdir ~/.aws/
    

    Для Windows:

    mkdir C:\Users\<имя_пользователя>\.aws\
    
  2. В директории .aws создайте файл credentials и скопируйте в него аутентификационные данные, полученные ранее:

    [default]
    aws_access_key_id = <идентификатор_статического_ключа>
    aws_secret_access_key = <секретный_ключ>
    
  3. Создайте файл config с параметрами региона по умолчанию и скопируйте в него следующую информацию:

    [default]
    region = ru-central1
    endpoint_url = https://storage.yandexcloud.net
    

    Примечание

    Некоторые приложения, предназначенные для работы с Amazon S3, не позволяют указывать регион, поэтому Object Storage принимает также значение us-east-1.

ОсобенностиОсобенности

  • AWS SDK для .NET некорректно обрабатывает конфигурации для жизненных циклов, которые не содержат в себе описания правил (ID). Добавьте описания ко всем правилам жизненного цикла.
  • Для доступа к Object Storage, например при работе с классом AmazonS3Config, используйте адрес s3.yandexcloud.net.

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

Чтобы подключиться к Object Storage, используйте код:

AmazonS3Config configsS3 = new AmazonS3Config {
    ServiceURL = "https://s3.yandexcloud.net"
};

AmazonS3Client s3client = new AmazonS3Client(configsS3);

Пример программы с использованием .NET AWS SDK, которая при запуске создаст бакет, загрузит в него объект, удалит объект и удалит бакет:

using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;

namespace Example
{
    public static class Program
    {
        public static async Task Main()
        {
            var testBucketName = "your-unique-bucket-name";
            var uploadObjectKey = "object-key";
            AmazonS3Client s3client = null;

            try
            {
                // Настройка клиента S3
                AmazonS3Config configsS3 = new AmazonS3Config {
                    ServiceURL = "https://s3.yandexcloud.net",
                };
                s3client = new AmazonS3Client(configsS3);

                // Создание бакета
                Console.WriteLine($"Creating bucket {testBucketName}");
                try 
                {
                    await s3client.PutBucketAsync(new PutBucketRequest
                    {
                        BucketName = testBucketName,
                        UseClientRegion = true
                    });
                    Console.WriteLine($"Bucket '{testBucketName}' created successfully.");
                }
                catch (AmazonS3Exception ex) when (ex.StatusCode == System.Net.HttpStatusCode.Conflict)
                {
                    Console.WriteLine($"Bucket '{testBucketName}' already exists. Continuing with existing bucket.");
                }

                // Загрузка объекта
                Console.WriteLine($"Uploading object to bucket '{testBucketName}'.");
                try
                {
                    await s3client.PutObjectAsync(new Amazon.S3.Model.PutObjectRequest
                    {
                        BucketName = testBucketName,
                        Key = uploadObjectKey,
                        ContentBody = "Hello World!"
                    });
                    Console.WriteLine("Object was uploaded successfully.");
                }
                catch (AmazonS3Exception ex)
                {
                    Console.WriteLine($"Error uploading object: {ex.Message}");
                    throw; // Re-throw to be caught by outer try-catch
                }

                // Удаление объекта
                Console.WriteLine($"Deleting object with key '{uploadObjectKey}'");
                try
                {
                    await s3client.DeleteObjectAsync(new Amazon.S3.Model.DeleteObjectRequest
                    {
                        BucketName = testBucketName,
                        Key = uploadObjectKey
                    });
                    Console.WriteLine($"Object with key '{uploadObjectKey}' was deleted successfully");
                }
                catch (AmazonS3Exception ex)
                {
                    Console.WriteLine($"Error deleting object: {ex.Message}");
                    throw; // Re-throw to be caught by outer try-catch
                }
                
                // Удаление бакета
                Console.WriteLine($"Deleting bucket with name '{testBucketName}'");
                try
                {
                    await s3client.DeleteBucketAsync(new Amazon.S3.Model.DeleteBucketRequest
                    {
                        BucketName = testBucketName
                    });
                    Console.WriteLine($"Bucket '{testBucketName}' was deleted successfully");
                }
                catch (AmazonS3Exception ex)
                {
                    Console.WriteLine($"Error deleting bucket: {ex.Message}");
                    // Если нужно принудительно удалить не пустой бакет, можно добавить код здесь
                    throw; // Re-throw to be caught by outer try-catch
                }
            }
            catch (AmazonS3Exception ex)
            {
                Console.WriteLine($"Amazon S3 Error: {ex.ErrorCode}, Message: {ex.Message}");
                Console.WriteLine($"Status code: {ex.StatusCode}, Request ID: {ex.RequestId}");
            }
            catch (AmazonServiceException ex)
            {
                Console.WriteLine($"Amazon Service Error: {ex.ErrorCode}, Message: {ex.Message}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"General error: {ex.Message}");
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                // Правильная очистка ресурсов
                s3client?.Dispose();
            }
        }
    }
}

См. такжеСм. также

  • Примеры использования AWS SDK для .NET в документации AWS

Была ли статья полезна?

Предыдущая
AWS SDK для Python (boto)
Следующая
AWS SDK для C++
Проект Яндекса
© 2025 ООО «Яндекс.Облако»