Boto3 त्रुटि: botocore.exception.NoCredentialsError: क्रेडेंशियल का पता लगाने में असमर्थ




(7)

Boto3 जैसे फ़ोल्डर में क्रेडेंशियल्स की तलाश है

C:\ProgramData\Anaconda3\envs\tensorflow\Lib\site-packages\botocore\.aws

आपको इस फ़ोल्डर की credentials और config में दो फाइल्स सेव करनी चाहिए।

आप उस सामान्य क्रम को देखना चाहते हैं जिसमें boto3 इस लिंक में क्रेडेंशियल्स की खोज करता है। कॉन्फ़िगरेशन क्रेडेंशियल उप शीर्षक के नीचे देखें।

जब मैं बस निम्नलिखित कोड चलाता हूं, तो मुझे हमेशा यह त्रुटि मिलती है।

s3 = boto3.resource('s3')
    bucket_name = "python-sdk-sample-%s" % uuid.uuid4()
    print("Creating new bucket with name:", bucket_name)
    s3.create_bucket(Bucket=bucket_name)

मैंने अपनी क्रेडेंशियल फ़ाइल सहेज ली है

C:\Users\myname\.aws\credentials , जहां से Boto को मेरी क्रेडेंशियल्स पढ़ना चाहिए।

क्या मेरी सेटिंग गलत है?

यहाँ boto3.set_stream_logger('botocore', level='DEBUG') से आउटपुट है।

2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Skipping environment variable credential check because profile name was explicitly set.
2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Looking for credentials via: env
2015-10-24 14:22:28,773 botocore.credentials [DEBUG] Looking for credentials via: shared-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: config-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: ec2-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: boto-config
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: iam-role

मेरे पास एक ही मुद्दा था और मुझे पता चला कि मेरे ~/.aws/credentials फ़ाइल का प्रारूप गलत था।

यह एक फ़ाइल के साथ काम करता है:

[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY

ध्यान दें कि प्रोफ़ाइल नाम " [default] " होना चाहिए। कुछ आधिकारिक दस्तावेज " [credentials] " नामक एक प्रोफाइल का संदर्भ देते हैं, जो मेरे लिए काम नहीं करता था।


मैं एक बड़े निगम के लिए काम करता हूं और इसी त्रुटि का सामना किया है, लेकिन चारों ओर एक अलग काम की जरूरत है। मेरा मुद्दा प्रॉक्सी सेटिंग्स से संबंधित था। मेरे पास मेरा प्रॉक्सी सेट था, इसलिए मुझे काम करने के लिए सब कुछ प्राप्त करने में सक्षम होने से पहले मेरे no_proxy को श्वेतसूची AWS में सेट करने की आवश्यकता थी। यदि आप ओएस सेटिंग्स के साथ अपने पायथन कोड को मैला नहीं करना चाहते हैं तो आप इसे अपनी बैश स्क्रिप्ट में भी सेट कर सकते हैं।

अजगर:

import os
os.environ["NO_PROXY"] = "s3.amazonaws.com"

दे घुमा के:

no_proxy = "s3.amazonaws.com"

मैन्युअल रूप से कुंजी निर्दिष्ट करने का प्रयास करें

    s3 = boto3.resource('s3',
         aws_access_key_id=ACCESS_ID,
         aws_secret_access_key= ACCESS_KEY)

सुनिश्चित करें कि आपने अपने ACCESS_ID और ACCESS_KEY को सीधे सुरक्षा चिंताओं के लिए कोड में शामिल नहीं किया है। @Tiger_Mike द्वारा सुझाए गए कोड में पर्यावरण कॉन्फ़िगरेशन का उपयोग करने और उन्हें इंजेक्ट करने पर विचार करें।

उत्पादक वातावरण के लिए घूर्णन एक्सेस कुंजियों का उपयोग करने पर विचार करें: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey


यदि आप सुनिश्चित हैं कि आप अपने aws को सही तरीके से कॉन्फ़िगर कर रहे हैं, तो सुनिश्चित करें कि प्रोजेक्ट का उपयोगकर्ता / .aw से पढ़ सकता है या बस अपने रूट को रूट के रूप में चला सकता है


यदि आपके पास ~/.aws/credentials जैसे कई aws प्रोफाइल हैं ...

[Profile 1]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************
[Profile 2]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************

दो चरणों का पालन करें:

  1. टर्मिनल में export AWS_DEFAULT_PROFILE=Profile 1 कमांड का उपयोग करके आप एक डिफ़ॉल्ट के रूप में उपयोग करना चाहते हैं।

  2. उसी टर्मिनल में कमांड से ऊपर चलना सुनिश्चित करें जहाँ से आप boto3 का उपयोग करते हैं या आप एक संपादक खोलते हैं। [इस परिदृश्य को समझें]

परिदृश्य:

  • यदि आपके पास दो टर्मिनल खुले हैं जिन्हें t1 और t2 कहा जाता है।
  • और आप t1 में एक्सपोर्ट कमांड चलाते हैं और आप JupyterLab या किसी अन्य को t2 से खोलते हैं, आपको NoCredentialsError: क्रेडेंशियल त्रुटि का पता लगाने में असमर्थ होगा।

उपाय:

  • निर्यात कमांड को t1 में चलाएं और फिर JupyterLab या किसी अन्य को उसी टर्मिनल t1 से खोलें।

सुनिश्चित करें कि आपकी ~ / .aws / क्रेडेंशियल्स फ़ाइल यूनिक्स में इस तरह दिखती है:

[MyProfile1]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

[MyProfile2]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

आपकी पायथन लिपि इस तरह दिखनी चाहिए, और यह काम करेगी:

from __future__ import print_function
import boto3
import os

os.environ['AWS_PROFILE'] = "MyProfile1"
os.environ['AWS_DEFAULT_REGION'] = "us-east-1"

ec2 = boto3.client('ec2')

# Retrieves all regions/endpoints that work with EC2
response = ec2.describe_regions()
print('Regions:', response['Regions'])

स्रोत: https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration