diff --git a/cmd/osbuild-upload-aws/main.go b/cmd/osbuild-upload-aws/main.go index 572895baa..cdb6d2838 100644 --- a/cmd/osbuild-upload-aws/main.go +++ b/cmd/osbuild-upload-aws/main.go @@ -5,12 +5,14 @@ import ( "fmt" "github.com/aws/aws-sdk-go/aws" + "github.com/osbuild/osbuild-composer/internal/upload/awsupload" ) func main() { var accessKeyID string var secretAccessKey string + var sessionToken string var region string var bucketName string var keyName string @@ -20,6 +22,7 @@ func main() { var arch string flag.StringVar(&accessKeyID, "access-key-id", "", "access key ID") flag.StringVar(&secretAccessKey, "secret-access-key", "", "secret access key") + flag.StringVar(&sessionToken, "session-token", "", "session token") flag.StringVar(®ion, "region", "", "target region") flag.StringVar(&bucketName, "bucket", "", "target S3 bucket name") flag.StringVar(&keyName, "key", "", "target S3 key name") @@ -29,7 +32,7 @@ func main() { flag.StringVar(&arch, "arch", "", "arch (x86_64 or aarch64)") flag.Parse() - a, err := awsupload.New(region, accessKeyID, secretAccessKey) + a, err := awsupload.New(region, accessKeyID, secretAccessKey, sessionToken) if err != nil { println(err.Error()) return diff --git a/cmd/osbuild-worker/jobimpl-osbuild.go b/cmd/osbuild-worker/jobimpl-osbuild.go index a9b1e4c00..975b04359 100644 --- a/cmd/osbuild-worker/jobimpl-osbuild.go +++ b/cmd/osbuild-worker/jobimpl-osbuild.go @@ -208,7 +208,7 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error { osbuildJobResult.Success = true osbuildJobResult.UploadStatus = "success" case *target.AWSTargetOptions: - a, err := awsupload.New(options.Region, options.AccessKeyID, options.SecretAccessKey) + a, err := awsupload.New(options.Region, options.AccessKeyID, options.SecretAccessKey, "") if err != nil { appendTargetError(osbuildJobResult, err) return nil @@ -244,7 +244,7 @@ func (impl *OSBuildJobImpl) Run(job worker.Job) error { osbuildJobResult.Success = true osbuildJobResult.UploadStatus = "success" case *target.AWSS3TargetOptions: - a, err := awsupload.New(options.Region, options.AccessKeyID, options.SecretAccessKey) + a, err := awsupload.New(options.Region, options.AccessKeyID, options.SecretAccessKey, "") if err != nil { appendTargetError(osbuildJobResult, err) return nil diff --git a/internal/boot/aws.go b/internal/boot/aws.go index 540c9c942..c685fefae 100644 --- a/internal/boot/aws.go +++ b/internal/boot/aws.go @@ -13,6 +13,7 @@ import ( "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ec2" + "github.com/osbuild/osbuild-composer/internal/common" "github.com/osbuild/osbuild-composer/internal/upload/awsupload" ) @@ -89,7 +90,7 @@ func wrapErrorf(innerError error, format string, a ...interface{}) error { // The s3 key is never returned - the same thing is done in osbuild-composer, // the user has no way of getting the s3 key. func UploadImageToAWS(c *awsCredentials, imagePath string, imageName string) error { - uploader, err := awsupload.New(c.Region, c.AccessKeyId, c.SecretAccessKey) + uploader, err := awsupload.New(c.Region, c.AccessKeyId, c.SecretAccessKey, "") if err != nil { return fmt.Errorf("cannot create aws uploader: %v", err) } diff --git a/internal/upload/awsupload/awsupload.go b/internal/upload/awsupload/awsupload.go index ba2e7efa8..abdc06bad 100644 --- a/internal/upload/awsupload/awsupload.go +++ b/internal/upload/awsupload/awsupload.go @@ -21,9 +21,9 @@ type AWS struct { s3 *s3.S3 } -func New(region, accessKeyID, accessKey string) (*AWS, error) { +func New(region, accessKeyID, accessKey, sessionToken string) (*AWS, error) { // Session credentials - creds := credentials.NewStaticCredentials(accessKeyID, accessKey, "") + creds := credentials.NewStaticCredentials(accessKeyID, accessKey, sessionToken) // Create a Session with a custom region sess, err := session.NewSession(&aws.Config{