小编sub*_*ule的帖子

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

我想向现有用户发布临时凭证,以允许他们访问AWS管理控制台,方法是为他们提供使用这些临时凭证创建的URL.

我正在关注通过AWS文档给出的书面示例:使用IAM查询API的示例代码

我编写了以下代码,在执行时不会出现任何错误,并且似乎返回会话令牌,这样我就可以正确地形成一个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
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我在网络浏览器中访问网址时,我收到以下错误"亚马逊网络服务登录:您的登录链接中的凭据无效.请与您的管理员联系."

这是我回复给我的网址的样子,显然我出于安全原因更改了accountid和real会话令牌:

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- …

powershell amazon-web-services amazon-iam aws-powershell

7
推荐指数
1
解决办法
568
查看次数

尝试使用AWS控制台和EC2 Run Command for Windows时未找到任何实例

我正在尝试使用Amazon EC2 Run Command功能,基本上它说它找不到任何实例.

我阅读了所有文档,并按照我在这个相对较新的功能上找到的所有步骤进行操作,但我无法让它在我的生活中工作.

这是信息:

我转到"EC2 - >命令 - >命令历史 - >运行命令"我单击"AWS-RunShellScript"命令文档的单选框我单击"选择实例"下拉按钮,并显示"未找到实例这个地区"如下图1所示.

我点击"我的实例在哪里?" 超链接,它带我到AWS文档显示在这里:" SSM运行命令疑难解答 "

第一个疑难解答建议是确保满足先决条件,并提供此处显示的另一个超链接:" SSM Run Command Prerequisites "

先决条件:

  1. 支持的操作系统 - Windows 2012 R2 - 检查
  2. 最新代理版本 - 3.17.1032 - 检查(如图2所示)
  3. 访问SSM运行命令 - 分配EC2实例角色和IAM用户角色 - 检查(如图3和图4所示)
  4. Internet访问 - 出站Internet访问 - 检查

我遵循AWS文档为EC2运行命令访问创建了Amazon EC2实例角色,并创建了具有正确运行命令访问权限的IAM用户.此处显示了文档:委派对SSM Run Command的访问权限

我使用本地计算机上的Amazon CLI运行以下命令,如故障排除文档中所示:

aws ssm describe-instance-information --instance-information-filter-list key=InstanceIds,valueSet=instance-ID
Run Code Online (Sandbox Code Playgroud)

该命令不返回任何信息:

{"InstanceInformationList":[]}

更新1:

我确实在以下地方发现了以下错误和警告,并且花了最后两个小时尝试进行故障排除.我安装并重新安装了Ec2Config服务.我检查了所有的Ec2Config文件.我检查了169.254地址,并且存在元数据和动态数据,并且看起来是正确的.不知道还有什么可以尝试.

C:\ Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog - 错误/警告

2016-06-22T23:44:12.663Z:警告:无法发布到WMI.| System.Management.Instrumentation.WmiProviderInstallationException:抛出了类型'System.Management.Instrumentation.WMIInfraException'的异常.at System.Management.Instrumentation.InstrumentationManager.Publish(Object value)2016-06-22T23:44:16.263Z:无法获取实例元数据http://169.254.169.254/latest/user-data异常远程服务器返回了未找到错误404.2016-06-22T23:44:16.263Z:无法获取元数据/用户数据远程服务器返回错误:(404)未找到.

Windows事件查看器错误

2016-06-22 23:46:59,758 [_Worker-2] ERROR [aws:getDocument] - …

amazon-ec2 amazon-web-services

5
推荐指数
1
解决办法
6597
查看次数