Quando eu simplesmente executo o código a seguir, sempre recebo esse erro.
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)
Salvei meu arquivo de credencial em
C:\Users\myname\.aws\credentials
, de onde Boto deve ler minhas credenciais.
Minha configuração está errada?
Aqui está a saída de 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
boto3.set_stream_logger('botocore', level='DEBUG')
antes de seu código? Ele mostrará onde está procurando as credenciais.HOME
para apontarC:\Users\myname
ou definirAWS_SHARED_CREDENTIALS_FILE
para apontar diretamente para seu arquivo de credenciais.botocore.exceptions.NoRegionError: You must specify a region.
* meu arquivo de configuração ↓ está localizado na mesma pasta que meus credentails.[default] ap-northeast-1
Respostas:
tente especificar as chaves manualmente
Certifique-se de não incluir seu ACCESS_ID e ACCESS_KEY no código diretamente por questões de segurança. Considere usar configurações de ambiente e injetá-las no código, conforme sugerido por @Tiger_Mike.
Para ambientes Prod, considere o uso de chaves de acesso rotativas: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey
fonte
.env
arquivo (não confirmado) seria ideal e seria melhor do que ter que escolher de uma~/.aws/
pasta.Eu tive o mesmo problema e descobri que o formato do meu
~/.aws/credentials
arquivo estava errado.Funcionou com um arquivo contendo:
Observe que o nome do perfil deve ser "
[default]
". Algumas documentações oficiais fazem referência a um perfil chamado "[credentials]
", que não funcionou para mim.fonte
aws configure
também funciona se você tiver o aws-cli instaladoSe você está procurando uma maneira alternativa, tente adicionar suas credenciais usando AmazonCLI
do tipo de terminal: -
em seguida, preencha suas chaves e região.
fonte
Certifique-se de que seu arquivo ~ / .aws / credentials no Unix se pareça com este:
Seu script Python deve ser parecido com isto e funcionará:
Fonte: https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration .
fonte
output = json
normalmente é colocado~/.aws/config
em uma[profile MyProfile1]
seção. Ele pode não funcionar se especificado nocredentials
arquivo.Estas instruções são para máquinas Windows com um único perfil de usuário para AWS. Certifique-se de que seu
~/.aws/credentials
arquivo se pareça com esteTive que definir a
AWS_DEFAULT_PROFILE
variável de ambiente a serprofile_name
encontrada em suas credenciais.Então meu python foi capaz de se conectar. por exemplo, daqui
fonte
Eu também tive o mesmo problema, ele pode ser resolvido criando um arquivo de configuração e credencial no diretório inicial. Abaixo, mostro as etapas que fiz para resolver esse problema.
Crie um arquivo de configuração:
E nesse arquivo entrei na região
Em seguida, crie o arquivo de credencial:
Em seguida, insira suas credenciais
Depois de definir tudo isso, então meu arquivo python para conectar o balde. Executar este arquivo listará todo o conteúdo.
Você também pode consultar os links abaixo:
fonte
do tipo de terminal: -
em seguida, preencha suas chaves e região.
depois disso, execute a próxima etapa, use qualquer ambiente. Você pode ter várias chaves, dependendo da sua conta. Pode gerenciar vários ambientes ou chaves
fonte
Eu trabalho para uma grande empresa e encontrei o mesmo erro, mas precisava de uma solução alternativa. Meu problema estava relacionado às configurações de proxy. Eu tinha meu proxy configurado, então precisei definir meu no_proxy para lista de permissões da AWS antes de fazer tudo funcionar. Você também pode defini-lo em seu script bash se não quiser confundir seu código Python com configurações de sistema operacional.
Pitão:
Bash:
Edit: O acima assume uma região US East S3. Para outras regiões: use s3. [Region] .amazonaws.com onde region é algo como us-east-1 ou us-west-2
fonte
no_proxy
para169.254.169.254
que o cliente AWS pudesse acessar o serviço de metadados para encontrar o perfil da instância.O boto3 está procurando as credenciais na pasta como
Você deve salvar dois arquivos nesta pasta
credentials
econfig
.Você pode querer verificar a ordem geral em que o boto3 procura por credenciais neste link . Observe o subtítulo Configurando Credenciais .
fonte
Se você tiver certeza de que configurou seu aws corretamente, certifique-se de que o usuário do projeto pode ler de ./aws ou apenas execute seu projeto como root
fonte
Se você tiver vários perfis da AWS em
~/.aws/credentials
como ...Siga duas etapas:
Faça um que deseja usar como padrão usando o
export AWS_DEFAULT_PROFILE=Profile 1
comando no terminal.Certifique-se de executar o comando acima no mesmo terminal de onde você usa boto3 ou abra um editor. [Entenda o seguinte cenário]
Cenário:
t1
et2
.t1
e abre o JupyterLab ou qualquer outrot2
, você obterá NoCredentialsError: Incapaz de localizar o erro de credenciais .Solução:
t1
e abra o JupyterLab ou qualquer outro no mesmo terminalt1
.fonte