AWS Data Pipeline не может проверить доступ S3 [предупреждение о разрешении] - PullRequest
1 голос
/ 29 мая 2019

Я делаю оценку сервисов баз данных AWS, чтобы выбрать наиболее эффективный, цель - загружать данные из файла json из корзины S3 в Redshift каждые 5 минут.

В настоящее время я пытаюсьиспользуйте AWS Data Pipeline для автоматизации ETL.Я следовал этому учебному пособию AWS «Копирование данных в Amazon Redshift с помощью консоли конвейера данных AWS», все просто и понятно.

https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-copydata-redshift-create.html

Я установил кластер в Redshift и корзину на S3, создал все необходимые роли и политики со всеми необходимыми разрешениями.

Теперь, после создания конвейера и нажатия кнопки «Активировать», появляется предупреждение «1010 *

Ошибки / предупреждения:

Object:Ec2Instance
WARNING: Could not validate S3 Access for role. Please ensure role ('DataPipelineDefaultRole') has s3:Get*, s3:List*, s3:Put* and sts:AssumeRole permissions for DataPipeline.

Теперь я уверен, чтоу моей роли и роли ресурса есть s3:Get*, s3:List*, s3:Put* и sts:AssumeRole

На самом деле у них обоих есть FullAccess в основном для всех необходимых мне услуг.

Политика DataPipelineDefaultRole:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": "iam:CreateServiceLinkedRole",
        "Resource": "*",
        "Condition": {
            "StringLike": {
                "iam:AWSServiceName": [
                    "elasticmapreduce.amazonaws.com",
                    "spot.amazonaws.com"
                ]
            }
        }
    },
    {
        "Sid": "VisualEditor1",
        "Effect": "Allow",
        "Action": [
            "ec2:AuthorizeSecurityGroupIngress",
            "sdb:Select*",
            "sqs:ReceiveMessage",
            "s3:Get*",
            "sqs:GetQueue*",
            "s3:CreateBucket",
            "sns:Unsubscribe",
            "s3:List*",
            "datapipeline:EvaluateExpression",
            "ec2:StartInstances",
            "dynamodb:DescribeTable",
            "sqs:Delete*",
            "iam:ListAttachedRolePolicies",
            "ec2:RevokeSecurityGroupEgress",
            "dynamodb:GetItem",
            "sns:Subscribe",
            "iam:ListRolePolicies",
            "s3:DeleteObject",
            "sdb:BatchPutAttributes",
            "iam:GetRole",
            "dynamodb:BatchGetItem",
            "redshift:DescribeClusterSecurityGroups",
            "ec2:CreateTags",
            "ec2:DeleteNetworkInterface",
            "ec2:RunInstances",
            "dynamodb:Scan",
            "rds:DescribeDBSecurityGroups",
            "ec2:StopInstances",
            "ec2:CreateNetworkInterface",
            "ec2:CancelSpotInstanceRequests",
            "cloudwatch:*",
            "sqs:PurgeQueue",
            "iam:GetRolePolicy",
            "dynamodb:UpdateTable",
            "ec2:RequestSpotInstances",
            "ec2:DeleteTags",
            "sns:ListTopics",
            "ec2:ModifyImageAttribute",
            "iam:PassRole",
            "sns:Publish",
            "ec2:DescribeNetworkInterfaces",
            "ec2:CreateSecurityGroup",
            "rds:DescribeDBInstances",
            "ec2:ModifyInstanceAttribute",
            "ec2:AuthorizeSecurityGroupEgress",
            "ec2:DetachNetworkInterface",
            "ec2:TerminateInstances",
            "iam:GetInstanceProfile",
            "sns:GetTopicAttributes",
            "datapipeline:DescribeObjects",
            "dynamodb:Query",
            "iam:ListInstanceProfiles",
            "ec2:Describe*",
            "ec2:DeleteSecurityGroup",
            "redshift:DescribeClusters",
            "sqs:CreateQueue",
            "elasticmapreduce:*",
            "s3:Put*"
        ],
        "Resource": "*"
    },
    {
        "Sid": "VisualEditor2",
        "Effect": "Allow",
        "Action": [
            "iam:PassRole",
            "s3:Get*",
            "s3:List*",
            "s3:Put*",
            "sts:AssumeRole"
        ],
        "Resource": [
            "arn:aws:iam::*:role/DataPipelineDefaultResourceRole",
            "arn:aws:iam::*:role/DataPipelineDefaultRole",
            "arn:aws:s3:::*/*"
        ]
    },
    {
        "Sid": "VisualEditor3",
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:List*",
            "s3:Put*"
        ],
        "Resource": "arn:aws:s3:::*"
    },
    {
        "Sid": "VisualEditor4",
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:List*",
            "s3:Put*"
        ],
        "Resource": "*"
    }
]
}

Политика DataPipelineDefaultResourceRole:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "cloudwatch:*",
            "datapipeline:*",
            "dynamodb:*",
            "ec2:Describe*",
            "elasticmapreduce:AddJobFlowSteps",
            "elasticmapreduce:Describe*",
            "elasticmapreduce:ListInstance*",
            "rds:Describe*",
            "redshift:DescribeClusters",
            "redshift:DescribeClusterSecurityGroups",
            "s3:*",
            "sdb:*",
            "sns:*",
            "sqs:*"
        ],
        "Resource": [
            "*"
        ]
    }
]
}

Я изучал проблему дляв течение недели опробовал все существующие решения, обновил доверительные отношения, воссоздал роли, сохранил роли по умолчанию, позволил Data Pipeline создавать новые и проверил группу безопасности, сохраняя ту же проблему.

После активации конвейера и проверки журнала Uri я нахожу 2 папки Ec2Instance и RedshiftLoadActivity, в файле журнала Redshift есть только 2 строки, в другой больше [INFO], описывающих загрузкуфайла jar и S3 для TaskRunner.

Среди журналов есть [INFO] и эти [WARN]:

Ec2Instance:

private.com.amazonaws.services.s3.internal.S3V4AuthErrorRetryStrategy: Attempting to re-send the request to mylogbucket.s3.eu-central-1.amazonaws.com with AWS V4 authentication. To avoid this warning in the future, please use region-specific endpoint to access buckets located in regions that require V4 signing.

RedshiftLoadДеятельность:

private.com.amazonaws.services.s3.internal.S3V4AuthErrorRetryStrategy: Attempting to re-send the request to mylogbucket.s3.eu-central-1.amazonaws.com with AWS V4 authentication. To avoid this warning in the future, please use region-specific endpoint to access buckets located in regions that require V4 signing.

Проблема должна заключаться в ролях и политиках, но я позаботился о том, чтобы Redshift и S3 bucket не были проблемой, так как я попытался использовать команду COPY в редакторе запросов, и он загрузил данные какожидается.

В настоящее время я все еще застрял в этой ошибке и хотел бы получить несколько советов о том, как я мог бы решить эту проблему.

548 [ОШИБКА] (TaskRunnerService-resource: df-0539055_ @ Ec2Instance_2019-05-30T13: 38: 35-0) amazonaws.datapipeline.database.ConnectionFactory: невозможно установить соединение с jdbc: postgresql: //redshift-cluster-1.coykb9.eu-central-1.redshift.amazonaws.com: 5439 / db Соединение отказано.Убедитесь, что имя хоста и порт указаны правильно и что администратор почты принимает соединения TCP / IP

1 Ответ

0 голосов
/ 29 мая 2019

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

Проверка профиля экземпляра EC2 и роли EMR EMR, порожденного конвейером данных.Присоедините политику доступа S3 к роли профиля экземпляра EC2 в EMR.

По умолчанию Профиль экземпляра EC2 равен DataPipelineDefaultResourceRole

Для исправления

Ошибка Невозможно установить соединение с jdbc: postgresql: //redshift-cluster-1.coykb9.eu-central-1.redshift.amazonaws.com: 5439 / db Отказано в соединении

Обновите правила безопасности для вашей группы красных смещений, чтобы разрешить соединение с 0.0.0.0/0.Это означает, что любой компьютер через Интернет может подключаться с использованием учетных данных.

...