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 只用于授权用户,不泄露给未授权人员。
