What’s AWS STS and how it works?

Table of Contents

AWS STS 是什么?

AWS Security Token Service (STS) 是一项服务,用于为用户或应用程序提供 临时的安全凭证,这些凭证可以用来访问 AWS 服务和资源。
临时凭证是短时有效的动态凭据,具有与普通 IAM 用户凭证相同的权限,但安全性更高。


AWS STS 的用途

  1. 临时访问 AWS 资源:

    • 提供短期凭证,用于访问特定的 AWS 服务或资源。
    • 减少长期存储凭证的风险。
  2. 跨账户访问:

    • 在多个 AWS 账户间授权用户或应用程序访问资源。
  3. 移动和企业应用支持:

    • 为移动设备或企业应用提供临时访问,而不需要暴露长期密钥。
  4. 提升安全性:

    • 凭证动态生成,自动过期,防止长期凭证泄漏后的安全威胁。

AWS STS 的工作原理

1. 请求临时凭证

  • 应用程序或用户通过 STS API(如 AssumeRoleGetSessionToken)发起请求。
  • STS 服务验证请求者的身份及权限后,生成一组临时凭证。

2. 临时凭证的组成

临时凭证包含以下内容:

  • Access Key ID: 用于身份验证。
  • Secret Access Key: 用于对请求进行签名。
  • Session Token: 用于标识该凭证为临时凭证。

3. 临时凭证的权限

  • 权限由:
    • 角色的策略临时会话的附加策略 决定。
    • 请求者的信任策略限制。

4. 使用临时凭证访问资源

  • 应用程序使用临时凭证(Access KeySecret KeySession Token)访问 AWS 服务。
  • AWS 验证这些凭证是否有效并允许相应的操作。

5. 凭证过期

  • 临时凭证有固定的有效期(通常为 15 分钟到 12 小时)。
  • 到期后,凭证失效,必须重新获取。

AWS STS 的核心 API

  1. AssumeRole

    • 用于假设一个 IAM 角色,生成具有该角色权限的临时凭证。
    • 典型场景:
      • 跨账户访问。
      • 服务之间的授权。
  2. GetSessionToken

    • 用于为已认证的 IAM 用户生成临时凭证。
    • 典型场景:
      • 为 MFA 认证用户提供临时访问。
  3. AssumeRoleWithSAML

    • 用于通过 SAML 认证获取临时凭证。
    • 典型场景:
      • 与企业身份提供商(如 Active Directory)集成。
  4. AssumeRoleWithWebIdentity

    • 用于通过 Web 身份(如 Amazon Cognito、Facebook、Google)生成临时凭证。
    • 典型场景:
      • 支持移动和 Web 应用程序的访问。
  5. 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 的优势

  1. 动态凭证提升安全性:

    • 临时凭证自动过期,降低长期凭证泄露的风险。
  2. 跨账户无缝访问:

    • 简化多账户架构的资源共享。
  3. 支持多种身份集成:

    • 与 SAML、Cognito 和第三方身份提供商无缝集成。
  4. 灵活授权:

    • 使用基于角色的访问控制(RBAC)实现最小权限管理。

总结

AWS STS 是一种强大的临时凭证服务,为 AWS 资源访问提供动态、安全的身份验证。无论是跨账户访问、移动应用授权,还是企业身份整合,STS 都能帮助用户灵活而安全地管理 AWS 权限。

Comments |0|

Legend *) Required fields are marked
**) You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Category: 似水流年