src/AWSCredentials.ps1
$CredentialsFilePath = Join-Path $env:DEVOPTOOLS_HOME aws_credentials function New-AWSCredential { [CmdletBinding()] param( [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string]$Username, [switch]$Recreate ) begin { if (-not (Test-Path $CredentialsFilePath)) { Write-Verbose "Creating new AWS credentials file at '$CredentialsFilePath'" New-Item $CredentialsFilePath -Force -ItemType File 1> $null } } process { if ($Recreate) { Write-Verbose "Recreating AWS credentials for user '$Username'" Remove-IAMCredential $Username } else { if (Test-AwsCredential $Username) { Write-Error "User '$Username' already has cached credentials. Pass -Recreate to recreate them" Get-Help New-AWSCredential -Parameter Recreate throw } Write-Verbose "Creating new AWS credentials for user '$Username'" } Write-AWSCredential $Username } } function Read-AWSCredential { [CmdletBinding()] [OutputType([hashtable])] param( [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string]$Username ) process { if (-not (Test-AWSCredential $Username)) { Write-Error "Crendentials not found for user '$Username'" throw } $accessKey = git config --file $CredentialsFilePath --get "$Username.accessKey" $secretKey = git config --file $CredentialsFilePath --get "$Username.secretKey" return @{ AccessKey = $accessKey SecretKey = $secretKey } } } function Remove-AWSCredential { [CmdletBinding()] param( [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [string]$Username ) process { Write-Verbose "Removing AWS credentials for user '$Username'" Remove-IAMCredential $Username git config --file $CredentialsFilePath --remove-section $Username } } function Write-AWSCredential { param( [Parameter(Mandatory)] [string]$Username ) $credentials = (aws iam create-access-key --user-name $Username --query 'AccessKey.[AccessKeyId, SecretAccessKey]' --output text) -split '\s+' git config --file $CredentialsFilePath "$Username.accessKey" $credentials[0] git config --file $CredentialsFilePath "$Username.secretKey" $credentials[1] } function Test-AWSCredential { [OutputType([bool])] param( [Parameter(Mandatory)] [string]$Username ) return [bool] (git config --get --file $CredentialsFilePath "$Username.accessKey") } function Remove-IAMCredential { param( [Parameter(Mandatory)] [string]$Username ) $accessKeys = (aws iam list-access-keys --user-name $Username --query 'AccessKeyMetadata[].AccessKeyId' --output text) -split '\s+' foreach ($accesKey in $accessKeys) { aws iam delete-access-key --access-key-id $accesKey --user-name $Username } } |