Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/otelcol/auth/sigv4/sigv4.go
4096 views
1
package sigv4
2
3
import (
4
"github.com/grafana/agent/component"
5
"github.com/grafana/agent/component/otelcol/auth"
6
"github.com/grafana/agent/pkg/river"
7
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension"
8
otelcomponent "go.opentelemetry.io/collector/component"
9
otelconfig "go.opentelemetry.io/collector/config"
10
)
11
12
func init() {
13
component.Register(component.Registration{
14
Name: "otelcol.auth.sigv4",
15
Args: Arguments{},
16
Exports: auth.Exports{},
17
18
Build: func(opts component.Options, args component.Arguments) (component.Component, error) {
19
fact := sigv4authextension.NewFactory()
20
return auth.New(opts, fact, args.(Arguments))
21
},
22
})
23
}
24
25
// Arguments configures the otelcol.auth.sigv4 component.
26
type Arguments struct {
27
Region string `river:"region,attr,optional"`
28
Service string `river:"service,attr,optional"`
29
AssumeRole AssumeRole `river:"assume_role,block,optional"`
30
}
31
32
var (
33
_ river.Unmarshaler = (*Arguments)(nil)
34
_ auth.Arguments = Arguments{}
35
)
36
37
// Convert implements auth.Arguments.
38
func (args Arguments) Convert() (otelconfig.Extension, error) {
39
res := sigv4authextension.Config{
40
ExtensionSettings: otelconfig.NewExtensionSettings(otelconfig.NewComponentID("sigv4")),
41
Region: args.Region,
42
Service: args.Service,
43
AssumeRole: *args.AssumeRole.Convert(),
44
}
45
// sigv4authextension.Config has a private member called "credsProvider" which gets initialized when we call Validate().
46
// If we don't call validate, the unit tests for this component will fail.
47
if err := res.Validate(); err != nil {
48
return nil, err
49
}
50
return &res, nil
51
}
52
53
func (args *Arguments) UnmarshalRiver(f func(interface{}) error) error {
54
type arguments Arguments
55
if err := f((*arguments)(args)); err != nil {
56
return err
57
}
58
59
_, err := args.Convert()
60
return err
61
}
62
63
// Extensions implements auth.Arguments.
64
func (args Arguments) Extensions() map[otelconfig.ComponentID]otelcomponent.Extension {
65
return nil
66
}
67
68
// Exporters implements auth.Arguments.
69
func (args Arguments) Exporters() map[otelconfig.DataType]map[otelconfig.ComponentID]otelcomponent.Exporter {
70
return nil
71
}
72
73
// AssumeRole replicates sigv4authextension.Config.AssumeRole
74
type AssumeRole struct {
75
ARN string `river:"arn,attr,optional"`
76
SessionName string `river:"session_name,attr,optional"`
77
STSRegion string `river:"sts_region,attr,optional"`
78
}
79
80
// Convert converts args into the upstream type.
81
func (args *AssumeRole) Convert() *sigv4authextension.AssumeRole {
82
if args == nil {
83
return nil
84
}
85
86
return &sigv4authextension.AssumeRole{
87
ARN: args.ARN,
88
SessionName: args.SessionName,
89
STSRegion: args.STSRegion,
90
}
91
}
92
93