Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,21 @@ issues:
path-except: ^e/
text: "non-constant format string in call to github.com/gravitational/trace."
# lib/utils/aws/ subpackages are allowed to use AWS SDK constructors.
- path: lib/utils/aws/iamutils/iam.go
linters: [forbidigo]
text: 'iam.NewFromConfig'
- path: lib/utils/aws/iamutils/iam_v1.go
linters: [forbidigo]
text: 'iam.New'
- path: lib/utils/aws/stsutils/sts.go
linters: [forbidigo]
text: 'sts.NewFromConfig'
- path: lib/utils/aws/stsutils/sts_v1.go
linters: [forbidigo]
text: 'sts.New'
# TODO(codingllama): Remove once e/ is updated.
- path: e/lib/cloud/aws/aws.go
- path: lib/utils/aws/stsutils/stscreds_v1.go
linters: [forbidigo]
text: 'sts.NewFromConfig'
text: 'stscreds.NewCredentials'
exclude-use-default: true
max-same-issues: 0
max-issues-per-linter: 0
Expand Down Expand Up @@ -209,10 +214,17 @@ linters-settings:
- suite-thelper
forbidigo:
forbid:
# AWS SDK wrapped constructors.
- p: '^iam\.NewFromConfig$'
msg: 'Use iamutils.NewFromConfig'
- p: '^iam\.New$'
msg: 'Use iamutils.NewV1'
- p: '^sts\.NewFromConfig$'
msg: 'Use stsutils.NewFromConfig'
- p: '^sts\.New$'
msg: 'Use stsutils.NewV1'
- p: '^stscreds\.NewCredentials$'
msg: 'Use stsutils.NewCredentials'

run:
go: '1.23'
Expand Down
4 changes: 2 additions & 2 deletions lib/cloud/clients.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ import (
"github.com/aws/aws-sdk-go/service/eks/eksiface"
"github.com/aws/aws-sdk-go/service/elasticache"
"github.com/aws/aws-sdk-go/service/elasticache/elasticacheiface"
"github.com/aws/aws-sdk-go/service/iam"
"github.com/aws/aws-sdk-go/service/iam/iamiface"
"github.com/aws/aws-sdk-go/service/kms"
"github.com/aws/aws-sdk-go/service/kms/kmsiface"
Expand Down Expand Up @@ -81,6 +80,7 @@ import (
gcpimds "github.com/gravitational/teleport/lib/cloud/imds/gcp"
"github.com/gravitational/teleport/lib/modules"
"github.com/gravitational/teleport/lib/utils"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -585,7 +585,7 @@ func (c *cloudClients) GetAWSIAMClient(ctx context.Context, region string, opts
if err != nil {
return nil, trace.Wrap(err)
}
return iam.New(session), nil
return iamutils.NewV1(session), nil
}

// GetAWSS3Client returns AWS S3 client.
Expand Down
5 changes: 3 additions & 2 deletions lib/configurators/aws/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import (
"github.com/gravitational/teleport/lib/srv/db/secrets"
"github.com/gravitational/teleport/lib/utils"
awsutils "github.com/gravitational/teleport/lib/utils/aws"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -392,7 +393,7 @@ func (c *ConfiguratorConfig) CheckAndSetDefaults() error {
c.stsClient = stsutils.NewFromConfig(*c.awsCfg)
}
if c.iamClient == nil {
c.iamClient = iam.NewFromConfig(*c.awsCfg)
c.iamClient = iamutils.NewFromConfig(*c.awsCfg)
}
if c.Identity == nil {
c.Identity, err = awslib.GetIdentityWithClientV2(context.Background(), c.stsClient)
Expand Down Expand Up @@ -423,7 +424,7 @@ func (c *ConfiguratorConfig) CheckAndSetDefaults() error {
if c.Policies == nil {
partition := c.Identity.GetPartition()
accountID := c.Identity.GetAccountID()
iamClient := iam.NewFromConfig(*c.awsCfg)
iamClient := iamutils.NewFromConfig(*c.awsCfg)
c.Policies = awslib.NewPolicies(partition, accountID, iamClient)
}
}
Expand Down
3 changes: 2 additions & 1 deletion lib/integrations/awsoidc/access_graph_aws_sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
awslib "github.com/gravitational/teleport/lib/cloud/aws"
"github.com/gravitational/teleport/lib/cloud/provisioning"
"github.com/gravitational/teleport/lib/cloud/provisioning/awsactions"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -91,7 +92,7 @@ func NewAccessGraphIAMConfigureClient(ctx context.Context) (AccessGraphIAMConfig

return &defaultTAGIAMConfigureClient{
CallerIdentityGetter: stsutils.NewFromConfig(cfg),
Client: iam.NewFromConfig(cfg),
Client: iamutils.NewFromConfig(cfg),
}, nil
}

Expand Down
3 changes: 2 additions & 1 deletion lib/integrations/awsoidc/aws_app_access_iam_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
"github.com/gravitational/teleport/lib/cloud/provisioning"
"github.com/gravitational/teleport/lib/cloud/provisioning/awsactions"
"github.com/gravitational/teleport/lib/modules"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -108,7 +109,7 @@ func NewAWSAppAccessConfigureClient(ctx context.Context) (AWSAppAccessConfigureC
}

return &defaultAWSAppAccessConfigureClient{
Client: iam.NewFromConfig(cfg),
Client: iamutils.NewFromConfig(cfg),
CallerIdentityGetter: stsutils.NewFromConfig(cfg),
}, nil
}
Expand Down
3 changes: 2 additions & 1 deletion lib/integrations/awsoidc/deployservice_iam_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import (
"github.com/gravitational/teleport/lib/cloud/provisioning/awsactions"
"github.com/gravitational/teleport/lib/integrations/awsoidc/tags"
awslibutils "github.com/gravitational/teleport/lib/utils/aws"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -146,7 +147,7 @@ func NewDeployServiceIAMConfigureClient(ctx context.Context, region string) (Dep
}

return &defaultDeployServiceIAMConfigureClient{
Client: iam.NewFromConfig(cfg),
Client: iamutils.NewFromConfig(cfg),
CallerIdentityGetter: stsutils.NewFromConfig(cfg),
}, nil
}
Expand Down
3 changes: 2 additions & 1 deletion lib/integrations/awsoidc/ec2_ssm_iam_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
"github.com/gravitational/teleport/lib/cloud/provisioning"
"github.com/gravitational/teleport/lib/cloud/provisioning/awsactions"
"github.com/gravitational/teleport/lib/integrations/awsoidc/tags"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -143,7 +144,7 @@ func NewEC2SSMConfigureClient(ctx context.Context, region string) (EC2SSMConfigu
}

return &defaultEC2SSMConfigureClient{
Client: iam.NewFromConfig(cfg),
Client: iamutils.NewFromConfig(cfg),
ssmClient: ssm.NewFromConfig(cfg),
CallerIdentityGetter: stsutils.NewFromConfig(cfg),
}, nil
Expand Down
3 changes: 2 additions & 1 deletion lib/integrations/awsoidc/eice_iam_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
awslib "github.com/gravitational/teleport/lib/cloud/aws"
"github.com/gravitational/teleport/lib/cloud/provisioning"
"github.com/gravitational/teleport/lib/cloud/provisioning/awsactions"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -101,7 +102,7 @@ func NewEICEIAMConfigureClient(ctx context.Context, region string) (EICEIAMConfi

return &defaultEICEIAMConfigureClient{
CallerIdentityGetter: stsutils.NewFromConfig(cfg),
Client: iam.NewFromConfig(cfg),
Client: iamutils.NewFromConfig(cfg),
}, nil
}

Expand Down
3 changes: 2 additions & 1 deletion lib/integrations/awsoidc/eks_iam_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
awslib "github.com/gravitational/teleport/lib/cloud/aws"
"github.com/gravitational/teleport/lib/cloud/provisioning"
"github.com/gravitational/teleport/lib/cloud/provisioning/awsactions"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -100,7 +101,7 @@ func NewEKSIAMConfigureClient(ctx context.Context, region string) (EKSIAMConfigu
}

return &defaultEKSEIAMConfigureClient{
Client: iam.NewFromConfig(cfg),
Client: iamutils.NewFromConfig(cfg),
CallerIdentityGetter: stsutils.NewFromConfig(cfg),
}, nil
}
Expand Down
3 changes: 2 additions & 1 deletion lib/integrations/awsoidc/idp_iam_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"github.com/gravitational/teleport/lib/cloud/provisioning/awsactions"
"github.com/gravitational/teleport/lib/defaults"
"github.com/gravitational/teleport/lib/integrations/awsoidc/tags"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -155,7 +156,7 @@ func NewIdPIAMConfigureClient(ctx context.Context) (IdPIAMConfigureClient, error
return &defaultIdPIAMConfigureClient{
httpClient: httpClient,
awsConfig: cfg,
Client: iam.NewFromConfig(cfg),
Client: iamutils.NewFromConfig(cfg),
CallerIdentityGetter: stsutils.NewFromConfig(cfg),
}, nil
}
Expand Down
3 changes: 2 additions & 1 deletion lib/integrations/awsoidc/listdatabases_iam_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
awslib "github.com/gravitational/teleport/lib/cloud/aws"
"github.com/gravitational/teleport/lib/cloud/provisioning"
"github.com/gravitational/teleport/lib/cloud/provisioning/awsactions"
"github.com/gravitational/teleport/lib/utils/aws/iamutils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

Expand Down Expand Up @@ -92,7 +93,7 @@ func NewListDatabasesIAMConfigureClient(ctx context.Context, region string) (Lis
}

return &defaultListDatabasesIAMConfigureClient{
Client: iam.NewFromConfig(cfg),
Client: iamutils.NewFromConfig(cfg),
CallerIdentityGetter: stsutils.NewFromConfig(cfg),
}, nil
}
Expand Down
3 changes: 2 additions & 1 deletion lib/srv/app/cloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (
"github.com/gravitational/teleport/api/constants"
"github.com/gravitational/teleport/lib/tlsca"
awsutils "github.com/gravitational/teleport/lib/utils/aws"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

// Cloud provides cloud provider access related methods such as generating
Expand Down Expand Up @@ -208,7 +209,7 @@ func (c *cloud) getAWSSigninToken(ctx context.Context, req *AWSSigninRequest, en
creds.ExternalID = aws.String(req.ExternalID)
}
})
stsCredentials, err := stscreds.NewCredentials(session, req.Identity.RouteToApp.AWSRoleARN, options...).Get()
stsCredentials, err := stsutils.NewCredentialsV1(session, req.Identity.RouteToApp.AWSRoleARN, options...).Get()
if err != nil {
return "", trace.Wrap(err)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

package aws
package awsfips

import (
"os"
Expand All @@ -27,8 +27,8 @@ import (
// Either "yes" or a "truthy" value (as defined by [strconv.ParseBool]) are
// considered true.
//
// Prefer using specific functions, such as those in the
// lib/utils/aws/stsutils or lib/utils/aws/dynamodbutils packages.
// Prefer using specific functions, such as those in lib/utils/aws/*
// subpackages.
func IsFIPSDisabledByEnv() bool {
const envVar = "TELEPORT_UNSTABLE_DISABLE_AWS_FIPS"

Expand Down
3 changes: 2 additions & 1 deletion lib/utils/aws/credentials.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import (

"github.com/gravitational/teleport/lib/modules"
"github.com/gravitational/teleport/lib/utils"
"github.com/gravitational/teleport/lib/utils/aws/stsutils"
)

// GetCredentialsRequest is the request for obtaining STS credentials.
Expand Down Expand Up @@ -72,7 +73,7 @@ func NewCredentialsGetter() CredentialsGetter {
// Get obtains STS credentials.
func (g *credentialsGetter) Get(_ context.Context, request GetCredentialsRequest) (*credentials.Credentials, error) {
logrus.Debugf("Creating STS session %q for %q.", request.SessionName, request.RoleARN)
return stscreds.NewCredentials(request.Provider, request.RoleARN,
return stsutils.NewCredentialsV1(request.Provider, request.RoleARN,
func(cred *stscreds.AssumeRoleProvider) {
cred.RoleSessionName = MaybeHashRoleSessionName(request.SessionName)
cred.Expiry.SetExpiration(request.Expiry, 0)
Expand Down
6 changes: 3 additions & 3 deletions lib/utils/aws/dynamodbutils/dynamo.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ package dynamodbutils

import (
"github.com/gravitational/teleport/lib/modules"
awsutils "github.com/gravitational/teleport/lib/utils/aws"
"github.com/gravitational/teleport/lib/utils/aws/awsfips"
)

// IsFIPSEnabled returns true if FIPS should be enabled for DynamoDB.
// FIPS is enabled is the binary is boring ([modules.Modules.IsBoringBinary])
// and if FIPS is not disabled by the environment
// ([awsutils.IsFIPSDisabledByEnv]).
// ([awsfips.IsFIPSDisabledByEnv]).
func IsFIPSEnabled() bool {
return !awsutils.IsFIPSDisabledByEnv() && modules.GetModules().IsBoringBinary()
return !awsfips.IsFIPSDisabledByEnv() && modules.GetModules().IsBoringBinary()
}
38 changes: 38 additions & 0 deletions lib/utils/aws/iamutils/iam.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Teleport
// Copyright (C) 2025 Gravitational, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

package iamutils

import (
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/iam"

"github.com/gravitational/teleport/lib/utils/aws/awsfips"
)

// NewFromConfig wraps [iam.NewFromConfig] and applies FIPS settings
// according to environment variables.
//
// See [awsfips.IsFIPSDisabledByEnv].
func NewFromConfig(cfg aws.Config, optFns ...func(*iam.Options)) *iam.Client {
if awsfips.IsFIPSDisabledByEnv() {
// append so it overrides any preceding settings.
optFns = append(optFns, func(opts *iam.Options) {
opts.EndpointOptions.UseFIPSEndpoint = aws.FIPSEndpointStateDisabled
})
}
return iam.NewFromConfig(cfg, optFns...)
}
Loading