다음 코드를 실행하면 항상이 오류가 발생합니다.
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
답변
수동으로 키 지정 시도
s3 = boto3.resource('s3',
aws_access_key_id=ACCESS_ID,
aws_secret_access_key= ACCESS_KEY)
보안 문제를 위해 코드에 ACCESS_ID 및 ACCESS_KEY를 직접 포함하지 마십시오. 환경 구성을 사용하고 @Tiger_Mike가 제안한대로 코드에 삽입하는 것을 고려하십시오.
Prod 환경의 경우 순환 액세스 키 사용을 고려 하십시오 .
https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey
답변
나는 같은 문제가 있었고 내 ~/.aws/credentials
파일 의 형식 이 잘못 되었음을 알았습니다 .
다음을 포함하는 파일로 작업했습니다.
[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY
프로필 이름은 ” [default]
” 이어야합니다 . 일부 공식 문서는 ” [credentials]
” 라는 이름의 프로필을 참조하는데 , 이는 저에게 적합하지 않습니다.
답변
다른 방법을 찾고 있다면 다음을 사용하여 자격 증명을 추가해보십시오.
AmazonCLI를 추가해보십시오.
터미널 유형에서 :-
aws configure
그런 다음 키와 지역을 입력하십시오.
답변
Unix의 ~ / .aws / credentials 파일이 다음과 같은지 확인하십시오.
[MyProfile1]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
[MyProfile2]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
Python 스크립트는 다음과 같이 표시되어야하며 작동합니다.
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 .
답변
이 지침은 AWS 용 단일 사용자 프로필이있는 Windows 시스템 용입니다. ~/.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)
답변
나는 또한 동일한 문제가 있었는데, 홈 디렉토리에 구성 및 자격 증명 파일을 생성하여 해결할 수 있습니다. 아래는이 문제를 해결하기 위해 수행 한 단계를 보여줍니다.
구성 파일 만들기 :
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)
아래 링크를 참조 할 수도 있습니다.
답변
터미널 유형에서 :-
aws configure
그런 다음 키와 지역을 입력하십시오.
이 후 다음 단계를 수행하여 모든 환경을 사용하십시오. 계정에 따라 여러 키를 가질 수 있습니다. 여러 환경 또는 키 관리 가능
import boto3
aws_session = boto3.Session(profile_name="prod")
# Create an S3 client
s3 = aws_session.client('s3')