如何通过 AssumeRole 访问 AWS 的 Web 控制台

joseph · · 20 次点击 · · 开始浏览    

AWS 的临时权限可以通过 AssumeRole 访问控制台,但需要经过一些配置和操作。以下是如何使用 AssumeRole 通过 SessionToken 访问 AWS 的管理控制台。 以下步骤,包括了生成临时凭证 SessionToken,并通过这个凭证生成可访问 AWS Web控制台的登录 URL。完整的流程如下。

一. 创建并配置 IAM 角色

创建目标角色(RoleA)

• 创建一个 IAM 角色,为其分配所需的权限策略(如 AdministratorAccess 或自定义策略)。

• 配置信任关系,使特定用户或角色可以 Assume 该角色。例如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/UserA"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

二. 获取临时凭证

• 使用 AWS CLI 或 SDK 调用 sts:AssumeRole 获取临时凭证:

 aws sts assume-role \
    --role-arn "arn:aws:iam::123456789012:role/RoleA" \
    --role-session-name "MySession"

返回的结果样例如下:

{
    "Credentials": {
        "AccessKeyId": "ASIA...",
        "SecretAccessKey": "wJal...",
        "SessionToken": "IQoJ..."
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "AROAI...",
        "Arn": "arn:aws:sts::123456789012:assumed-role/RoleA/MySession"
    }
}

三. 生成控制台登录 URL

要使用临时凭证访问 AWS 控制台,必须生成一个带有 SigninToken 的登录 URL。

1. 创建凭证 JSON 文件

创建一个 JSON 文件保存临时凭证内容,例如 temp-credentials.json:

{
    "sessionId": "ASIA...",
    "sessionKey": "wJal...",
    "sessionToken": "IQoJ..."
}

2. 请求 SigninToken

使用 AWS 提供的登录 URL API 请求 SigninToken:

curl "https://signin.aws.amazon.com/federation?Action=getSigninToken&Session=$(cat temp-credentials.json)"

返回结果:

{
    "SigninToken": "FQoG..."
}

3. 生成登录 URL

使用获取的 SigninToken 生成控制台登录 URL:

https://signin.aws.amazon.com/federation?Action=login&SigninToken=FQoG...&Destination=https://console.aws.amazon.com/&Issuer=MyApp

Destination:控制台的目标页面,例如 https://console.aws.amazon.com/。

Issuer:可以自定义,指明是谁生成的这个 URL。

4. 访问控制台

将生成的 URL 粘贴到浏览器中即可登录 AWS 管理控制台。

以下脚本自动完成从 AssumeRole 到生成控制台登录 URL 的流程:

#!/bin/bash

# 设置角色 ARN 和会话名称
ROLE_ARN="arn:aws:iam::123456789012:role/RoleA"
SESSION_NAME="MySession"

# 获取临时凭证
ASSUME_ROLE_OUTPUT=$(aws sts assume-role --role-arn "$ROLE_ARN" --role-session-name "$SESSION_NAME")
ACCESS_KEY=$(echo $ASSUME_ROLE_OUTPUT | jq -r '.Credentials.AccessKeyId')
SECRET_KEY=$(echo $ASSUME_ROLE_OUTPUT | jq -r '.Credentials.SecretAccessKey')
SESSION_TOKEN=$(echo $ASSUME_ROLE_OUTPUT | jq -r '.Credentials.SessionToken')

# 创建 JSON 文件
SESSION_JSON=$(cat <<EOF
{
    "sessionId": "$ACCESS_KEY",
    "sessionKey": "$SECRET_KEY",
    "sessionToken": "$SESSION_TOKEN"
}
EOF
)

# 获取 SigninToken
SIGNIN_TOKEN=$(curl -s "https://signin.aws.amazon.com/federation?Action=getSigninToken&Session=$(echo $SESSION_JSON | jq -s -R -r @uri)" | jq -r '.SigninToken')

# 生成登录 URL
LOGIN_URL="https://signin.aws.amazon.com/federation?Action=login&SigninToken=$SIGNIN_TOKEN&Destination=https://console.aws.amazon.com/&Issuer=MyApp"

# 输出登录 URL
echo "Login URL: $LOGIN_URL"

注意事项

1. 临时凭证有效期:临时凭证的有效期为 15 分钟到 12 小时(取决于角色配置)。

2. 权限限制:确保目标角色具有访问 AWS 控制台所需的权限。

3. 安全性:确保临时凭证和生成的登录 URL 只用于授权用户,不泄露给未授权人员。

关注本站微信公众号(和以上内容无关)InfraPub ,扫码关注:InfraPub

20 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传