"aws_security_token" 有什么用

What is the "aws_security_token" used for

我想在 AWS S3 中使用预签名的 URLs。我注意到预签名 URL 包括 aws_access_key_idaws_security_token.

根据我的理解,aws_security_token 是 URL 的一部分,因为我使用的是临时安全凭证,它是正确签署 URL 所必需的。

但是给 URL 可以让前端客户端下载图像吗? aws_security_token 是 URL 的一部分(未加密)。我担心安全问题,无法弄清楚令牌的用途。以及攻击者可以用我的 aws_access_key_idaws_security_token.

做什么

是的,aws_access_key_id 和 aws_security_token(如果存在)被认为是安全的。

为了能够造成任何伤害,攻击者理论上需要根据请求参数和签名对第三个组件(aws 访问密钥秘密)进行逆向工程,以便他们可以为备用生成有效的备用签名要求。

如果可能的话,攻击者随后可以执行临时凭据有权执行的任何操作——但是——这将涉及对多轮 HMAC-SHA-256 进行逆向工程,并且在计算上被认为不可行。

此外,当使用临时凭证时(您会在此处看到 aws_security_token),无论如何,凭证仅在短时间内有效——因此即使逆向工程可行,它也会必须在不切实际的短时间内完成。

安全令牌本身——大概是——是一个签名和加密的消息,描述了临时访问密钥 ID 和秘密附带的权限,促进了 AWS 内基于令牌的授权决策的分散。不管它的实际内容(似乎没有记录在案),如果没有随附的临时访问密钥 ID 和秘密,它就不是独立有用的——而且秘密没有在签名的 URL 中公开,并且可以'如上所述,不可能进行逆向工程。临时的access key id和secret,反之,没有token也没用。

In 2014 Amazon switchedAWS_SECURITY_TOKENAWS_SESSION_TOKEN,你也应该喜欢后者。许多项目仍然设置或检查两者,但已经 5 年了。我想我们可以放手了。

aws sts assume-role 命令 returns SessionToken 所以,我只在我编写的代码中支持它。

以下是使用 aws cli 的示例:

function mfa_serial(){
    aws configure get --profile= mfa_serial
}

function role_arn(){
    aws configure get --profile= role_arn
}

function assrole(){
    aws sts assume-role                         \
        --role-arn          "$(role_arn   )"  \
        --serial-number     "$(mfa_serial )"  \
        --token-code        "$(mfa)"            \
        --role-session-name "$( ( id -un; date +-%Y-%m-%d+%H.%M.%S ) | tr -d '\n' )"
}

assrole development

这是输出:

{
    "AssumedRoleUser": {
        "AssumedRoleId": "AROAIWL33TL33TL33TL33:brunobronosky",
        "Arn": "arn:aws:sts::485548554855:assumed-role/allow-full-access-from-other-accounts/brunobronosky"
    },
    "Credentials": {
        "SecretAccessKey": "L33TL33TL33TL33TL33TL33TL33TL33TL33TL33T",
        "SessionToken": "L33TL33TL33TEI///////////L33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33Tm9/TL33TL33TL33TL33T/TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33Tz9/TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TS/TL33TL33TL33TL33TL33TL33TL33TL33TL33T/TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33TL33Tos/TL33TL33TL33TL33TL33TL33TL33T/A==",
        "Expiration": "2019-11-01T00:00:00Z",
        "AccessKeyId": "ASIAL33TL33TL33TL33T"
    }
}