проблема с разрешением чтение снежинки с S3

Я пытаюсь прочитать простой файл 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';

Не удалось получить доступ к удаленному файлу: доступ запрещен. Пожалуйста, проверьте свои учетные данные

Разве тот факт, что я могу перечислить файлы, не показывает, что мои учетные данные были правильными?

Есть идеи, в чем может быть настоящая проблема? Я что-то не так понимаю с шифрованием?

См. также:  Параметр NO_PARAM в запросе недействителен. Укажите правильное значение для параметра NO_PARAM при развертывании шаблона лазурной руки с помощью Powershell.
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 4
  1. Eric Mamet

    Насколько я понимаю, нет разрешений. Ваш пользователь IAM должен иметь разрешение на расшифровку объектов в S3, поэтому, когда вы перечисляете содержимое в корзине, работает, но при попытке скопировать вы получаете ошибку. Попробуйте использовать эту политику для своего пользователя (я сужаю то, что вам нужно прочитать из S3, это все разрешения List * и Get *):

        {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                  "kms:Decrypt",
                  "kms:List*" 
                ],
                "Resource": [
                  "*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                  "s3:Get*",
                  "s3:List*",
                ],
                "Resource": [
                  "arn:aws:s3:::my_bucket",
                  "arn:aws:s3:::my_bucket/*"
                ]
            }
        ]
     }
    

    Если это сработает, не забудьте добавить в политику только тот ключ kms, который вы используете.

    Кроме того, рекомендуется использовать роль IAM вместо пользователя IAM, чтобы избежать копирования-вставки ключей.

  2. Eric Mamet

    Возможно, отсутствуют какие-то права доступа к объекту. Не могли бы вы проверить следующую ссылку?

    https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_s3_rw-bucket-console.html

    Использование s3 * Object может помочь решить проблему:

    {
        "Effect": "Allow",
        "Action": "s3:*Object",
        "Resource": ["arn:aws:s3:::my_bucket/*"]
    }
    

    Посмотрим. Спасибо person Eric Mamet; 14.05.2020

    Без особого успеха, поэтому я изменил пользователя IAM, чтобы он мог входить в систему через консоль. Затем мне пришлось предоставить список для всех сегментов, и теперь я могу видеть файл через этого пользователя, но я получаю AccessDenied, если я пытаюсь загрузить или прочитать файл … Какого может быть недостающего разрешения? Я думаю, что ведро зашифровано, но я могу прочитать файл через своего обычного пользователя (который является федеративным логином) person Eric Mamet; 14.05.2020

  3. Eric Mamet

    Я использовал вариант 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.

  4. Eric Mamet

    Всем спасибо за полезные комментарии.

    Последнее, что меня поразило, это то, что каждый раз, когда воссоздается объект Snowflake STORAGE INTEGRATION (просто с помощью оператора CREATE OR REPLACE), внешний идентификатор AWS создается повторно, что делает недействительными мои доверительные отношения роли AWS с учетной записью Snowflake AWS. .

    Еще раз большое спасибо за вашу помощь. Мне очень помогло.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: