Я пытаюсь прочитать простой файл csv из S3 (зашифрованный), но продолжаю сталкиваться с различными проблемами …
Я создал пользователя IAM (только программный доступ), отложив идентификатор ключа доступа и секретный ключ доступа.
Я дал этому пользователю политику ниже, которая, как я понимаю, должна предоставить ему доступ для чтения / записи ко всему в моем ведре.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": [
"arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"
]
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": [
"arn:aws:s3:::my_bucket"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"*"
]
}
}
}
]
}
Создал сцену
create or replace stage my_s3_stage
url='s3://my_bucket/'
credentials=(aws_key_id='...' aws_secret_key='...')
encryption=(type='AWS_SSE_KMS' kms_key_id = 'f03...aee');
На этом этапе я могу перечислить объекты в корзине / этапе
list @my_s3_stage;
Все идет нормально.
Затем я создал простую таблицу
create or replace TABLE mytable (col1 String null, col2 string null, col3 string null);
Но затем я застреваю с сообщением об ошибке о разрешениях …
copy into mytable from @my_s3_stage pattern='.*.csv';
Не удалось получить доступ к удаленному файлу: доступ запрещен. Пожалуйста, проверьте свои учетные данные
Разве тот факт, что я могу перечислить файлы, не показывает, что мои учетные данные были правильными?
Есть идеи, в чем может быть настоящая проблема? Я что-то не так понимаю с шифрованием?
Насколько я понимаю, нет разрешений. Ваш пользователь IAM должен иметь разрешение на расшифровку объектов в S3, поэтому, когда вы перечисляете содержимое в корзине, работает, но при попытке скопировать вы получаете ошибку. Попробуйте использовать эту политику для своего пользователя (я сужаю то, что вам нужно прочитать из S3, это все разрешения List * и Get *):
Если это сработает, не забудьте добавить в политику только тот ключ kms, который вы используете.
Кроме того, рекомендуется использовать роль IAM вместо пользователя IAM, чтобы избежать копирования-вставки ключей.
Возможно, отсутствуют какие-то права доступа к объекту. Не могли бы вы проверить следующую ссылку?
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_s3_rw-bucket-console.html
Использование s3 * Object может помочь решить проблему:
Посмотрим. Спасибо — person Eric Mamet; 14.05.2020
Без особого успеха, поэтому я изменил пользователя IAM, чтобы он мог входить в систему через консоль. Затем мне пришлось предоставить список для всех сегментов, и теперь я могу видеть файл через этого пользователя, но я получаю AccessDenied, если я пытаюсь загрузить или прочитать файл … Какого может быть недостающего разрешения? Я думаю, что ведро зашифровано, но я могу прочитать файл через своего обычного пользователя (который является федеративным логином) — person Eric Mamet; 14.05.2020
Я использовал вариант 2 в документе «Настройка безопасного доступа к Amazon» для AWS_SSE_KMS. Если вы не будете точно следовать инструкциям, это не сработает.
https://docs.snowflake.com/en/user-guide/data-load-s3-config.html#option-2-configuring-an-aws-iam-role
Шаги должны быть следующими: 1. Создайте роль с установленной сетевой политикой 2. Создайте пользователя IAM 3. Создайте ключ KMS, используя пользователя с назначенной ролью 4. Создайте команду этапа, указав учетные данные, включая роль AWS и ключ KMS.
Всем спасибо за полезные комментарии.
Последнее, что меня поразило, это то, что каждый раз, когда воссоздается объект Snowflake STORAGE INTEGRATION (просто с помощью оператора CREATE OR REPLACE), внешний идентификатор AWS создается повторно, что делает недействительными мои доверительные отношения роли AWS с учетной записью Snowflake AWS. .
Еще раз большое спасибо за вашу помощь. Мне очень помогло.