বোটো 3 ত্রুটি: botocore.exferences.NoCredentialsError: শংসাপত্রগুলি সনাক্ত করতে অক্ষম


112

আমি যখন নিম্নলিখিত কোডটি কেবল রান করি তখন আমি সর্বদা এই ত্রুটিটি পাই।

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, যেখান থেকে বোটোর আমার শংসাপত্রগুলি পড়া উচিত।

আমার সেটিংটি কি ভুল?

এখানে থেকে আউটপুট 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

1
আপনি কি boto3.set_stream_logger('botocore', level='DEBUG')আপনার কোডের আগে যুক্ত করে ডিবাগ আউটপুট পোস্ট করতে পারেন ? এটি কোথায় এটি শংসাপত্রগুলির জন্য অনুসন্ধান করবে show
জেমসেল 16

দেখে মনে হচ্ছে বোটো শংসাপত্রের কনফিগারেশন ফাইলের জন্য বেশ কয়েকটি অবস্থান সন্ধান করে, তবে দৃশ্যত কোনও কারণে আমার হোম ডিরেক্টরিতে সন্ধান করে না ...
d -_- বি

2
আপনার শংসাপত্রের ফাইলটিতে সরাসরি HOMEনির্দেশ করতে পরিবেশের পরিবর্তনশীলকে সেট করার চেষ্টা করুন C:\Users\mynameবা সেটিং AWS_SHARED_CREDENTIALS_FILEকরার চেষ্টা করুন।
২৪

আপনি বর্ণিত হিসাবে আমি env ভেরিয়েবলটি হোম সেট করেছিলাম, তবে এখন নিম্নলিখিত ত্রুটিটি পাচ্ছি। botocore.exceptions.NoRegionError: You must specify a region. * আমার কনফিগারেশন ফাইল ↓ একই ফোল্ডারে আমার ক্রেডিটেলগুলির মতো অবস্থিত। [default] ap-northeast-1
d -_- বি

1
গারানাটের মন্তব্য ব্যবহার করে আমি সমস্যাটি সমাধান করতে সক্ষম হয়েছি
লন্ড্রোম্যাট

উত্তর:


94

ম্যানুয়ালি কীগুলি নির্দিষ্ট করার চেষ্টা করুন

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

সুরক্ষা উদ্বেগের জন্য আপনার কোডটিতে আপনার ACCESS_ID এবং ACCESS_KEY সরাসরি অন্তর্ভুক্ত না করেছেন তা নিশ্চিত করুন। @ টাইগার_মাইকের পরামর্শ অনুসারে পরিবেশে কনফিগারেশন ব্যবহার এবং কোডে সেগুলি ইনজেকশন বিবেচনা করুন।

প্রোড পরিবেশের জন্য ঘোরানোর অ্যাক্সেস কীগুলি বিবেচনা করুন: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey


সরাসরি জ্যাঙ্গোতে পরিচালনা করার সময় এই উপায়টি কার্যকর। ধন্যবাদ.
জোপ্রিলুডিয়ান

1
এটি আরও বিপজ্জনক কারণ আপনি আপনার কোডগুলিতে গোপনীয়তা রাখছেন যা সংস্করণ নিয়ন্ত্রণে শেষ হতে পারে।
নিউ এভারেস্ট

4
@ নিউভারেস্ট এটি সঠিক, তবে আপনি ঘোষণাটি সেটিংস ফাইলে সরানো এবং তারপরে পরিবেশের ভেরিয়েবলের মাধ্যমে ইনজেকশন দিয়ে এড়াতে পারবেন।
টাইগার_মাইক

যদিও এটি কাজ করে তবে আমি বলব এটি সর্বোত্তম অনুশীলনগুলি অনুসরণ করে না।
বেন জারমন

1
ধন্যবাদ। এটি ডেভ সেটআপে একটি অস্থায়ী ফিক্স হিসাবে ব্যবহার করা যেতে পারে। কোনও .envফাইল থেকে এই ভেরিয়েবলগুলি লোড করা (প্রতিশ্রুতিবদ্ধ নয়) আদর্শ হবে এবং ~/.aws/ফোল্ডার থেকে বাছাইয়ের চেয়ে ভাল ।
সুপারনাভা

56

আমার একই সমস্যা ছিল এবং আমার ~/.aws/credentialsফাইলের ফর্ম্যাটটি ভুল ছিল।

এটি একটি ফাইল সহ কাজ করে:

[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY

নোট করুন যে প্রোফাইলের নাম অবশ্যই " [default]" হতে হবে । কিছু অফিসিয়াল ডকুমেন্টেশন " [credentials]" নামের একটি প্রোফাইলে রেফারেন্স দেয় যা আমার পক্ষে কাজ করে না।


1
জানালাটা অনেক কাজ করে (গ: \ ব্যবহারকারীরা \ ব্যবহারকারী \ .aws \ শংসাপত্র)
Mr_and_Mrs_D

4
আপনি সেশন = boto3.Session ব্যবহার যা boto3 ব্যবহারের প্রোফাইল নির্দিষ্ট করতে পারেন (<your_profile> PROFILE_NAME =)
Mattia Paterna

aws configureআপনার যদি
অ্যাউস

2
আমি এটিকে জবাবদিহির মাধ্যমে চালিয়ে যাচ্ছি তাই অন্য একটি বিষয় সন্ধান করা হ'ল যদি আপনি কমান্ডটি চালনার সময় অন্যরকম ব্যবহারকারী হন। নিশ্চিত করুন যে আপনি উদাহরণস্বরূপ এটি 'সুডো' দিয়ে করছেন না বা এটি পরিবর্তে শিকড়ের শংসাপত্রগুলি অ্যাক্সেস করার চেষ্টা করবে এবং সেগুলি উপস্থিত না থাকলে ব্যর্থ হবে if
Radtek

28

আপনি যদি কোনও বিকল্প উপায়ের সন্ধান করছেন তবে অ্যামাজন সিএলআই ব্যবহার করে আপনার শংসাপত্রগুলি যুক্ত করার চেষ্টা করুন

টার্মিনাল থেকে টাইপ করুন:

aws configure

তারপরে আপনার কী এবং অঞ্চল পূরণ করুন।


17

ইউনিক্সে আপনার ~ / .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/configration.html# ইন্টারেক্টিভ- কনফিগারেশন


1
output = jsonস্বাভাবিকভাবে মধ্যে স্থাপন করা হয় ~/.aws/configএকটি [profile MyProfile1]অধ্যায়। credentialsপরিবর্তে ফাইলে নির্দিষ্ট করা থাকলে এটি কাজ করতে পারে না ।
সিজেএস

@ কার্ট জে সাম্পসন যাচাই না করেই আমি নিশ্চিত যে আপনি ঠিক আছেন। সংশোধনীর জন্য ধন্যবাদ.
TheWalkingData

আমি AWS_PROFILE = মাইপ্রোফেল রফতানি করেছি এবং এটি কাজ করে না তবে এটি কাজ করে worked কেন এটি ঘটছে তা নিয়ে কোনও ব্যাখ্যা।
আদর্শ ত্রিবেদী

5

এই নির্দেশাবলী AWS এর জন্য একক ব্যবহারকারী প্রোফাইল সহ উইন্ডোজ মেশিনের জন্য। আপনার ~/.aws/credentialsফাইলটি এর মতো দেখাচ্ছে তা নিশ্চিত করুন

[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

আপনার শংসাপত্রগুলিতে আমাকে AWS_DEFAULT_PROFILEপরিবেশের পরিবর্তনশীল সেট করতে profile_nameহয়েছিল।
তারপরে আমার অজগরটি সংযোগ করতে সক্ষম হয়েছিল। থেকে যেমন এখানে

import boto3

# Let's use Amazon S3
s3 = boto3.resource('s3')

# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)

1
আপনি যদি মেশিন বিভাগে Win10 এ পরিবেশের পরিবর্তনশীল সেট করেন তবে আপনাকে সম্ভবত একটি রিবুটও করতে হবে।
ট্রেভর

1
@ ট্রেভর, আমি এটি জপিটার নোটবুকের সাহায্যে উইন্ডোজ machine মেশিনে পরীক্ষা করেছি, আমাকে জুপিটার সার্ভারটি পুনরায় চালু করতে হবে এবং এটি আমার পক্ষে কাজ করেছে, তবে আমি মনে করি রিবুটটি একটি ভাল ধারণা হবে।
হৃশিকেশ ধুমাল

5

আমারও একই সমস্যা ছিল, এটি হোম ডিরেক্টরিতে একটি কনফিগারেশন এবং শংসাপত্র ফাইল তৈরি করে সমাধান করা যেতে পারে। নীচে এই সমস্যাটি সমাধান করতে আমি যে পদক্ষেপগুলি করেছি তা প্রদর্শন করুন।

একটি কনফিগার ফাইল তৈরি করুন:

touch ~/.aws/config

এবং সেই ফাইলটিতে আমি এই অঞ্চলে প্রবেশ করলাম

[default]
region = us-west-2

তারপরে শংসাপত্র ফাইলটি তৈরি করুন:

touch ~/.aws/credentials

তারপরে আপনার শংসাপত্রগুলি প্রবেশ করান

[Profile1]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX 
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

এই সমস্ত সেট করার পরে, তারপর বালতি সংযোগ করতে আমার অজগর ফাইল। এই ফাইলটি চালান সমস্ত বিষয়বস্তু তালিকাবদ্ধ করে।

import boto3
import os

os.environ['AWS_PROFILE'] = "Profile1"
os.environ['AWS_DEFAULT_REGION'] = "us-west-2"

s3 = boto3.client('s3', region_name='us-west-2')
print("[INFO:] Connecting to cloud")

# Retrieves all regions/endpoints that work with S3

response = s3.list_buckets()
print('Regions:', response)

আপনি নীচের লিঙ্কগুলি উল্লেখ করতে পারেন:


4

টার্মিনাল থেকে টাইপ করুন:

aws configure

তারপরে আপনার কী এবং অঞ্চল পূরণ করুন।

এর পরে পরবর্তী পদক্ষেপটি যে কোনও পরিবেশ ব্যবহার করুন। আপনার অ্যাকাউন্টটি নির্ভর করে আপনার একাধিক কী থাকতে পারে। একাধিক পরিবেশ বা কী পরিচালনা করতে পারে

import boto3
aws_session = boto3.Session(profile_name="prod")
# Create an S3 client
s3 = aws_session.client('s3')

2

আমি একটি বৃহত কর্পোরেশনের জন্য কাজ করি এবং এই একই ত্রুটির মুখোমুখি হয়েছি, তবে আশেপাশে একটি আলাদা কাজের প্রয়োজন ছিল। আমার সমস্যা প্রক্সি সেটিংস সম্পর্কিত ছিল। আমি আমার প্রক্সি সেট আপ করেছি তাই আমার সমস্ত কিছু কাজ করতে সক্ষম হওয়ার আগে আমার ন_প্রক্সিকে শ্বেত তালিকাতে AWS এ সেট করা দরকার। আপনি যদি ওএস সেটিংসের সাহায্যে আপনার পাইথন কোডটি গ্লানি করতে না চান তবে আপনি এটিকে আপনার বাশ স্ক্রিপ্টেও সেট করতে পারেন।

পাইথন:

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

ব্যাশ:

export no_proxy = "s3.amazonaws.com"

সম্পাদনা করুন: উপরেরগুলি মার্কিন পূর্ব এস 3 অঞ্চল অনুমান করে। অন্যান্য অঞ্চলের জন্য: এস 3 ব্যবহার করুন। [অঞ্চল] .amazonaws.com যেখানে অঞ্চলটি আমাদের পূর্ব -1 বা আমাদের-পশ্চিম -2 এর মতো কিছু


2
আমি একটি অনুরূপ সমস্যা ছিল - কিন্তু বলার ছিল no_proxyজন্য 169.254.169.254তাই ডেস্কটপ AWS ক্লায়েন্ট উদাহরণস্বরূপ প্রোফাইল খুঁজে মেটাডেটা সেবা পেতে পারে।
রাল্ফ বোল্টন

0

বোটো 3 এর মতো ফোল্ডারে শংসাপত্রগুলি সন্ধান করছে

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

আপনার এই ফোল্ডারে দুটি ফাইল সংরক্ষণ করা উচিত credentialsএবং config

আপনি যে সাধারণ ক্রমটিতে বোটো 3 এই লিঙ্কটিতে শংসাপত্রগুলির জন্য অনুসন্ধান করতে চান তা দেখতে চাইতে পারেন । নীচে তাকান কনফিগার শংসাপত্রের সাব শিরোনাম নেই।


0

আপনি যদি নিশ্চিত হন যে আপনি আপনার আউসগুলি সঠিকভাবে কনফিগার করেছেন, কেবলমাত্র প্রকল্পটির ব্যবহারকারী ./aws থেকে পড়তে পারবেন বা কেবল আপনার প্রকল্পটিকে রুট হিসাবে চালাতে পারবেন তা নিশ্চিত করুন


0

আপনার যদি একাধিক আওস প্রোফাইল থাকে তবে ~/.aws/credentials...

[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. আপনি যেখান থেকে বোটো 3 ব্যবহার করেন বা আপনি কোনও সম্পাদক খোলেন সেখান থেকে একই কমান্ডের উপরের কমান্ডটি চালানো নিশ্চিত করুন [[নীচের পরিস্থিতিটি বোঝেন]

দৃশ্যপট:

  • আপনার যদি দুটি টার্মিনাল খোলা থাকে t1এবং ড t2
  • এবং আপনি রফতানি কমান্ডটি চালনা করেন t1এবং আপনি JupyterLab বা অন্য যে কোনও থেকে খোলেন t2, আপনি NoCredentialsError পাবেন: শংসাপত্রগুলির ত্রুটি সনাক্ত করতে অক্ষম

সমাধান:

  • এক্সপোর্ট কমান্ডটি চালান t1এবং তারপরে একই টার্মিনাল থেকে জুপিটারল্যাব বা অন্য কোনওটি খুলুন t1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.