Powershell: Accessing AWS s3 buckets using temporary credentials
<p>I want to create temporary credentials first and then assuming role for that user. Using that temporary credentials, I want to access s3 buckets to perform some operations on them. But when I try to access buckets using temporary accessKey and secretKey, its throwing execption like AWS access Key Id does not exist in our records. 
Please help me to resolve.</p>

<p>P.S : I am new to powershell( using v2.0).</p>

<pre><code>param([String]$profile , [string]$mfaVal)

function Get-IniContent ($filePath)
{
    $ini = @{}
    switch -regex -file $FilePath
    { 
    “^\[(.+)\]” # Section
        {
            $section = $matches[1]
            $ini[$section] = @{}
            $CommentCount = 0
        }
    “^(;.*)$” # Comment
        {
            $value = $matches[1]
            $CommentCount = $CommentCount + 1
            $name = “Comment” + $CommentCount
       # $ini[$section][$name] = $value
        } 
    “(.+?)\s*=(.*)” # Key
        {
            $name,$value = $matches[1..2]
            $ini[$section][$name] = $value
        }
    }
    return $ini
}

Add-Type -Path "C:\Program Files (x86)\AWS SDK for .NET\past-releases\Version-1\AWSSDK.dll"

Write-Host $psboundparameters.count

if ($psboundparameters.count -lt 2){
    echo "\r\nWrong parameter values. Please see the usage below. \n\r
    Usage: Get_s3_bucket_objects.ps1 [profile name (test | preprod | prod)] [MFA code]\r\n\r\n";
    exit;
}

$ini = Get-IniContent “C:\Users\Desktop\config.ini”

$bucket = $ini[$profile]["bucketName"]
$accountID = $ini[$profile]["accountID"]
$encKey = $ini[$profile]["encKey"]
$userName =$ini[$profile]["userName"]
$secretKey =$ini[$profile]["secret"]
$accessKey =$ini[$profile]["key"]

Set-AWSCredentials -AccessKey AAHSAI2ER4FDQ -SecretKey BaxkYl9eR/0X9SJTmIy/sajdfgav -StoreAs TestProfile

Initialize-AWSDefaults -ProfileName TestProfile -Region us-east-1

$mfa = "arn:aws:iam::$accountID:mfa/testUser"
$roleArn = "arn:aws:iam::$accountID:role/download-for-signing"
$sessionName = "session_name"

$role = Use-STSRole -RoleArn $roleArn -RoleSessionName $sessionName -DurationInSeconds 900 -ExternalId testUser -SerialNumber $mfa -TokenCode $mfaVal -StoredCredentials TestProfile

$tempAccessKey = $role.Credentials.AccessKeyId
$tempSecretKey = $role.Credentials.SecretAccessKey

$client=[Amazon.AWSClientFactory]::CreateAmazonS3Client($tempAccessKey,$tempSecretKey)
$client.ListBuckets()

Clear-AWSCredentials -StoredCredentials TestProfile
</code></pre>

<p>Getting Exception like:</p>

<pre><code>"Exception calling "ListBuckets" with "0" argument(s): "The AWS Access Key Id you provided does not exist in our records." At C:\Users\Desktop\Get_s3_bucket_objects.ps1:91 char:20 + $client.ListBuckets &lt;&lt;&lt;&lt; ()
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
</code></pre>