Skip to content

Commit 2b39bd7

Browse files
examples
1 parent 3d96720 commit 2b39bd7

File tree

3 files changed

+222
-0
lines changed

3 files changed

+222
-0
lines changed
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
8+
"github.com/aws/aws-database-encryption-sdk-dynamodb/awscryptographydbencryptionsdkdynamodbsmithygeneratedtypes"
9+
"github.com/aws/aws-database-encryption-sdk-dynamodb/awscryptographydbencryptionsdkstructuredencryptionsmithygeneratedtypes"
10+
"github.com/aws/aws-sdk-go-v2/aws"
11+
"github.com/aws/aws-sdk-go-v2/config"
12+
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
13+
"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
14+
"github.com/aws/aws-sdk-go-v2/service/kms"
15+
16+
mpl "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygenerated"
17+
mpltypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygeneratedtypes"
18+
dynamodbESDK "github.com/aws/aws-database-encryption-sdk-dynamodb"
19+
)
20+
21+
func main() {
22+
if err := putItemGetItem(); err != nil {
23+
log.Fatal(err)
24+
}
25+
}
26+
27+
func putItemGetItem() error {
28+
// Get configuration values from environment or test utils
29+
kmsKeyID := "arn:aws:kms:us-west-2:658956600833:key/b3537ef1-d8dc-4780-9f5a-55776cbb2f7f"
30+
ddbTableName := "DynamoDbEncryptionInterceptorTestTableCS"
31+
32+
// 1. Create a Keyring using AWS KMS
33+
cfg, err := config.LoadDefaultConfig(context.TODO())
34+
if err != nil {
35+
panic(err)
36+
}
37+
kmsClient := kms.NewFromConfig(cfg, func(o *kms.Options) {
38+
o.Region = "us-west-2"
39+
})
40+
// Step 2: Initialize the mpl client
41+
matProv, err := mpl.NewClient(mpltypes.MaterialProvidersConfig{})
42+
if err != nil {
43+
panic(err)
44+
}
45+
// Step 3: Create the keyring
46+
awsKmsKeyringInput := mpltypes.CreateAwsKmsKeyringInput{
47+
KmsClient: kmsClient,
48+
KmsKeyId: kmsKeyID,
49+
}
50+
keyring, err := matProv.CreateAwsKmsKeyring(context.Background(), awsKmsKeyringInput)
51+
if err != nil {
52+
panic(err)
53+
}
54+
55+
// 2. Configure attribute actions for encryption/signing
56+
attributeActions := map[string]awscryptographydbencryptionsdkstructuredencryptionsmithygeneratedtypes.CryptoAction{
57+
"partition_key": awscryptographydbencryptionsdkstructuredencryptionsmithygeneratedtypes.CryptoActionSignOnly, // Partition key must be SIGN_ONLY
58+
"sort_key": awscryptographydbencryptionsdkstructuredencryptionsmithygeneratedtypes.CryptoActionSignOnly, // Sort key must be SIGN_ONLY
59+
"attribute1": awscryptographydbencryptionsdkstructuredencryptionsmithygeneratedtypes.CryptoActionEncryptAndSign,
60+
"attribute2": awscryptographydbencryptionsdkstructuredencryptionsmithygeneratedtypes.CryptoActionSignOnly,
61+
":attribute3": awscryptographydbencryptionsdkstructuredencryptionsmithygeneratedtypes.CryptoActionDoNothing,
62+
}
63+
64+
// 3. Configure table encryption
65+
allowedUnsignedAttributePrefix := ":"
66+
sortKeyName := "sort_key"
67+
algorithmSuiteId := mpltypes.DBEAlgorithmSuiteIdAlgAes256GcmHkdfSha512CommitKeyEcdsaP384SymsigHmacSha384
68+
tableConfig := awscryptographydbencryptionsdkdynamodbsmithygeneratedtypes.DynamoDbTableEncryptionConfig{
69+
LogicalTableName: ddbTableName,
70+
PartitionKeyName: "partition_key",
71+
SortKeyName: &sortKeyName,
72+
AttributeActionsOnEncrypt: attributeActions,
73+
Keyring: keyring,
74+
AllowedUnsignedAttributePrefix: &allowedUnsignedAttributePrefix,
75+
AlgorithmSuiteId: &algorithmSuiteId,
76+
}
77+
78+
tableConfigsMap := make(map[string]awscryptographydbencryptionsdkdynamodbsmithygeneratedtypes.DynamoDbTableEncryptionConfig)
79+
tableConfigsMap[ddbTableName] = tableConfig
80+
listOfTableConfigs := awscryptographydbencryptionsdkdynamodbsmithygeneratedtypes.DynamoDbTablesEncryptionConfig{
81+
TableEncryptionConfigs: tableConfigsMap,
82+
}
83+
// 4. Create encrypted DynamoDB client
84+
dbEsdkMiddleware, err := dynamodbESDK.NewDbEsdkMiddleware(listOfTableConfigs)
85+
ddb := dynamodb.NewFromConfig(cfg, dbEsdkMiddleware.CreateMiddleware())
86+
87+
// 5. Put an encrypted item
88+
item := map[string]types.AttributeValue{
89+
"partition_key": &types.AttributeValueMemberS{Value: "BasicPutGetExample"},
90+
"sort_key": &types.AttributeValueMemberN{Value: "0"},
91+
"attribute1": &types.AttributeValueMemberS{Value: "encrypt and sign me!"},
92+
"attribute2": &types.AttributeValueMemberS{Value: "sign me!"},
93+
":attribute3": &types.AttributeValueMemberS{Value: "ignore me!"},
94+
}
95+
96+
putInput := &dynamodb.PutItemInput{
97+
TableName: aws.String(ddbTableName),
98+
Item: item,
99+
}
100+
101+
_, err = ddb.PutItem(context.TODO(), putInput)
102+
if err != nil {
103+
return err
104+
}
105+
106+
// 6. Get and decrypt the item
107+
key := map[string]types.AttributeValue{
108+
"partition_key": &types.AttributeValueMemberS{Value: "BasicPutGetExample"},
109+
"sort_key": &types.AttributeValueMemberN{Value: "0"},
110+
}
111+
112+
getInput := &dynamodb.GetItemInput{
113+
TableName: aws.String(ddbTableName),
114+
Key: key,
115+
ConsistentRead: aws.Bool(true),
116+
}
117+
118+
result, err := ddb.GetItem(context.TODO(), getInput)
119+
if err != nil {
120+
return err
121+
}
122+
// Verify the decrypted item
123+
if result.Item["attribute1"].(*types.AttributeValueMemberS).Value != "encrypt and sign me!" {
124+
return fmt.Errorf("unexpected value for attribute1")
125+
}
126+
fmt.Println(result.Item["attribute1"].(*types.AttributeValueMemberS).Value)
127+
return nil
128+
}

Examples/runtimes/go/go.mod

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
module examples
2+
3+
go 1.23.2
4+
5+
replace github.com/aws/aws-database-encryption-sdk-dynamodb => ../../../DynamoDbEncryption/runtimes/go/ImplementationFromDafny-go
6+
7+
replace github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl => ../../../submodules/MaterialProviders/AwsCryptographicMaterialProviders/runtimes/go/ImplementationFromDafny-go/
8+
9+
replace github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives => ../../../submodules/MaterialProviders/AwsCryptographyPrimitives/runtimes/go/ImplementationFromDafny-go/
10+
11+
replace github.com/aws/aws-cryptographic-material-providers-library/releases/go/dynamodb => ../../../submodules/MaterialProviders/ComAmazonawsDynamodb/runtimes/go/ImplementationFromDafny-go/
12+
13+
replace github.com/aws/aws-cryptographic-material-providers-library/releases/go/kms => ../../../submodules/MaterialProviders/ComAmazonawsKms/runtimes/go/ImplementationFromDafny-go/
14+
15+
require (
16+
github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl v0.0.0
17+
github.com/aws/aws-database-encryption-sdk-dynamodb v0.0.0
18+
github.com/aws/aws-sdk-go-v2 v1.32.8
19+
github.com/aws/aws-sdk-go-v2/config v1.28.10
20+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.39.2
21+
github.com/aws/aws-sdk-go-v2/service/kms v1.36.0
22+
)
23+
24+
require (
25+
github.com/aws/aws-cryptographic-material-providers-library/releases/go/dynamodb v0.1.0 // indirect
26+
github.com/aws/aws-cryptographic-material-providers-library/releases/go/kms v0.0.1 // indirect
27+
github.com/aws/aws-cryptographic-material-providers-library/releases/go/primitives v0.0.1 // indirect
28+
github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library v0.1.0 // indirect
29+
github.com/aws/aws-sdk-go-v2/credentials v1.17.51 // indirect
30+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.23 // indirect
31+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.27 // indirect
32+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.27 // indirect
33+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
34+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
35+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.8 // indirect
36+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.8 // indirect
37+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.9 // indirect
38+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.8 // indirect
39+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.6 // indirect
40+
github.com/aws/smithy-go v1.22.1 // indirect
41+
github.com/dafny-lang/DafnyRuntimeGo/v4 v4.9.2 // indirect
42+
github.com/google/uuid v1.6.0 // indirect
43+
github.com/jmespath/go-jmespath v0.4.0 // indirect
44+
)

Examples/runtimes/go/go.sum

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library v0.1.0 h1:Nw3zDK7jQ/ylj1isG91PdsEKdojIlI+iX3I43h6uj1I=
2+
github.com/aws/aws-cryptographic-material-providers-library/releases/go/smithy-dafny-standard-library v0.1.0/go.mod h1:m3mzHKiNiSC0LWeWX6ZAxSe6mKbJHgliux1Yu/sjCYI=
3+
github.com/aws/aws-sdk-go-v2 v1.32.8 h1:cZV+NUS/eGxKXMtmyhtYPJ7Z4YLoI/V8bkTdRZfYhGo=
4+
github.com/aws/aws-sdk-go-v2 v1.32.8/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
5+
github.com/aws/aws-sdk-go-v2/config v1.28.10 h1:fKODZHfqQu06pCzR69KJ3GuttraRJkhlC8g80RZ0Dfg=
6+
github.com/aws/aws-sdk-go-v2/config v1.28.10/go.mod h1:PvdxRYZ5Um9QMq9PQ0zHHNdtKK+he2NHtFCUFMXWXeg=
7+
github.com/aws/aws-sdk-go-v2/credentials v1.17.51 h1:F/9Sm6Y6k4LqDesZDPJCLxQGXNNHd/ZtJiWd0lCZKRk=
8+
github.com/aws/aws-sdk-go-v2/credentials v1.17.51/go.mod h1:TKbzCHm43AoPyA+iLGGcruXd4AFhF8tOmLex2R9jWNQ=
9+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.23 h1:IBAoD/1d8A8/1aA8g4MBVtTRHhXRiNAgwdbo/xRM2DI=
10+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.23/go.mod h1:vfENuCM7dofkgKpYzuzf1VT1UKkA/YL3qanfBn7HCaA=
11+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.27 h1:jSJjSBzw8VDIbWv+mmvBSP8ezsztMYJGH+eKqi9AmNs=
12+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.27/go.mod h1:/DAhLbFRgwhmvJdOfSm+WwikZrCuUJiA4WgJG0fTNSw=
13+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.27 h1:l+X4K77Dui85pIj5foXDhPlnqcNRG2QUyvca300lXh8=
14+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.27/go.mod h1:KvZXSFEXm6x84yE8qffKvT3x8J5clWnVFXphpohhzJ8=
15+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
16+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
17+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.39.2 h1:XcdIh35yg1J8bAiUOLtL/PoPMSGsD72Zanwmim8jEXc=
18+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.39.2/go.mod h1:516U/KQM3zdcahNBjHUZKGWNfNnIYyt7sxLeqOx78b0=
19+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
20+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
21+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.8 h1:h56mLNgpqWIL7RZOIQO634Xr569bXGTlIE83t/a0LSE=
22+
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.8/go.mod h1:kK04550Xx95KI0sNmwoB7ciS9QkRwt9TojhoTMXyJdo=
23+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.8 h1:cWno7lefSH6Pp+mSznagKCgfDGeZRin66UvYUqAkyeA=
24+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.8/go.mod h1:tPD+VjU3ABTBoEJ3nctu5Nyg4P4yjqSH5bJGGkY4+XE=
25+
github.com/aws/aws-sdk-go-v2/service/kms v1.36.0 h1:jwWMpQ/1obJRdHaix9k10zWSnSMZGdDTZIDiS5CGzq8=
26+
github.com/aws/aws-sdk-go-v2/service/kms v1.36.0/go.mod h1:OHmlX4+o0XIlJAQGAHPIy0N9yZcYS/vNG+T7geSNcFw=
27+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.9 h1:YqtxripbjWb2QLyzRK9pByfEDvgg95gpC2AyDq4hFE8=
28+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.9/go.mod h1:lV8iQpg6OLOfBnqbGMBKYjilBlf633qwHnBEiMSPoHY=
29+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.8 h1:6dBT1Lz8fK11m22R+AqfRsFn8320K0T5DTGxxOQBSMw=
30+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.8/go.mod h1:/kiBvRQXBc6xeJTYzhSdGvJ5vm1tjaDEjH+MSeRJnlY=
31+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.6 h1:VwhTrsTuVn52an4mXx29PqRzs2Dvu921NpGk7y43tAM=
32+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.6/go.mod h1:+8h7PZb3yY5ftmVLD7ocEoE98hdc8PoKS0H3wfx1dlc=
33+
github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
34+
github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
35+
github.com/dafny-lang/DafnyRuntimeGo/v4 v4.9.2 h1:g/xAj4F7Zt9wXJ6QjfbfocVi/ZYlAFpNddHCFyfzRDg=
36+
github.com/dafny-lang/DafnyRuntimeGo/v4 v4.9.2/go.mod h1:l2Tm4N2DKuq3ljONC2vOATeM9PUpXbIc8SgXdwwqEto=
37+
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
38+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
39+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
40+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
41+
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
42+
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
43+
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
44+
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
45+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
46+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
47+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
48+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
49+
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
50+
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

0 commit comments

Comments
 (0)