LoginSignup
5
5

More than 5 years have passed since last update.

PythonでCognito経由でS3リソースにアクセスする

Last updated at Posted at 2017-08-04

目的

Cognito経由で一時的な認証情報を獲得し、その情報を使ってS3に対してアクセスするPythonコードを示す。Pythonについてはどうも不完全な実装しか落ちていないので載せておく。

準備

Cognito側で非認証ロールにおいて予め当該S3リソースに必要な最低限の権限を与えておくこと。

実装

以下がコード。

cognito-s3.py
        client = boto3.client('cognito-identity', 'ap-northeast-1')

        #1回目のアクセスでCognitoの認証IDを得る
        resp =  client.get_id(IdentityPoolId='ap-northeast-1:<YOUR COGNITO IDENTITY POOL ID>')
        print "\nIdentity ID: %s"%(resp['IdentityId'])
        print "\nRequest ID: %s"%(resp['ResponseMetadata']['RequestId'])

        #2回目のアクセスでSessionを確立するための認証情報を得る
        resp = client.get_credentials_for_identity(IdentityId=resp['IdentityId'])
        secretKey = resp['Credentials']['SecretKey']
        accessKey = resp['Credentials']['AccessKeyId']
        token = resp['Credentials']['SessionToken']
        print "\nToken: %s"%(token)
        print "\nSecretKey: %s"%(secretKey)
        print "\nAccessKey ID: %s"%(accessKey)
        print resp

        #認証情報を用いて S3 Object にアクセスする
        session = Session(aws_access_key_id=accessKey,
                  aws_secret_access_key=secretKey,
                  aws_session_token=token, #トークンを忘れずに!
                  region_name='ap-northeast-1')
        s3 = session.resource('s3')
        obj = s3.Object(bucket_name='<BUCKET NAME>', key='<KEY NAME>')

        #以下は単純に読み込んで長さを返す例
        response = obj.get()
        data = response['Body'].read()
        print len(data)
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5