Аутентификация при помощи переменных окружения

    Примечание

    Материал статьи дополняется.

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

    Установив одну из следующих переменных окружения, можно управлять способом аутентификации:

    • YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS=<path/to/sa_key_file> — использовать файл сервисного аккаунта в Яндекс Облаке.
    • YDB_ANONYMOUS_CREDENTIALS="1" — Использовать анонимную аутентификацию. Актуально для тестирования против докер-контейнера с YDB.
    • YDB_METADATA_CREDENTIALS="1" — использовать сервис метаданных внутри Яндекс Облака (Яндекс функция или виртуальная машина).
    • YDB_ACCESS_TOKEN_CREDENTIALS=<access_token> — использовать аутентификацию с токеном.

    Ниже приведены примеры кода аутентификации при помощи переменных окружения в разных YDB SDK.

    package main
    
    import (
      "context"
      "os"
      
      environ "github.com/ydb-platform/ydb-go-sdk-auth-environ"
      "github.com/ydb-platform/ydb-go-sdk/v3"
    )
    
    func main() {
      ctx, cancel := context.WithCancel(context.Background())
      defer cancel()
      db, err := ydb.Open(ctx,
        os.Getenv("YDB_CONNECTION_STRING"),
        environ.WithEnvironCredentials(ctx),
      )
      if err != nil {
        panic(err)
      }
      defer db.Close(ctx)
      ...
    }
    
    package main
    
    import (
      "context"
      "database/sql"
      "os"
      
      environ "github.com/ydb-platform/ydb-go-sdk-auth-environ"
      "github.com/ydb-platform/ydb-go-sdk/v3"
    )
    
    func main() {
      ctx, cancel := context.WithCancel(context.Background())
      defer cancel()
      nativeDriver, err := ydb.Open(ctx,
        os.Getenv("YDB_CONNECTION_STRING"),
        environ.WithEnvironCredentials(ctx),
      )
      if err != nil {
        panic(err)
      }
      defer nativeDriver.Close(ctx) 
      connector, err := ydb.Connector(nativeDriver)
      if err != nil {
        panic(err)
      }
      db := sql.OpenDB(connector)
      defer db.Close()
      ...
    }
    
    public void work(String connectionString) {
        AuthProvider authProvider = CloudAuthHelper.getAuthProviderFromEnviron();
    
        GrpcTransport transport = GrpcTransport.forConnectionString(connectionString)
                .withAuthProvider(authProvider)
                .build());
        
        TableClient tableClient = TableClient.newClient(transport).build();
    
        doWork(tableClient);
    
        tableClient.close();
        transport.close();
    }