【问题标题】:MFA authentication using Python boto for DynamoDb使用 Python boto 对 DynamoDb 进行 MFA 身份验证
【发布时间】:2018-05-22 13:19:17
【问题描述】:

我有一个旧代码,如下所示

boto.dynamodb2.connect_to_region(
        region_name=AWS_REGION,
        aws_access_key_id=ACCESS_KEY_ID,
        aws_secret_access_key=SECRET_ACCESS_KEY)

我的组织最近强制执行 MFA 身份验证。所以这段代码给了我

boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request
{u'Message': u'User: arn:aws:iam::123123123123:user/mike.ross is not authorized to perform: dynamodb:Scan on resource: arn:aws:dynamodb:us-west-2:123123123:table/MyTable with an explicit deny', u'__type': u'com.amazon.coral.service#AccessDeniedException'}

我尝试在 Internet 上搜索使用 MFA 身份验证的代码示例,但到目前为止我没有成功。

到目前为止,我尝试添加session_token 参数但它无法识别该参数。然后我尝试从connect_to_region 方法中删除所有参数,并使用适当的值导出以下环境变量

AWS_ACCESS_KEY_ID 
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN

然后我得到了

boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request
{u'message': u'The security token included in the request is invalid.', u'__type': u'com.amazon.coral.service#UnrecognizedClientException'}

如何更改此代码以使用 MFA 身份验证?

【问题讨论】:

    标签: python python-2.7 amazon-dynamodb boto multi-factor-authentication


    【解决方案1】:

    这里解释得很好: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html

    1. 将您的设备序列号和令牌代码发送到GetSessionToken endpoint
    2. 从 GetSessionToken 端点接收临时访问密钥 ID 和秘密访问密钥
    3. 将临时令牌传递到现有代码中

    【讨论】:

    • 我知道这个过程以及它是如何工作的。我找不到如何做到这一点的例子。从理论上讲,您的答案是正确的。但我要问的是如何做到这一点。例如,我知道我必须传递临时令牌的第三步。但如何通过它们是个问题。我找不到接受输入的方法。
    【解决方案2】:

    我犯了一个愚蠢的错误。我应该公开AWS_SECURITY_TOKEN,而不是公开它为AWS_SESSION_TOKEN

    我需要公开以下环境变量

    AWS_ACCESS_KEY_ID = <AWS access key if mfa one time access key>
    AWS_SECRET_ACCESS_KEY = <AWS secret key if mfa one time secret key>
    AWS_SECURITY_TOKEN = <if mfa security token>
    AWS_PROFILE = <profile name from your /.aws/credentials file>
    

    暴露这个环境变量后,我改变了代码如下

    boto.dynamodb2.connect_to_region(region_name=AWS_REGION)
    # Observe that I've removed access, secret key parameters, 
    # instead they'll be taken from environment variables.
    

    现在,连接正常。

    参考:Boto documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-03
      • 2015-08-07
      • 1970-01-01
      • 2017-03-11
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多