2016-08-20 3 views
9

Я создал новый ключ доступа и сконфигурировал его в AWS CLI с aws configure. Он создал файл .ini в ~/.aws/config. Когда я бегу aws s3 ls это дает:Идентификатор ключа доступа AWS в наших записях не существует

A client error (InvalidAccessKeyId) occurred when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records.

AmazonS3FullAccess политика также прилагается к пользователю. Как это исправить?

+3

есть ли файл '~/.aws/credentials' и содержит ли он правильный идентификатор и ключ? –

+0

Создан только файл конфигурации с aws-конфигурацией. – kaushikdr

ответ

0

Похоже, что ~/.aws/credentials не был создан. Попробуйте создать его вручную с этим содержимым:

[default] 
aws_access_key_id = sdfesdwedwedwrdf 
aws_secret_access_key = wedfwedwerf3erfweaefdaefafefqaewfqewfqw 

(на моем тестовом окне, если я бегу aws команду без учетных данных файла, ошибка Unable to locate credentials. You can configure credentials by running "aws configure".) Вы можете попробовать эти две команды из одной оболочки вы пытаясь запустить aws:

$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE 
$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY 

, а затем попробовать aws команду.

+0

Он по-прежнему дает ту же ошибку. – kaushikdr

+0

см. Edit please –

+2

@DusanBajic accesskeyid «не существует в наших записях» - это ошибка, с которой я столкнулся во время тестирования, когда я намеренно изменил значение ключа в подписанном URL-адресе, пытаясь имитировать различные сбои. Это означает, что ключ действительно использовался, но IAM утверждает, что он не существует. Предполагая, что нет ошибки копирования/вставки, этот ответ подсказывает - для меня - что, поскольку учетные данные были недавно созданы, тогда может случиться так, что IAM/имеет временную задержку репликации, которая будет сортироваться по ожиданию, а не отсутствующий файл конфигурации. –

0

Другая вещь, которая может привести к этому, даже если все настроено правильно, запускает команду из Makefile. например, у меня было правило:

awssetup: 
     aws configure 
     aws s3 sync s3://mybucket.whatever . 

, когда я побежал make awssetup я получил ошибку: fatal error: An error occurred (InvalidAccessKeyId) when calling the ListObjects operation: The AWS Access Key Id you provided does not exist in our records.. но запустить его из командной строки.

7

Возможно, у вас есть старые ключи, экспортированные через переменные env (bash_profile), и поскольку переменные env имеют более высокий приоритет над файлами учетных данных, он сообщает об ошибке «идентификатор ключа доступа не существует».

Удалите старые ключи из файла bash_profile, и вам будет хорошо идти.

случилось со мной однажды раньше, когда я забыл у меня есть полномочия в bash_profile и дал мне головную боль в течение некоторого времени :)

+0

Спасибо за идею. Это сводило меня с ума. –

2

Похоже, некоторые значения уже установлены для переменных окружения AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY.

Если это так, вы можете увидеть некоторые значения при выполнении приведенных ниже команд.

echo $AWS_SECRET_ACCESS_KEY 
echo $AWS_ACCESS_KEY_ID 

Вам необходимо сбросить эти переменные, если вы используете AWS настройки

Для сброса, выполните следующие команды.

unset AWS_ACCESS_KEY_ID 
unset AWS_SECRET_ACCESS_KEY 
+0

Это точно мой случай: я должен был установить эту переменную много лет назад и полностью забыть о них. Большое спасибо! –

1

Для меня, я полагался на IAM EC2 roles, чтобы дать доступ к нашим машинам к определенным ресурсам.

Я даже не знаю, что было credentials файл на ~/.aws/credentials, пока я не повернуты/удалены некоторые из наших Конфигурация доступности на IAM консоли, чтобы затянуть нашу безопасность, и вдруг сделал один из сценариев перестают работать на одной машине ,

Удаление этого файла credentials исправлено для меня.

0

вы можете настроить профили в файле bash_profile с помощью

<profile_name> 
aws_access_key_id = <access_key> 
aws_secret_access_key = <acces_key_secret> 

, если вы используете несколько профилей. затем используйте:

aws s3 ls --profile <profile_name> 
0

Ни один из опрошенных ответов не работает для меня. Наконец, я передаю учетные данные внутри скрипта python, используя API-интерфейс клиента.

import boto3 
client = boto3.client(
's3', 
aws_access_key_id=ACCESS_KEY, 
aws_secret_access_key=SECRET_KEY, 
aws_session_token=SESSION_TOKEN) 

Обратите внимание, что аргумент aws_session_token не является обязательным. Не рекомендуется для публичной работы, но облегчает жизнь для простого испытания.

+1

Если вы используете EC2/Lambda/etc. вы получите [временные учетные данные безопасности] (http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#UsingTemporarySecurityCredentials), что означает, что вам нужно будет использовать переменную среды 'AWS_SESSION_TOKEN' и передать ее к boto3. Я почти уверен, что это необязательно, потому что его немедленный выброс «InvalidAccessKeyId». –

+0

Решение работает на моем локальном ноутбуке jupyter, и оно не было протестировано для среды EC2/Lambda. Спасибо за эксперименты, которые вы сделали, @HendyIrawan, вы тестируете как EC2, так и Lambda (или другие среды, если они есть)? – Frank