代码之家  ›  专栏  ›  技术社区  ›  Ganesh Satpute

DynamoDb中使用Python boto的MFA认证

  •  1
  • Ganesh Satpute  · 技术社区  · 7 年前

    我有一个旧代码,它看起来像下面的东西

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

    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'}
    

    我试图在互联网上搜索使用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身份验证?

    2 回复  |  直到 7 年前
        1
  •  0
  •   F_SO_K    7 年前

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

    1. 将设备序列号和令牌代码发布到 GetSessionToken endpoint
    2. 从GetSessionToken终结点接收临时访问密钥ID和机密访问密钥
    3. 将临时标记传递到现有代码中
        2
  •  0
  •   Ganesh Satpute    7 年前

    我犯了个愚蠢的错误。我本该暴露的 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