"aws_security_token" 有什么用
What is the "aws_security_token" used for
我想在 AWS S3 中使用预签名的 URLs。我注意到预签名 URL 包括 aws_access_key_id
和 aws_security_token
.
根据我的理解,aws_security_token
是 URL 的一部分,因为我使用的是临时安全凭证,它是正确签署 URL 所必需的。
但是给 URL 可以让前端客户端下载图像吗? aws_security_token
是 URL 的一部分(未加密)。我担心安全问题,无法弄清楚令牌的用途。以及攻击者可以用我的 aws_access_key_id
和 aws_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 switched 从 AWS_SECURITY_TOKEN
到 AWS_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"
}
}
我想在 AWS S3 中使用预签名的 URLs。我注意到预签名 URL 包括 aws_access_key_id
和 aws_security_token
.
根据我的理解,aws_security_token
是 URL 的一部分,因为我使用的是临时安全凭证,它是正确签署 URL 所必需的。
但是给 URL 可以让前端客户端下载图像吗? aws_security_token
是 URL 的一部分(未加密)。我担心安全问题,无法弄清楚令牌的用途。以及攻击者可以用我的 aws_access_key_id
和 aws_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 switched 从 AWS_SECURITY_TOKEN
到 AWS_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"
}
}