Skip to content

Commit b23e66a

Browse files
[SLS-2492] Upgrade aws sdk v2 (#113)
upgrade sdk
1 parent f41f4ee commit b23e66a

File tree

4 files changed

+66
-28
lines changed

4 files changed

+66
-28
lines changed

go.mod

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ go 1.17
55
require (
66
github.com/DataDog/datadog-go v4.8.3+incompatible
77
github.com/aws/aws-lambda-go v1.29.0
8-
github.com/aws/aws-sdk-go v1.43.37
8+
github.com/aws/aws-sdk-go-v2/config v1.17.1
9+
github.com/aws/aws-sdk-go-v2/service/kms v1.18.5
910
github.com/aws/aws-xray-sdk-go v1.6.0
1011
github.com/cenkalti/backoff v2.2.1+incompatible
1112
github.com/sony/gobreaker v0.5.0
@@ -20,6 +21,17 @@ require (
2021
github.com/DataDog/sketches-go v1.4.1 // indirect
2122
github.com/Microsoft/go-winio v0.5.2 // indirect
2223
github.com/andybalholm/brotli v1.0.4 // indirect
24+
github.com/aws/aws-sdk-go v1.43.37 // indirect
25+
github.com/aws/aws-sdk-go-v2 v1.16.11 // indirect
26+
github.com/aws/aws-sdk-go-v2/credentials v1.12.14 // indirect
27+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.12 // indirect
28+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.18 // indirect
29+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.12 // indirect
30+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.19 // indirect
31+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.12 // indirect
32+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.17 // indirect
33+
github.com/aws/aws-sdk-go-v2/service/sts v1.16.13 // indirect
34+
github.com/aws/smithy-go v1.12.1 // indirect
2335
github.com/cespare/xxhash/v2 v2.1.2 // indirect
2436
github.com/davecgh/go-spew v1.1.1 // indirect
2537
github.com/dgraph-io/ristretto v0.1.0 // indirect

go.sum

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,18 +94,42 @@ github.com/aws/aws-sdk-go v1.43.37 h1:kyZ7UjaPZaCik+asF33UFOOYSwr9liDRr/UM/vuw8y
9494
github.com/aws/aws-sdk-go v1.43.37/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
9595
github.com/aws/aws-sdk-go-v2 v1.0.0/go.mod h1:smfAbmpW+tcRVuNUjo3MOArSZmW72t62rkCzc2i0TWM=
9696
github.com/aws/aws-sdk-go-v2 v1.6.0/go.mod h1:tI4KhsR5VkzlUa2DZAdwx7wCAYGwkZZ1H31PYrBFx1w=
97+
github.com/aws/aws-sdk-go-v2 v1.16.11 h1:xM1ZPSvty3xVmdxiGr7ay/wlqv+MWhH0rMlyLdbC0YQ=
98+
github.com/aws/aws-sdk-go-v2 v1.16.11/go.mod h1:WTACcleLz6VZTp7fak4EO5b9Q4foxbn+8PIz3PmyKlo=
9799
github.com/aws/aws-sdk-go-v2/config v1.0.0/go.mod h1:WysE/OpUgE37tjtmtJd8GXgT8s1euilE5XtUkRNUQ1w=
100+
github.com/aws/aws-sdk-go-v2/config v1.17.1 h1:BWxTjokU/69BZ4DnLrZco6OvBDii6ToEdfBL/y5I1nA=
101+
github.com/aws/aws-sdk-go-v2/config v1.17.1/go.mod h1:uOxDHjBemNTF2Zos+fgG0NNfE86wn1OAHDTGxjMEYi0=
98102
github.com/aws/aws-sdk-go-v2/credentials v1.0.0/go.mod h1:/SvsiqBf509hG4Bddigr3NB12MIpfHhZapyBurJe8aY=
103+
github.com/aws/aws-sdk-go-v2/credentials v1.12.14 h1:AtVG/amkjbDBfnPr/tuW2IG18HGNznP6L12Dx0rLz+Q=
104+
github.com/aws/aws-sdk-go-v2/credentials v1.12.14/go.mod h1:opAndTyq+YN7IpVG57z2CeNuXSQMqTYxGGlYH0m0RMY=
99105
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.0/go.mod h1:wpMHDCXvOXZxGCRSidyepa8uJHY4vaBGfY2/+oKU/Bc=
106+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.12 h1:wgJBHO58Pc1V1QAnzdVM3JK3WbE/6eUF0JxCZ+/izz0=
107+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.12/go.mod h1:aZ4vZnyUuxedC7eD4JyEHpGnCz+O2sHQEx3VvAwklSE=
108+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.18 h1:OmiwoVyLKEqqD5GvB683dbSqxiOfvx4U2lDZhG2Esc4=
109+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.18/go.mod h1:348MLhzV1GSlZSMusdwQpXKbhD7X2gbI/TxwAPKkYZQ=
110+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.12 h1:5mvQDtNWtI6H56+E4LUnLWEmATMB7oEh+Z9RurtIuC0=
111+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.12/go.mod h1:ckaCVTEdGAxO6KwTGzgskxR1xM+iJW4lxMyDFVda2Fc=
112+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.19 h1:g5qq9sgtEzt2szMaDqQO6fqKe026T6dHTFJp5NsPzkQ=
113+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.19/go.mod h1:cVHo8KTuHjShb9V8/VjH3S/8+xPu16qx8fdGwmotJhE=
100114
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.0/go.mod h1:3jExOmpbjgPnz2FJaMOfbSk1heTkZ66aD3yNtVhnjvI=
115+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.12 h1:7iPTTX4SAI2U2VOogD7/gmHlsgnYSgoNHt7MSQXtG2M=
116+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.12/go.mod h1:1TODGhheLWjpQWSuhYuAUWYTCKwEjx2iblIFKDHjeTc=
117+
github.com/aws/aws-sdk-go-v2/service/kms v1.18.5 h1:bgIax/BQB8/U8qXavwKFOPzbnSAAQjPQ5hDM4FwN2gA=
118+
github.com/aws/aws-sdk-go-v2/service/kms v1.18.5/go.mod h1:WG8HUJKtDqXJM3+CNZeN+2wvdcJb5vprKo01fr1KQW4=
101119
github.com/aws/aws-sdk-go-v2/service/route53 v1.6.2/go.mod h1:ZnAMilx42P7DgIrdjlWCkNIGSBLzeyk6T31uB8oGTwY=
102120
github.com/aws/aws-sdk-go-v2/service/sqs v1.0.0/go.mod h1:w5BclCU8ptTbagzXS/fHBr+vAyXUjggg/72qDIURKMk=
121+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.17 h1:pXxu9u2z1UqSbjO9YA8kmFJBhFc1EVTDaf7A+S+Ivq8=
122+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.17/go.mod h1:mS5xqLZc/6kc06IpXn5vRxdLaED+jEuaSRv5BxtnsiY=
103123
github.com/aws/aws-sdk-go-v2/service/sts v1.0.0/go.mod h1:5f+cELGATgill5Pu3/vK3Ebuigstc+qYEHW5MvGWZO4=
124+
github.com/aws/aws-sdk-go-v2/service/sts v1.16.13 h1:dl8T0PJlN92rvEGOEUiD0+YPYdPEaCZK0TqHukvSfII=
125+
github.com/aws/aws-sdk-go-v2/service/sts v1.16.13/go.mod h1:Ru3QVMLygVs/07UQ3YDur1AQZZp2tUNje8wfloFttC0=
104126
github.com/aws/aws-xray-sdk-go v1.6.0 h1:w4dPTvHZtbQg3dQFTRTu4TIunlfJCRGKdmGYZkcEJwI=
105127
github.com/aws/aws-xray-sdk-go v1.6.0/go.mod h1:k+NuTgdU+z07L3l8lnGHK+/luqe8TKmZJNpQAoVfLeY=
106128
github.com/aws/smithy-go v1.0.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw=
107129
github.com/aws/smithy-go v1.4.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
108130
github.com/aws/smithy-go v1.11.0/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM=
131+
github.com/aws/smithy-go v1.12.1 h1:yQRC55aXN/y1W10HgwHle01DRuV9Dpf31iGkotjt3Ag=
132+
github.com/aws/smithy-go v1.12.1/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
109133
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
110134
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
111135
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
@@ -277,8 +301,9 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
277301
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
278302
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
279303
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
280-
github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
281304
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
305+
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
306+
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
282307
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
283308
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
284309
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=

internal/metrics/kms_decrypter.go

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
package metrics
99

1010
import (
11+
"context"
1112
"encoding/base64"
1213
"fmt"
1314
"os"
1415

1516
"github.com/DataDog/datadog-lambda-go/internal/logger"
16-
"github.com/aws/aws-sdk-go/aws/session"
17-
"github.com/aws/aws-sdk-go/service/kms"
18-
"github.com/aws/aws-sdk-go/service/kms/kmsiface"
17+
"github.com/aws/aws-sdk-go-v2/config"
18+
"github.com/aws/aws-sdk-go-v2/service/kms"
1919
)
2020

2121
type (
@@ -25,25 +25,29 @@ type (
2525
}
2626

2727
kmsDecrypter struct {
28-
kmsClient *kms.KMS
28+
kmsClient *kms.Client
29+
}
30+
31+
clientDecrypter interface {
32+
Decrypt(context.Context, *kms.DecryptInput, ...func(*kms.Options)) (*kms.DecryptOutput, error)
2933
}
3034
)
3135

3236
// functionNameEnvVar is the environment variable that stores the Lambda function name
33-
const functionNameEnvVar = "AWS_LAMBDA_FUNCTION_NAME"
37+
const functionNameEnvVar string = "AWS_LAMBDA_FUNCTION_NAME"
3438

3539
// encryptionContextKey is the key added to the encryption context by the Lambda console UI
36-
const encryptionContextKey = "LambdaFunctionName"
40+
const encryptionContextKey string = "LambdaFunctionName"
3741

3842
// MakeKMSDecrypter creates a new decrypter which uses the AWS KMS service to decrypt variables
3943
func MakeKMSDecrypter() Decrypter {
40-
sess, err := session.NewSession(nil)
44+
cfg, err := config.LoadDefaultConfig(context.Background())
4145
if err != nil {
42-
logger.Error(fmt.Errorf("could not create a new aws-sdk session: %v", err))
46+
logger.Error(fmt.Errorf("could not create a new aws config: %v", err))
4347
panic(err)
4448
}
4549
return &kmsDecrypter{
46-
kmsClient: kms.New(sess),
50+
kmsClient: kms.NewFromConfig(cfg),
4751
}
4852
}
4953

@@ -53,7 +57,7 @@ func (kd *kmsDecrypter) Decrypt(ciphertext string) (string, error) {
5357

5458
// decryptKMS decodes and deciphers the base64-encoded ciphertext given as a parameter using KMS.
5559
// For this to work properly, the Lambda function must have the appropriate IAM permissions.
56-
func decryptKMS(kmsClient kmsiface.KMSAPI, ciphertext string) (string, error) {
60+
func decryptKMS(kmsClient clientDecrypter, ciphertext string) (string, error) {
5761
decodedBytes, err := base64.StdEncoding.DecodeString(ciphertext)
5862
if err != nil {
5963
return "", fmt.Errorf("failed to encode cipher text to base64: %v", err)
@@ -68,18 +72,19 @@ func decryptKMS(kmsClient kmsiface.KMSAPI, ciphertext string) (string, error) {
6872
params := &kms.DecryptInput{
6973
CiphertextBlob: decodedBytes,
7074
}
71-
response, err := kmsClient.Decrypt(params)
75+
ctx := context.Background()
76+
response, err := kmsClient.Decrypt(ctx, params)
7277

7378
if err != nil {
7479
logger.Debug("Failed to decrypt ciphertext without encryption context, retrying with encryption context")
7580
// Try with encryption context, in case API key was encrypted using the AWS Console
7681
params = &kms.DecryptInput{
7782
CiphertextBlob: decodedBytes,
78-
EncryptionContext: map[string]*string{
79-
encryptionContextKey: &functionName,
83+
EncryptionContext: map[string]string{
84+
encryptionContextKey: functionName,
8085
},
8186
}
82-
response, err = kmsClient.Decrypt(params)
87+
response, err = kmsClient.Decrypt(ctx, params)
8388
if err != nil {
8489
return "", fmt.Errorf("failed to decrypt ciphertext with kms: %v", err)
8590
}

internal/metrics/kms_decrypter_test.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ package metrics
77

88
import (
99
"bytes"
10+
"context"
1011
"errors"
1112
"os"
1213
"testing"
1314

14-
"github.com/aws/aws-sdk-go/service/kms"
15-
"github.com/aws/aws-sdk-go/service/kms/kmsiface"
15+
"github.com/aws/aws-sdk-go-v2/service/kms"
1616
"github.com/stretchr/testify/assert"
1717
)
1818

@@ -28,16 +28,14 @@ const expectedDecryptedAPIKey = "1111111111111111"
2828
// mockFunctionName represents the name of the current function
2929
var mockFunctionName = "my-Function"
3030

31-
type mockKMSClientWithEncryptionContext struct {
32-
kmsiface.KMSAPI
33-
}
31+
type mockKMSClientWithEncryptionContext struct{}
3432

35-
func (mockKMSClientWithEncryptionContext) Decrypt(params *kms.DecryptInput) (*kms.DecryptOutput, error) {
33+
func (mockKMSClientWithEncryptionContext) Decrypt(_ context.Context, params *kms.DecryptInput, _ ...func(*kms.Options)) (*kms.DecryptOutput, error) {
3634
encryptionContextPointer, exists := params.EncryptionContext[encryptionContextKey]
3735
if !exists {
3836
return nil, errors.New("InvalidCiphertextException")
3937
}
40-
if *encryptionContextPointer != mockFunctionName {
38+
if encryptionContextPointer != mockFunctionName {
4139
return nil, errors.New("InvalidCiphertextException")
4240
}
4341
if bytes.Equal(params.CiphertextBlob, []byte(mockDecodedEncryptedAPIKey)) {
@@ -48,12 +46,10 @@ func (mockKMSClientWithEncryptionContext) Decrypt(params *kms.DecryptInput) (*km
4846
return nil, errors.New("KMS error")
4947
}
5048

51-
type mockKMSClientNoEncryptionContext struct {
52-
kmsiface.KMSAPI
53-
}
49+
type mockKMSClientNoEncryptionContext struct{}
5450

55-
func (mockKMSClientNoEncryptionContext) Decrypt(params *kms.DecryptInput) (*kms.DecryptOutput, error) {
56-
if params.EncryptionContext[encryptionContextKey] != nil {
51+
func (mockKMSClientNoEncryptionContext) Decrypt(_ context.Context, params *kms.DecryptInput, _ ...func(*kms.Options)) (*kms.DecryptOutput, error) {
52+
if params.EncryptionContext[encryptionContextKey] != "" {
5753
return nil, errors.New("InvalidCiphertextException")
5854
}
5955
if bytes.Equal(params.CiphertextBlob, []byte(mockDecodedEncryptedAPIKey)) {

0 commit comments

Comments
 (0)