在AWS(亚马逊云服务)中,AK、SK和Session Token是三种核心的身份验证凭证,它们共同构成了AWS资源访问的安全基石。下面我将从严谨的技术定义和通俗易懂的类比两个层面,为大家详细讲解。
一、严谨的技术定义与关系
根据AWS的官方设计与实践,这三者可以定义如下:
AK (Access Key ID)
定义:AK,全称Access Key ID,是AWS分配给一个IAM用户或角色的唯一标识符,用于在程序化访问(如API调用、CLI命令)中标识“你是谁”。它类似于一个用户名。
格式:通常以
AKIA开头的一串字符,例如AKIAIOSFODNN7EXAMPLE。性质:它可以部分公开,但不应主动泄露。
SK (Secret Access Key)
定义:SK,全称Secret Access Key,是与AK配对的机密密钥。它是实际用于对API请求进行加密签名的“密码”
。客户端使用SK对请求内容生成一个数字签名(Signature),以证明请求的完整性和来源真实性。
格式:一串很长的、复杂的字符串,例如
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY。性质:必须绝对保密。一旦泄露,他人可能完全控制该凭证所关联的AWS资源,造成数据泄露、资源破坏或产生巨额账单
。AWS仅在创建时显示一次,不会保存。
Session Token
定义:Session Token,在AWS上下文中特指通过安全令牌服务(STS)获取的临时安全凭证的一部分。它用于验证一组临时AK/SK的有效性。
产生场景:当通过STS服务扮演(Assume)一个IAM角色,或获取临时凭证时,返回的凭证集中会包含一组新的临时AK、SK和一个Session Token。
作用:这组临时凭证(AK+SK+Token)必须作为一个整体使用。Session Token证明了这组临时凭证是经过STS授权颁发的,且仍在有效期内。单独使用临时的AK/SK而不提供Token,请求会被拒绝。
三者关系总结(针对临时凭证):在临时安全凭证的场景下,AK用于标识身份,SK用于对请求签名,而Session Token则是这组临时凭证合法有效的“票据”或“证明”。它们三者必须一同提供才能完成认证。
二、通俗易懂的类比
为了帮助你更好地理解,我们可以用几个生活中的场景来类比:
长期AK/SK(办公室门禁卡)
AK 就像是门禁卡上的工号,一眼就能看到是谁的卡。
SK 就像是门禁卡内部的加密芯片,刷卡时门禁系统通过读取芯片信息来验证卡的真伪和权限。
这套凭证是长期有效的,由公司直接颁发给员工(IAM用户)。
临时AK/SK + Session Token(访客通行证)
想象一位访客要进入大楼。他需要在前台(STS服务)登记。
前台会根据他的访问目的,给他颁发一张临时访客卡(这包含了临时的AK和SK)。
同时,前台还会给他一张带有时间和访问区域限制的纸条,这就是 Session Token。
访客在楼内通行时,必须同时出示访客卡和纸条。保安(AWS服务)会检查卡的有效性,并核对纸条上的时间(是否过期)和区域(是否有权进入当前区域)。
一旦纸条上的时间到期,或者访客离开了大楼,这套临时凭证就失效了,安全性更高。
三、核心区别与使用场景
四、技术实现示例
在代码中,使用这三者进行认证的方式如下(以Python boto3为例):
import boto3
# 使用长期AK/SK
session = boto3.Session(
aws_access_key_id='你的AK',
aws_secret_access_key='你的SK',
region_name='us-east-1'
)
# 使用临时AK/SK和Session Token
session = boto3.Session(
aws_access_key_id='临时AK',
aws_secret_access_key='临时SK',
region_name='us-east-1',
aws_session_token='你的SessionToken' # 关键区别:多了Token
)
client = session.client('s3')
# ... 后续API调用
正如示例所示,Session Token是通过 aws_session_token 参数传递的,这是使用临时凭证和长期凭证在代码配置上的关键区别。
总结:AWS的AK和SK是程序访问云资源的“用户名和密码”,而Session Token是临时安全凭证体系的“有效期票据”。理解它们的区别,尤其是用短期、带Token的临时凭证替代长期AK/SK,是构建安全、合规的AWS应用架构的重要一步。