Skip to content

Commit 35e2848

Browse files
committed
Add support for the AWS_MSK_IAM SASL mechanism
1 parent 23dc332 commit 35e2848

File tree

5 files changed

+72
-5
lines changed

5 files changed

+72
-5
lines changed

cmd/kaf/kaf.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,10 @@ func getConfig() (saramaConfig *sarama.Config) {
108108
} else if cluster.SASL.Mechanism == "SCRAM-SHA-256" {
109109
saramaConfig.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient { return &XDGSCRAMClient{HashGeneratorFcn: SHA256} }
110110
saramaConfig.Net.SASL.Mechanism = sarama.SASLMechanism(sarama.SASLTypeSCRAMSHA256)
111-
} else if cluster.SASL.Mechanism == "OAUTHBEARER" {
111+
} else if cluster.SASL.Mechanism == "OAUTHBEARER" || cluster.SASL.Mechanism == "AWS_MSK_IAM" {
112112
//Here setup get token function
113113
saramaConfig.Net.SASL.Mechanism = sarama.SASLMechanism(sarama.SASLTypeOAuth)
114114
saramaConfig.Net.SASL.TokenProvider = newTokenProvider()
115-
116115
}
117116
}
118117
return saramaConfig

cmd/kaf/oauth.go

+19-3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"time"
88

99
"github.com/IBM/sarama"
10+
aws_signer "github.com/aws/aws-msk-iam-sasl-signer-go/signer"
11+
aws_config "github.com/aws/aws-sdk-go-v2/config"
1012
"golang.org/x/oauth2"
1113
"golang.org/x/oauth2/clientcredentials"
1214
)
@@ -41,9 +43,24 @@ type tokenProvider struct {
4143
func newTokenProvider() *tokenProvider {
4244
once.Do(func() {
4345
cluster := currentCluster
46+
ctx := context.Background()
4447

45-
//token either from tokenURL or static
46-
if len(cluster.SASL.Token) != 0 {
48+
// token either from tokenURL, static or AWS API
49+
if cluster.SASL.Mechanism == "AWS_MSK_IAM" {
50+
cfg, err := aws_config.LoadDefaultConfig(ctx)
51+
if err != nil {
52+
errorExit("Could not load AWS config: " + err.Error())
53+
}
54+
token, _, err := aws_signer.GenerateAuthToken(ctx, cfg.Region)
55+
if err != nil {
56+
errorExit("Could not generate auth token: " + err.Error())
57+
}
58+
tokenProv = &tokenProvider{
59+
oauthClientCFG: &clientcredentials.Config{},
60+
staticToken: true,
61+
currentToken: token,
62+
}
63+
} else if len(cluster.SASL.Token) != 0 {
4764
tokenProv = &tokenProvider{
4865
oauthClientCFG: &clientcredentials.Config{},
4966
staticToken: true,
@@ -62,7 +79,6 @@ func newTokenProvider() *tokenProvider {
6279
}
6380
if !tokenProv.staticToken {
6481
// create context with timeout
65-
ctx := context.Background()
6682
httpClient := &http.Client{Timeout: tokenFetchTimeout}
6783
ctx = context.WithValue(ctx, oauth2.HTTPClient, httpClient)
6884
tokenProv.ctx = ctx

examples/aws_msk_iam.yaml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
clusters:
2+
- name: test
3+
brokers:
4+
- localhost:9092
5+
SASL:
6+
mechanism: AWS_MSK_IAM
7+
TLS: null
8+
security-protocol: SASL_SSL
9+
# set the region using the AWS_REGION envvar or saved profiles

go.mod

+13
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/IBM/sarama v1.43.0
77
github.com/Landoop/schema-registry v0.0.0-20190327143759-50a5701c1891
88
github.com/Masterminds/sprig v2.22.0+incompatible
9+
github.com/aws/aws-msk-iam-sasl-signer-go v1.0.0
910
github.com/golang/protobuf v1.5.4
1011
github.com/hokaccha/go-prettyjson v0.0.0-20190818114111-108c894c2c0e
1112
github.com/jhump/protoreflect v1.15.6
@@ -28,6 +29,18 @@ require (
2829
github.com/Masterminds/goutils v1.1.1 // indirect
2930
github.com/Masterminds/semver v1.5.0 // indirect
3031
github.com/Microsoft/go-winio v0.5.2 // indirect
32+
github.com/aws/aws-sdk-go-v2 v1.19.0 // indirect
33+
github.com/aws/aws-sdk-go-v2/config v1.18.28 // indirect
34+
github.com/aws/aws-sdk-go-v2/credentials v1.13.27 // indirect
35+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.5 // indirect
36+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.35 // indirect
37+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.29 // indirect
38+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.36 // indirect
39+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.29 // indirect
40+
github.com/aws/aws-sdk-go-v2/service/sso v1.12.13 // indirect
41+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.13 // indirect
42+
github.com/aws/aws-sdk-go-v2/service/sts v1.19.3 // indirect
43+
github.com/aws/smithy-go v1.13.5 // indirect
3144
github.com/bufbuild/protocompile v0.8.0 // indirect
3245
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect
3346
github.com/davecgh/go-spew v1.1.1 // indirect

go.sum

+30
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,32 @@ github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZC
1212
github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
1313
github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA=
1414
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
15+
github.com/aws/aws-msk-iam-sasl-signer-go v1.0.0 h1:UyjtGmO0Uwl/K+zpzPwLoXzMhcN9xmnR2nrqJoBrg3c=
16+
github.com/aws/aws-msk-iam-sasl-signer-go v1.0.0/go.mod h1:TJAXuFs2HcMib3sN5L0gUC+Q01Qvy3DemvA55WuC+iA=
17+
github.com/aws/aws-sdk-go-v2 v1.19.0 h1:klAT+y3pGFBU/qVf1uzwttpBbiuozJYWzNLHioyDJ+k=
18+
github.com/aws/aws-sdk-go-v2 v1.19.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
19+
github.com/aws/aws-sdk-go-v2/config v1.18.28 h1:TINEaKyh1Td64tqFvn09iYpKiWjmHYrG1fa91q2gnqw=
20+
github.com/aws/aws-sdk-go-v2/config v1.18.28/go.mod h1:nIL+4/8JdAuNHEjn/gPEXqtnS02Q3NXB/9Z7o5xE4+A=
21+
github.com/aws/aws-sdk-go-v2/credentials v1.13.27 h1:dz0yr/yR1jweAnsCx+BmjerUILVPQ6FS5AwF/OyG1kA=
22+
github.com/aws/aws-sdk-go-v2/credentials v1.13.27/go.mod h1:syOqAek45ZXZp29HlnRS/BNgMIW6uiRmeuQsz4Qh2UE=
23+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.5 h1:kP3Me6Fy3vdi+9uHd7YLr6ewPxRL+PU6y15urfTaamU=
24+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.5/go.mod h1:Gj7tm95r+QsDoN2Fhuz/3npQvcZbkEf5mL70n3Xfluc=
25+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.35 h1:hMUCiE3Zi5AHrRNGf5j985u0WyqI6r2NULhUfo0N/No=
26+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.35/go.mod h1:ipR5PvpSPqIqL5Mi82BxLnfMkHVbmco8kUwO2xrCi0M=
27+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.29 h1:yOpYx+FTBdpk/g+sBU6Cb1H0U/TLEcYYp66mYqsPpcc=
28+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.29/go.mod h1:M/eUABlDbw2uVrdAn+UsI6M727qp2fxkp8K0ejcBDUY=
29+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.36 h1:8r5m1BoAWkn0TDC34lUculryf7nUF25EgIMdjvGCkgo=
30+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.36/go.mod h1:Rmw2M1hMVTwiUhjwMoIBFWFJMhvJbct06sSidxInkhY=
31+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.29 h1:IiDolu/eLmuB18DRZibj77n1hHQT7z12jnGO7Ze3pLc=
32+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.29/go.mod h1:fDbkK4o7fpPXWn8YAPmTieAMuB9mk/VgvW64uaUqxd4=
33+
github.com/aws/aws-sdk-go-v2/service/sso v1.12.13 h1:sWDv7cMITPcZ21QdreULwxOOAmE05JjEsT6fCDtDA9k=
34+
github.com/aws/aws-sdk-go-v2/service/sso v1.12.13/go.mod h1:DfX0sWuT46KpcqbMhJ9QWtxAIP1VozkDWf8VAkByjYY=
35+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.13 h1:BFubHS/xN5bjl818QaroN6mQdjneYQ+AOx44KNXlyH4=
36+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.13/go.mod h1:BzqsVVFduubEmzrVtUFQQIQdFqvUItF8XUq2EnS8Wog=
37+
github.com/aws/aws-sdk-go-v2/service/sts v1.19.3 h1:e5mnydVdCVWxP+5rPAGi2PYxC7u2OZgH1ypC114H04U=
38+
github.com/aws/aws-sdk-go-v2/service/sts v1.19.3/go.mod h1:yVGZA1CPkmUhBdA039jXNJJG7/6t+G+EBWmFq23xqnY=
39+
github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8=
40+
github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
1541
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
1642
github.com/bufbuild/protocompile v0.8.0 h1:9Kp1q6OkS9L4nM3FYbr8vlJnEwtbpDPQlQOVXfR+78s=
1743
github.com/bufbuild/protocompile v0.8.0/go.mod h1:+Etjg4guZoAqzVk2czwEQP12yaxLJ8DxuqCJ9qHdH94=
@@ -51,6 +77,7 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6
5177
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
5278
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
5379
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
80+
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
5481
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
5582
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
5683
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -86,6 +113,8 @@ github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZ
86113
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
87114
github.com/jhump/protoreflect v1.15.6 h1:WMYJbw2Wo+KOWwZFvgY0jMoVHM6i4XIvRs2RcBj5VmI=
88115
github.com/jhump/protoreflect v1.15.6/go.mod h1:jCHoyYQIJnaabEYnbGwyo9hUqfyUMTbJw/tAut5t97E=
116+
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
117+
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
89118
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
90119
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
91120
github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
@@ -254,6 +283,7 @@ google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh
254283
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
255284
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
256285
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
286+
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
257287
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
258288
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
259289
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=

0 commit comments

Comments
 (0)