2

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

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 身份验证?

4

2 回答 2

0

我犯了一个愚蠢的错误。我应该一直暴露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 文档

于 2018-05-23T09:39:11.540 回答
0

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

  1. 将您的设备序列号和令牌代码发布到GetSessionToken 端点
  2. 从 GetSessionToken 端点接收临时访问密钥 ID 和秘密访问密钥
  3. 将临时令牌传递到您现有的代码中
于 2018-05-22T15:24:05.853 回答