Path: blob/main/component/otelcol/auth/sigv4/sigv4.go
4096 views
package sigv412import (3"github.com/grafana/agent/component"4"github.com/grafana/agent/component/otelcol/auth"5"github.com/grafana/agent/pkg/river"6"github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension"7otelcomponent "go.opentelemetry.io/collector/component"8otelconfig "go.opentelemetry.io/collector/config"9)1011func init() {12component.Register(component.Registration{13Name: "otelcol.auth.sigv4",14Args: Arguments{},15Exports: auth.Exports{},1617Build: func(opts component.Options, args component.Arguments) (component.Component, error) {18fact := sigv4authextension.NewFactory()19return auth.New(opts, fact, args.(Arguments))20},21})22}2324// Arguments configures the otelcol.auth.sigv4 component.25type Arguments struct {26Region string `river:"region,attr,optional"`27Service string `river:"service,attr,optional"`28AssumeRole AssumeRole `river:"assume_role,block,optional"`29}3031var (32_ river.Unmarshaler = (*Arguments)(nil)33_ auth.Arguments = Arguments{}34)3536// Convert implements auth.Arguments.37func (args Arguments) Convert() (otelconfig.Extension, error) {38res := sigv4authextension.Config{39ExtensionSettings: otelconfig.NewExtensionSettings(otelconfig.NewComponentID("sigv4")),40Region: args.Region,41Service: args.Service,42AssumeRole: *args.AssumeRole.Convert(),43}44// sigv4authextension.Config has a private member called "credsProvider" which gets initialized when we call Validate().45// If we don't call validate, the unit tests for this component will fail.46if err := res.Validate(); err != nil {47return nil, err48}49return &res, nil50}5152func (args *Arguments) UnmarshalRiver(f func(interface{}) error) error {53type arguments Arguments54if err := f((*arguments)(args)); err != nil {55return err56}5758_, err := args.Convert()59return err60}6162// Extensions implements auth.Arguments.63func (args Arguments) Extensions() map[otelconfig.ComponentID]otelcomponent.Extension {64return nil65}6667// Exporters implements auth.Arguments.68func (args Arguments) Exporters() map[otelconfig.DataType]map[otelconfig.ComponentID]otelcomponent.Exporter {69return nil70}7172// AssumeRole replicates sigv4authextension.Config.AssumeRole73type AssumeRole struct {74ARN string `river:"arn,attr,optional"`75SessionName string `river:"session_name,attr,optional"`76STSRegion string `river:"sts_region,attr,optional"`77}7879// Convert converts args into the upstream type.80func (args *AssumeRole) Convert() *sigv4authextension.AssumeRole {81if args == nil {82return nil83}8485return &sigv4authextension.AssumeRole{86ARN: args.ARN,87SessionName: args.SessionName,88STSRegion: args.STSRegion,89}90}919293