【问题标题】:Access aws dynamodb using boto3 when MFA has been set. Getting ClientError设置 MFA 后,使用 boto3 访问 aws dynamodb。获取客户端错误
【发布时间】:2020-06-23 10:11:19
【问题描述】:

以前当我没有设置 MFA 来登录 AWS 控制台时,我已经通过

连接到 dynamodb
dynamo = boto3.resource('dynamodb',
                        region_name='ap-northeast-2',
                        endpoint_url='http://dynamodb.ap-northeast-2.amazonaws.com')
table = dynamo.Table('tablename')

查询该表非常好。

response = table.query(
    KeyConditionExpression =Key("user_id").eq(123123)
)

在我设置 MFA 以获得额外的安全性以登录 AWS 控制台后,现在当我执行上述代码时,我得到:

ClientError: An error occurred (UnrecognizedClientException) when calling the Query operation: The security token included in the request is invalid.

我为 RDB 使用隧道,是否有类似的东西可以用来连接到 dynamodb,或者我需要权限才能访问 dynamodb?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    当您启用 MFA 时,SDK 不会自动知道如何使用它。您的常规 IAM 用户的 API 和 SECRET 密钥已经不够用了。相反,您需要使用仅为您的 MFA 会话创建的临时凭据。

    要使 MFA 与 boto3 一起使用,您必须显式调用 get_session_token

    启用 MFA 的 IAM 用户将需要调用 GetSessionToken 并提交与其 MFA 设备关联的 MFA 代码。使用调用返回的临时安全凭证,IAM 用户可以对需要 MFA 身份验证的 API 操作进行编程调用。

    使用get_session_token,您可以调用sts 服务,该服务将根据您的 MFA 详细信息为您提供临时凭证:

    sts = boto3.client('sts')
    
    mfa_response = sts.get_session_token(
        DurationSeconds=123,
        SerialNumber='string',
        TokenCode='string'
    )
    

    调用将返回 mfa_response 中的凭据,您可以使用它创建新的 boto3 会话。例如:

    mfa_session = boto3.session.Session(
          aws_access_key_id=mfa_session['Credentials']['AccessKeyId'], 
          aws_secret_access_key=mfa_session['Credentials']['SecretAccessKey'], 
          aws_session_token=mfa_session['Credentials']['SessionToken'])
    
    dynamo = mfa_session.resource('dynamodb', ...)
    
    # and the rest of the code
    

    【讨论】:

    • 什么是序列号?我不断收到ParamValidationError: Parameter validation failed: Invalid range for parameter DurationSeconds, value: 3, valid range: 900-inf Invalid length for parameter SerialNumber, value: 6, valid range: 9-inf 可以通过将 123 替换为 900 并将 'string' 替换为 stringgggg 来修复,但是当我在 TokenCode 中插入 mfa 代码时,它一直给我ClientError
    • @Ambleu 显示序列号示例here
    • 我已经进入控制台,复制粘贴的指定 MFA 设备名称,类似于 arn:aws:iam....... 我已经输入了手机 MFA 给我的 TokenCode。它仍然给出 ClientError。关于每个参数的信息我参考了docs.aws.amazon.com/cli/latest/reference/sts/…
    • @Ambleu 您可以尝试在 aws CLI 中执行此操作吗?暂时不是boto3。在尝试在 boto3 中使用它之前,最好尝试最基本的方法以确保 MFA 按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 2018-11-25
    • 2022-11-06
    • 2018-03-16
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多