What’s AWS STS and how it works?
Table of Contents
AWS STS 是什么?
AWS Security Token Service (STS) 是一项服务,用于为用户或应用程序提供 临时的安全凭证,这些凭证可以用来访问 AWS 服务和资源。
临时凭证是短时有效的动态凭据,具有与普通 IAM 用户凭证相同的权限,但安全性更高。
AWS STS 的用途
-
临时访问 AWS 资源:
- 提供短期凭证,用于访问特定的 AWS 服务或资源。
- 减少长期存储凭证的风险。
-
跨账户访问:
- 在多个 AWS 账户间授权用户或应用程序访问资源。
-
移动和企业应用支持:
- 为移动设备或企业应用提供临时访问,而不需要暴露长期密钥。
-
提升安全性:
- 凭证动态生成,自动过期,防止长期凭证泄漏后的安全威胁。
AWS STS 的工作原理
1. 请求临时凭证
- 应用程序或用户通过 STS API(如
AssumeRole
或GetSessionToken
)发起请求。 - STS 服务验证请求者的身份及权限后,生成一组临时凭证。
2. 临时凭证的组成
临时凭证包含以下内容:
- Access Key ID: 用于身份验证。
- Secret Access Key: 用于对请求进行签名。
- Session Token: 用于标识该凭证为临时凭证。
3. 临时凭证的权限
- 权限由:
- 角色的策略 或 临时会话的附加策略 决定。
- 请求者的信任策略限制。
4. 使用临时凭证访问资源
- 应用程序使用临时凭证(
Access Key
、Secret Key
和Session Token
)访问 AWS 服务。 - AWS 验证这些凭证是否有效并允许相应的操作。
5. 凭证过期
- 临时凭证有固定的有效期(通常为 15 分钟到 12 小时)。
- 到期后,凭证失效,必须重新获取。
AWS STS 的核心 API
-
AssumeRole
- 用于假设一个 IAM 角色,生成具有该角色权限的临时凭证。
- 典型场景:
- 跨账户访问。
- 服务之间的授权。
-
GetSessionToken
- 用于为已认证的 IAM 用户生成临时凭证。
- 典型场景:
- 为 MFA 认证用户提供临时访问。
-
AssumeRoleWithSAML
- 用于通过 SAML 认证获取临时凭证。
- 典型场景:
- 与企业身份提供商(如 Active Directory)集成。
-
AssumeRoleWithWebIdentity
- 用于通过 Web 身份(如 Amazon Cognito、Facebook、Google)生成临时凭证。
- 典型场景:
- 支持移动和 Web 应用程序的访问。
-
DecodeAuthorizationMessage
- 用于解码 AWS API 调用中的授权消息。
AWS STS 的使用场景
1. 跨账户访问
- 场景: 在账户 A 中的应用程序需要访问账户 B 中的 S3 存储桶。
- 解决方案:
- 在账户 B 中创建一个 IAM 角色,并授予访问 S3 的权限。
- 允许账户 A 假设该角色。
- 应用程序通过
AssumeRole
请求临时凭证,访问账户 B 的资源。
2. 动态授权移动应用
- 场景: 移动应用需要访问特定的 AWS 服务,但无法安全存储长期凭证。
- 解决方案:
- 使用 Amazon Cognito 验证用户身份。
- Cognito 使用
AssumeRoleWithWebIdentity
获取临时凭证。 - 移动应用通过这些临时凭证访问 AWS 服务。
3. 企业身份整合
- 场景: 企业用户需要通过单点登录(SSO)访问 AWS 资源。
- 解决方案:
- 配置 SAML 身份提供商(如 Active Directory)。
- 使用
AssumeRoleWithSAML
获取临时凭证。
示例:使用 STS 假设角色
1. 创建角色
- 在账户 B 中创建一个角色(
AssumeRoleRole
)。 - 信任策略允许账户 A 假设该角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_A_ID:root" }, "Action": "sts:AssumeRole" } ] }
2. 调用 AssumeRole
账户 A 中的应用程序调用 STS 的 AssumeRole
API:
aws sts assume-role \
--role-arn "arn:aws:iam::ACCOUNT_B_ID:role/AssumeRoleRole" \
--role-session-name "ExampleSession"
返回的临时凭证:
{
"Credentials": {
"AccessKeyId": "AKIA...",
"SecretAccessKey": "SECRET...",
"SessionToken": "TOKEN...",
"Expiration": "2025-01-06T12:00:00Z"
}
}
3. 使用临时凭证
在账户 A 中使用这些临时凭证访问账户 B 的资源:
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=SECRET...
AWS_SESSION_TOKEN=TOKEN...
aws s3 ls s3://example-bucket
AWS STS 的优势
-
动态凭证提升安全性:
- 临时凭证自动过期,降低长期凭证泄露的风险。
-
跨账户无缝访问:
- 简化多账户架构的资源共享。
-
支持多种身份集成:
- 与 SAML、Cognito 和第三方身份提供商无缝集成。
-
灵活授权:
- 使用基于角色的访问控制(RBAC)实现最小权限管理。
总结
AWS STS 是一种强大的临时凭证服务,为 AWS 资源访问提供动态、安全的身份验证。无论是跨账户访问、移动应用授权,还是企业身份整合,STS 都能帮助用户灵活而安全地管理 AWS 权限。
Comments |0|
Category: 似水流年