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