簡體   English   中英

python3 和 pystfp 中的 AWS Secrets Manager 密碼問題

[英]AWS Secrets Manager password issue in python3 and pystfp

目前正在嘗試使用來自 AWS secret manager 的用戶憑證連接 sftp 服務器,並且密碼包含雙引號特殊字符,這導致了問題。 下面是示例代碼,

    import sys
    import boto3
    import base64
    from botocore.exceptions import ClientError
    import hashlib
    import pysftp


    secret_name = "SFTP_TEST"
    region_name = "eu-central-1"
    _SFTP_DETAILS = {}

    pass1= "E?%/?s\"N1sS#OnXN"
    cnopts = pysftp.CnOpts()
    cnopts.hostkeys = None
    cnopts.log = True
    basepath ='/test/'

    def get_connect(secret_name,region_name):
        session = boto3.session.Session()
        client = session.client(service_name='secretsmanager', region_name=region_name.strip())
        if secret_name.strip() not in _SFTP_DETAILS:
            try:
                get_secret_value_response = client.get_secret_value(SecretId=secret_name.strip())
            except Exception as e:
                raise e
            else:
                if 'SecretString' in get_secret_value_response:
                    secret = get_secret_value_response['SecretString']
                    print("Secret value Original ==>",secret)
                    secretValue = json.loads(secret)
                    awsValue = secretValue.get(secret_name.strip())
                    sftpStrValue = awsValue.replace("“","\"").replace("”","\"")
                    print("Secrete Value After JSON loader ==>",sftpStrValue)
                    sftpValues = json.loads(sftpStrValue)
                    _HOST_NAME = sftpValues.get("url")
                    _USER_NAME = sftpValues.get("username")
                    _PASSWORD = sftpValues.get("password")
                    print("Secrete Password:::" + _PASSWORD) 
                    _PORT = sftpValues.get("port")
                    with pysftp.Connection(_HOST_NAME, username=_USER_NAME, password=_PASSWORD, port=int('22'), cnopts=cnopts) as sftp:
                        print("I am in SFTP SERVER")
                        for attr in sftp.listdir_attr(basepath):
                            print("listdir is",attr)    
                    _SFTP_DETAILS[secret_name] = [_HOST_NAME.strip(),_USER_NAME.strip(),_PASSWORD.strip(),_PORT.strip()]
        return _SFTP_DETAILS[secret_name.strip()] 
get_connect()

這里我們從 AWS secret manager 獲取密碼 (_PASSWORD) 並傳遞給 pysftp.Connection 函數,但無法連接。

在這里,如果我是硬編碼密碼,即上面代碼中的 pass1,那么它可以正常工作並且能夠連接。 無法從 python 或 AWS Secrets Manager 獲取問題。

您能否讓我知道為什么在硬編碼正常工作時來自 AWS 秘密管理器的密碼不起作用。 這里要求在 AWS Secrets Manager 中保留密碼。

對此的任何幫助表示贊賞。

我在 AWS Secret Manager Console 中將此作為我的秘密:

秘鑰 | 秘密價值

TEST_KEY | afgvbq3tg"afsvgqag"af.qw/asffq3gvd13

如果我通過以下方式獲得 secret_value:

secret = client.get_secret_value(SecretId="test_secret_ron")

並打印secret["SecretString"] ,結果將如下所示:

'{"TEST_KEY":"afgvbq3tg\\"afsvgqag\\"af.qw/asffq3gvd13"}'

一旦您通過以下方式將此字符串轉換為字典:

json.loads(secret["SecretString"])

預期的字典將反映字符串的正確格式:

{'TEST_KEY': 'afgvbq3tg"afsvgqag"af.qw/asffq3gvd13'}

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM