Конвейер данных AWS: проблема с разрешениями S3 Access для роли IAM - PullRequest
0 голосов
/ 01 февраля 2019

Я использую шаблон Load S3 data into RDS MySql table в AWS Data Pipeline для импорта csv из корзины S3 в нашу RDS MySql.Однако я (как пользователь IAM с полными правами администратора) сталкиваюсь с предупреждением, которое не могу решить:

Объект: Ec2Instance - ВНИМАНИЕ: Не удалось проверить доступ S3 для роли.Убедитесь, что у роли ('DataPipelineDefaultRole') есть разрешения s3: Get *, s3: List *, s3: Put * и sts: AssumeRole для DataPipeline.

Google сказал мне не использовать политики по умолчанию дляDataPipelineDefaultRole и DataPipelineDefaultResourceRole.На основе документации Роли IAM для AWS Data Pipeline и на этом форуме поддержки AWS Я использовал встроенную политику и редактировал доверительные отношения для обеих ролей.

Политика DataPipelineDefaultRole:

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

Доверительные отношения DataPipelineDefaultRole:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ec2.amazonaws.com",
          "elasticmapreduce.amazonaws.com",
          "datapipeline.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Политика 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": [
                "*"
            ]
        }
    ]
}

Доверительные отношения DataPipelineDefaultResourceRole:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Я пробовал несколько вариантов / комбинаций, но предупреждение остается.Есть кто-нибудь, кто знает, как решить эту проблему с разрешениями?

1 Ответ

0 голосов
/ 22 февраля 2019

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

Просто помните, что политики IAM являются глобальными, тогда как конвейер данных существует в определенном регионе, поэтому дайте ему некоторое время ожидания между созданием политики / роли и созданиемКанал данных, AWS требуется время для репликации изменений политики IAM во всех регионах.

Ex. if you are using bash aws-cli to create/update role & then create/activate data-pipeline, insert `sleep Xs` between role & datapipeline creation.

Nitpick вам не требуется ec2.amazonaws.com в доверительных отношениях для DataPipelineDefaultRole.

...