如何使用AWS-ADFS使用Boto3向AWS进行身份验证-Python

时间:2019-04-03 05:05:31

标签: amazon-web-services boto3

我有以下Python代码可连接到AWS中的DynamoDB表:

# import requests
from __future__ import print_function  # Python 2/3 compatibility
import boto3
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr


# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return str(o)
        return super(DecimalEncoder, self).default(o)


def run():
    dynamodb = boto3.resource('dynamodb', region_name='ap-southeast-2')

    table = dynamodb.Table('work-gtfsr-tripupdates-dev-sydt')

    response = table.query(
        # ProjectionExpression="#yr, title, info.genres, info.actors[0]", #THIS IS A SELECT STATEMENT
        # ExpressionAttributeNames={"#yr": "year"},  # Expression Attribute Names for Projection Expression only. #SELECT STATEMENT RENAME
        KeyConditionExpression=Key('pingEpochTime').eq(1554016605) & Key('entityIndex').between(0, 500)
    )

    for i in response[u'Items']:
        print(json.dumps(i, cls=DecimalEncoder))


run()

当我连接到我的个人AWS账户(通过AWS CLI进行身份验证)时,确认以下代码可以工作,但是当我通过AWS-ADFS进行身份验证时,以下代码在防火墙后不起作用。当我运行代码以连接到公司AWS实例时,出现错误:

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

当我运行'aws-adfs login'脚本(确认可以运行)时,它似乎正确地填充了我的主驱动器中的.aws文件夹,并且在过去部署Lambda函数时也可以使用。我应该在代码中做一些事情来容纳aws-adfs会话令牌吗?

2 个答案:

答案 0 :(得分:0)

在另一个Stack Overflow页面上发现,Boto库显然需要〜/ .aws / credentials文件中的“ [default]”条目。

我通过使用名为“默认”的配置文件进行身份验证来测试了aws-adfs登录脚本,现在一切正常。

答案 1 :(得分:0)

使用boto3,您需要为您的资源设置会话。

session =  boto3.session.Session(profile_name="other_name")
dynamodb = session.resource('dynamodb', region_name='ap-southeast-2')

"other_name"是经过身份验证的个人资料的名称。