gpt4 book ai didi

powershell - 使用 AssumeRole、现有策略和唯一 URL 颁发临时凭证以登录 AWS 管理控制台

转载 作者:行者123 更新时间:2023-12-04 12:46:23 25 4
gpt4 key购买 nike

我想向现有用户颁发临时凭证,允许他们访问 AWS 管理控制台,方法是向他们提供使用这些临时凭证创建的 URL。
我正在关注通过 AWS 文档给出的书面示例:Example Code Using IAM Query APIs
我编写了以下代码,它在执行时不会出现任何错误,并且似乎确实返回了一个 session token ,这应该允许我正确地形成一个 URL 来登录。
这是返回 session token 和随后的 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
不幸的是,当我在 Web 浏览器中访问该 url 时,我收到以下错误“Amazon Web Services 登录:您登录链接中的凭据无效。请联系您的管理员。”
这是返回给我的 url 的样子,显然我出于安全原因更改了 accountid 和真实 session token :

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
更新:
我尝试删除“发行者”参数,因为下面建议的文章将其列为可选。我还尝试将“SessionType”添加到原始 url 以请求 sessiontoken,但登录 url 仍然失败并出现相同的错误。

最佳答案

我找到了答案,不幸的是,结果并没有令人兴奋!

似乎有问题的代码位于创建用于交换登录 token 的 JSON session 字符串的部分。

我缺少键值对的双引号“”。

这是该代码的更新部分,供其他任何试图使其工作的人使用!

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

关于powershell - 使用 AssumeRole、现有策略和唯一 URL 颁发临时凭证以登录 AWS 管理控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37260538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com