6

Я хочу предоставить временные учетные данные существующим пользователям, чтобы они могли получить доступ к Консоли управления AWS, предоставив им URL-адрес, созданный с помощью этих временных полномочия.Выдача временных учетных данных для входа в AWS Management Console с использованием AssumeRole, существующих политик и уникального URL-адреса

Я следую вместе с письменным примером, приведенным через AWS Документация: Example Code Using IAM Query APIs

Я написал следующий код, который не дает каких-либо ошибок при выполнении, и, похоже, возвращает маркер сеанса, который должен позволить я тогда правильно сформировать URL для входа

Вот код для возврата сеанса маркера, а затем URL:.

$accessKeyId = 'accesskeyId' 
$secretAccessKey = 'secretaccessKey' 
$region = 'us-east-1' 

Set-AWSCredentials -AccessKey $accessKeyId -SecretKey $secretAccessKey 

$role = Use-STSRole -RoleSessionName "testSTS" -RoleArn "arn:aws:iam::1234567890:role/adminAccess" -DurationInSeconds 900 

$jsonSession = @" 
{ 
    "sessionId": $([string]::Format("{0}", $role.Credentials.AccessKeyId)), 
    "sessionKey": $([string]::Format("{0}", $role.Credentials.SecretAccessKey)), 
    "sessionToken": $([string]::Format("{0}", $role.Credentials.SessionToken)) 
} 
"@ 

Add-Type -AssemblyName System.Web 
$Encode = [System.Web.HttpUtility]::UrlEncode($jsonSession) 

$url = $([string]::Format("https://signin.aws.amazon.com/federation?Action=getSigninToken&Session={0}", $Encode)) 

$payload = Invoke-WebRequest -Uri $url | ConvertFrom-Json 

$issuer = [System.Web.HttpUtility]::UrlEncode("https://1234567890.signin.aws.amazon.com") 
$destination = [System.Web.HttpUtility]::UrlEncode("https://console.aws.amazon.com") 
$signintoken = [System.Web.HttpUtility]::UrlEncode($payload.SigninToken) 

$signInUrl = $([string]::Format("https://signin.aws.amazon.com/federation?Action=login&Issuer={0}&Destination={1}&SigninToken={2}", $issuer, $destination, $signintoken)) 

write-host $signInUrl 

к сожалению, когда я посещаю URL в веб-браузере я получаю followi ng error "Amazon Web Services Войти: учетные данные в вашей ссылке для входа были недействительными. Пожалуйста, обратитесь к администратору «

Это то, что URL вернулся ко мне выглядит, очевидно, я изменил AccountID и реальный маркер сеанса по соображениям безопасности:.

https://signin.aws.amazon.com/federation?Action=login&Issuer=https%3a%2f%2f1234567890.signin.aws.amazon.com&Destination=https%3a%2f%2fconsole.aws.amazon.com&SigninToken=ygQQrk4MYJyX1k30Obmj8p3Clax5OaUzQbjIBQH-ADCYP5QHNj2rsBz4ATlHrHqIJlzoAqyPrd_5OC4fo-BNHGKJkfasfkjz4C4hZnfYH-VmmcHIY8Fan0m38SnxwCome8DZHLe-_8igsGmCWKKTAVen_lp5wA0mUuGIgg9TqPIlb5SNPOVY00oc3dEGZnahcBlOJAmN7DWuv3P61EVipF5w2eoSGIdCyPkhZ2vvFD8orN_UJ4nLogkTAf5rvme1cavj6sqmRUS8iOTyEj8a5mLrmWww__p_J3z4aN4U_qEr3SIi9tCmQMCPB6ktaN_-dMIvJMrx23C11KjCyqixHnFxn60MOBH22bmY-6OFOucA

Дополнительно учетные данные и sessiontoken, переданные мне, работают при их использовании для выдачи команды API, как показано в приведенном ниже коде:

$accessKeyId = 'accesskeyId' 
$secretAccessKey = 'secretAccessKey' 
$region = 'us-east-1' 

Set-AWSCredentials -AccessKey $accessKeyId -SecretKey $secretAccessKey 

$role = Use-STSRole -RoleSessionName "testSTS" -RoleArn "arn:aws:iam::1234567890:role/adminAccess" -DurationInSeconds 900 

$newAccessKeyId = $role.Credentials.AccessKeyId 
$newSecretKey = $role.Credentials.SecretAccessKey 
$newSessionToken = $role.Credentials.SessionToken 

Set-AWSCredentials -AccessKey $newAccessKeyId -SecretKey $newSecretKey -SessionToken $newSessionToken 

$secgroups = Get-EC2SecurityGroup 

Обновлено: Я попытался удалить параметр «issuer», как предложено в статье, как указано ниже. Я также попытался добавить «SessionType» в исходный url для запроса sessiontoken, и URL-адрес signin все еще не с той же ошибкой.

+0

Вы можете посмотреть на этом AWS форуме сообщение: https://forums.aws.amazon.com/thread.jspa?messageID=475106 –

+0

Спасибо за ответ .. Эта статья для федеративных лексем , и я ищу использование AssumeRole. Однако он упомянул, что параметр «issuer» является необязательным, и он также имеет параметр «SessionType» для исходного запроса маркера сеанса. Я попробовал оба из них, и он по-прежнему терпел неудачу с той же ошибкой. знак равно –

ответ

2

Я нашел ответ, и, к сожалению, он не оказался чем-то интересным!

Похоже, что код нарушения был в той части, которая создает строку сеанса JSON, которую вы используете для обмена на токен входа.

Мне не хватало двойных кавычек «» для пары значений ключа.

Вот обновленная часть этого кода для всех, кто пытается заставить это работать!

$jsonSession = @" 
{"sessionId": $([string]::Format('"{0}"', $role.Credentials.AccessKeyId)), 
"sessionKey": $([string]::Format('"{0}"', $role.Credentials.SecretAccessKey)), 
"sessionToken": $([string]::Format('"{0}"', $role.Credentials.SessionToken))} 
"@