2

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

据我了解,这aws_security_token是 URL 的一部分,因为我使用的是临时安全凭证,并且需要正确签署 URL。

但是提供 URL 是否可以让我们说前端客户端下载图像?这aws_security_token是 URL 的一部分(未加密)。我担心安全性,我无法弄清楚令牌的用途是什么。以及攻击者可以用我aws_access_key_id的和aws_security_token.

4

2 回答 2

4

2014 年亚马逊AWS_SECURITY_TOKENAWS_SESSION_TOKEN,你也应该支持后者。许多项目仍然要么设置要么检查两者,但已经5年了。我想我们可以放手。

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

以下是使用 aws cli 的示例:

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

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

function assrole(){
    aws sts assume-role                         \
        --role-arn          "$(role_arn   $1)"  \
        --serial-number     "$(mfa_serial $1)"  \
        --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"
    }
}
于 2019-11-08T01:52:19.890 回答
4

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

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

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

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

安全令牌本身 - 大概 - 是一个签名和加密的消息,描述了伴随临时访问密钥 ID 和秘密的权限,有助于在 AWS 内基于令牌分散授权决策。无论其实际内容如何(似乎没有记录在案),如果没有随附的临时访问密钥 id 和秘密,它就不能独立使用——而且秘密不会在签名的 URL 中披露,并且不可能被反转-工程,如上所述。相反,临时访问密钥 id 和密钥在没有令牌的情况下是无用的。

于 2016-04-04T19:41:52.167 回答