Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавить в README разные примеры авторизации #18

Open
konstesting opened this issue Aug 2, 2023 · 1 comment

Comments

@konstesting
Copy link

konstesting commented Aug 2, 2023

Не у всех есть возможность использовать персональный oauth токен и приходится работать с Яндекс облаком через корпоративную (федеративную) учётную запись. В связи с этим прошу расширить пример авторизации в YandexCloud через SDK разными способами, чтобы другие люди могли сэкономить время.

Мой пример:

	oauthToken := flag.String("oauth-token", "", "")
	pathToServiceAccountKey := flag.String("path-to-service-account-key", "", "path/to/service-account-key.json")
	iamToken := flag.String("iam-token", "", "")
	flag.Parse()

	var creds ycsdk.Credentials
	if *oauthToken != "" {
		creds = ycsdk.OAuthToken(*oauthToken)
	} else if *iamToken != "" {
		creds = ycsdk.NewIAMTokenCredentials(*iamToken)
	} else if *pathToServiceAccountKey != "" {
		bytes, err := ioutil.ReadFile(*pathToServiceAccountKey)
		if err != nil {
			return fmt.Errorf("cant find service account json file: %w", err)
		}
		var SAKey iamkey.Key
		err = yaml.Unmarshal(bytes, &SAKey)
		if err != nil {
			return err
		}
		creds, err = ycsdk.ServiceAccountKey(&SAKey)
		if err != nil {
			return err
		}
	} else {
		return fmt.Errorf("error: oauth or iam token is not provided")
	}

	sdk, err := ycsdk.Build(ctx, ycsdk.Config{
		Credentials: creds,
	})
	if err != nil {
		log.Fatal("build creds error:", err)
	}
@SergeyNarozhny
Copy link

SergeyNarozhny commented Feb 19, 2024

С доками все так плохо, что пост @konstesting гугглится наряду с описаниями YC API. Так что добавлю свой примерчик для случая с serviceAccountJson file:

import (
        "context"
	"github.com/yandex-cloud/go-genproto/yandex/cloud/compute/v1"
	ycsdk "github.com/yandex-cloud/go-sdk"
	"github.com/yandex-cloud/go-sdk/iamkey"
)

func ycsdkApiFetch(ctx context.Context, folderId string) {
        serviceAccountKeyJson := "example.json"
	key, err := iamkey.ReadFromJSONFile(serviceAccountKeyJson)
	if err != nil {
		return err
	}

	creds, err := ycsdk.ServiceAccountKey(key)
	if err != nil {
		return err
	}

	cfg := ycsdk.Config{
		Credentials: creds,
	}

	sdk, err := ycsdk.Build(ctx, cfg)
	if err != nil {
		return err
	}

	result, err := sdk.Compute().Instance().List(ctx, &compute.ListInstancesRequest{
		FolderId: folderId,
	})
	if err != nil {
		return err
	}

	for _, inst := range result.GetInstances() {
		//  some code
	}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants