AWS PowerShell
AWS Tools🔗
Install AWS.Tools🔗
Going forward, use AWS.Tools modules for newer development. It's much faster to import and definitely a better development experience in alignment with .NET SDK namespace approach.
Use their installer module to simplify versioning and avoid conflicts with automatic cleanup of prior SDK versions.
install-module 'AWS.Tools.Installer' -Scope CurrentUser
$modules = @(
'AWS.Tools.Common'
'AWS.Tools.CostExplorer'
'AWS.Tools.EC2'
'AWS.Tools.Installer'
'AWS.Tools.RDS'
'AWS.Tools.S3'
'AWS.Tools.SecretsManager'
'AWS.Tools.SecurityToken'
'AWS.Tools.SimpleSystemsManagement'
)
Install-AWSToolsModule $modules -Cleanup -Force
Using Systems Manager Parameters (SSM) To Create A PSCredential🔗
$script:SqlLoginName = (Get-SSMParameterValue -Name $SSMParamLogin -WithDecryption $true).Parameters[0].Value
$script:SqlPassword = (Get-SSMParameterValue -Name $SSMParamPassword -WithDecryption $true).Parameters[0].Value | ConvertTo-SecureString -AsPlainText -Force
$script:SqlCredential = [pscredential]::new($script:SqlLoginName, $script:SqlPassword)
Using AWS Secrets Manager To Create a PSCredential🔗
Note that this can vary in how you read it based on the format.
The normal format for entries like databases seems to be: {"username":"password"}
or similar.
Generate a Temporary Key🔗
Useful for needing to generate some time sensitive access credentials when connected via SSM Session and needing to access another account's resources.
Import-Module aws.tools.common, aws.tools.SecurityToken
Set-AWSCredential -ProfileName 'ProfileName' -scope Global
$cred = Get-STSSessionToken -DurationInSeconds ([timespan]::FromHours(8).TotalSeconds)
@"
`$ENV:AWS_ACCESS_KEY_ID = '$($cred.AccessKeyId)'
`$ENV:AWS_SECRET_ACCESS_KEY = '$($cred.SecretAccessKey)'
`$ENV:AWS_SESSION_TOKEN = '$($cred.SessionToken)'
"@
Install SSM Agent Manually🔗
This is based on the AWS install commands, but with a few enhancements to better work on older Windows servers.
# https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-win.html
$ProgressPreference = 'SilentlyContinue'
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Write-Host "Downloading installer"
$InstallerFile = Join-Path $env:USERPROFILE 'Downloads\SSMAgent_latest.exe'
$invokeWebRequestSplat = @{
Uri = 'https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/windows_amd64/AmazonSSMAgentSetup.exe'
OutFile = $InstallerFile
}
Invoke-WebRequest @invokeWebRequestSplat
Write-Host "Installing SSM Agent"
$startProcessSplat = @{
FilePath = $InstallerFile
ArgumentList = '/S'
}
Start-Process @startProcessSplat
Write-Host "Cleaning up ssmagent download"
Remove-Item $InstallerFile -Force
Restart-Service AmazonSSMAgent