Skip to content

Commit

Permalink
Improve patching of AWS credentials
Browse files Browse the repository at this point in the history
  • Loading branch information
mnapoli committed Jul 30, 2024
1 parent 75035b0 commit 06b9665
Showing 1 changed file with 46 additions and 4 deletions.
50 changes: 46 additions & 4 deletions src/BrefServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,7 @@ public function register()
Config::set('view.compiled', StorageDirectories::Path . '/framework/views');
Config::set('cache.stores.file.path', StorageDirectories::Path . '/framework/cache');

Config::set('cache.stores.dynamodb.token', env('AWS_SESSION_TOKEN'));
Config::set('filesystems.disks.s3.token', env('AWS_SESSION_TOKEN'));
Config::set('queue.connections.sqs.token', env('AWS_SESSION_TOKEN'));
Config::set('services.ses.token', env('AWS_SESSION_TOKEN'));
$this->fixAwsCredentialsConfig();

$this->app->when(QueueHandler::class)
->needs('$connection')
Expand Down Expand Up @@ -149,4 +146,49 @@ protected function fixDefaultConfiguration()
Config::set('logging.default', 'stderr');
}
}

private function fixAwsCredentialsConfig(): void
{
$accessKeyId = $_SERVER['AWS_ACCESS_KEY_ID'] ?? null;
$sessionToken = $_SERVER['AWS_SESSION_TOKEN'] ?? null;
// If we are not in a Lambda environment, we don't need to do anything
if (!$accessKeyId || ! $sessionToken) {
return;
}

// Patch SQS config
foreach (Config::get('queue.connections') as $name => $connection) {
if ($connection['driver'] !== 'sqs') continue;

// If a different key is in the config than in the environment variables
if ($connection['key'] && $connection['key'] !== $accessKeyId) continue;

Config::set("queue.connections.$name.token", $sessionToken);
}

// Patch S3 config
foreach (Config::get('filesystems.disks') as $name => $disk) {
if ($disk['driver'] !== 's3') continue;

// If a different key is in the config than in the environment variables
if ($disk['key'] && $disk['key'] !== $accessKeyId) continue;

Config::set("filesystems.disks.$name.token", $sessionToken);
}

// Patch DynamoDB config
foreach (Config::get('cache.stores') as $name => $store) {
if ($store['driver'] !== 'dynamodb') continue;

// If a different key is in the config than in the environment variables
if ($store['key'] && $store['key'] !== $accessKeyId) continue;

Config::set("cache.stores.$name.token", $sessionToken);
}

// Patch SES config
if (Config::get('services.ses.key') === $accessKeyId) {
Config::set('services.ses.token', $sessionToken);
}
}
}

0 comments on commit 06b9665

Please sign in to comment.