AWSMFAProfile.psm1
function Set-AWSMFAProfile { <# .SYNOPSIS Performs AWS STS authentication with MFA token for cross account. .DESCRIPTION The Set-AWSMFAProfile updates the local AWS crendential for cross account by using the STS. .PARAMETER ParentProfile Specifies the central/master account that login to the AWS. Set the Default profile with Access key/Secret key or set desired profile name and ensure that the desired profile name is provided when using the ParentProfile parameter. .PARAMETER DeviceARN Specifies the MFA device ARN. The ARN is located in IAM > My security credentials > Assigned MFA device. .PARAMETER SessionName Specifies the name when calling the STS authentication API. .PARAMETER StoreAs Specifies the target AWS account to assume as cross account. .PARAMETER RoleARN Specifies the assumed role ARN which has authorize to the target AWS account. .PARAMETER MFAToken Specifies the one-time 6 digits code generated by the MFA device/authenticator. .PARAMETER Duration Specifies the expiration time in seconds where the STS token can last. Default is 4 hours but can be set longer duration depends on the IAM policy. .INPUTS None. You cannot pipe objects to Set-AWSMFAProfile.ps1. .OUTPUTS Set-AWSMFAProfile.ps1 output if the authentication is successed. .EXAMPLE PS> Set-AWSCredential -AccessKey <YOURACCESSKEY> -SecretKey <YOURSECRETKEY> PS> Set-AWSMFAProfile -DeviceARN "arn:aws:iam::123456789123:mfa/johndoe@contoso.com" -SessionName "john" -StoreAs "NorthWindTraders" -RoleARN "arn:aws:iam::9876543219876:role/CrossAccountRole" -MFAToken 123456 PS> Get-EC2Instance -ProfileName "NorthWindTraders" -Region "ap-southeast-2" 1. The defualt credential is defined. 2. Cross account access to "NorthWindTraders (9876543219876)" with "CrossAccountRole" assumed role and stored under "NorthWindTraders" profile name. 3. Retrieve EC2 instances from "NorthWindTraders" account. .EXAMPLE PS> Set-AWSCredential -AccessKey <YOURACCESSKEY> -SecretKey <YOURSECRETKEY> -StoreAs "Contoso" PS> Set-AWSMFAProfile -DeviceARN "arn:aws:iam::123456789123:mfa/johndoe@contoso.com" -SessionName "john" -StoreAs "NorthWindTraders" -RoleARN "arn:aws:iam::9876543219876:role/CrossAccountRole" -ParentProfile "Contoso" -Duration 25200 -MFAToken 123456 PS> Get-EC2Instance -ProfileName "NorthWindTraders" -Region "ap-southeast-2" 1. Set "Contoso" profile name as parent/master account which used to login to AWS. 2. Cross account access to "NorthWindTraders (9876543219876)" with "CrossAccountRole" assumed role and stored under "NorthWindTraders" profile name by using "Contoso" as parent/master profile where the session is expired after 7 hours. 3. Retrieve EC2 instances from "NorthWindTraders" account. #> [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Medium')] param ( [Parameter(Mandatory = $True)] [string]$DeviceARN, [Parameter(Mandatory = $True)] [string]$SessionName, [Parameter(Mandatory = $True)] [string]$StoreAs, [Parameter(Mandatory = $True)] [string]$RoleARN, [Parameter(Mandatory = $True)] [int]$MFAToken, $ParentProfile = "default", [int]$Duration = 14400, [boolean]$Force = $false ) begin { try { Import-Module -Name "AWSPowerShell" -ErrorAction SilentlyContinue Import-Module -Name "AWS.Tools.Common" -ErrorAction SilentlyContinue Import-Module -Name "AWS.Tools.SecurityToken" -ErrorAction SilentlyContinue Get-Command -Name Use-STSRole | Out-Null Get-Command -Name Set-AWSCredential | Out-Null } catch { Write-Error $PSItem.ToString() break } } process { try { $STSCred = Use-STSRole ` -SerialNumber $DeviceARN ` -RoleArn $RoleARN ` -RoleSessionName $SessionName ` -DurationInSeconds $Duration ` -ProfileName $ParentProfile ` -TokenCode $MFAToken Write-Output "Temporary session token for '$StoreAs'is generated successfully." Set-AWSCredential ` -StoreAs $StoreAs ` -AccessKey $STSCred.Credentials.AccessKeyId ` -SecretKey $STSCred.Credentials.SecretAccessKey ` -SessionToken $STSCred.Credentials.SessionToken Write-Output "Profile '$StoreAs' is successfully updated in local AWS Credential." } catch { Write-Error $PSItem.ToString() break } } end { } }] Export-ModuleMember -Function Set-AWSMFAProfile |