适用于 AWS Data Pipeline 的 IAM 角色 - AWS Data Pipeline

AWS Data Pipeline 不再向新客户提供。的现有客户 AWS Data Pipeline 可以继续照常使用该服务。了解更多

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 AWS Data Pipeline 的 IAM 角色

AWS Data Pipeline 使用 AWS Identity and Access Management 角色。附加到 IAM 角色的权限策略决定了您的应用程序可以执行哪些操作 AWS Data Pipeline 以及它们可以访问哪些 AWS 资源。有关更多信息,请参阅《IAM 用户指南》中的 IAM 角色

AWS Data Pipeline 需要两个 IAM 角色:

  • 管道角色控制 AWS Data Pipeline 对 AWS 资源的访问。在管道对象定义中,role 字段指定此角色。

  • EC2 实例角色控制在 EC2 实例上运行的应用程序(包括 Amazon EMR 集群中的 EC2 实例)对 AWS 资源的访问权限。在管道对象定义中,resourceRole 字段指定此角色。

重要

如果您在 2022 年 10 月 3 日之前使用带有默认角色的 AWS Data Pipeline 控制台,AWS Data Pipeline 为您创建了 DataPipelineDefaultRole 并将 AWSDataPipelineRole 托管策略附加到该角色。自 2022 年 10 月 3 日起,AWSDataPipelineRole 托管策略已被弃用,使用控制台时必须为管道指定管道角色。

我们建议您查看现有管道,并确定 DataPipelineDefaultRole 是否与管道相关联以及 AWSDataPipelineRole 是否已关联到该角色。如果是,请查看此策略允许的访问权限,以确保其符合您的安全要求。根据需要添加、更新或替换附加到此角色的策略和策略语句。或者,您也可以更新管道以使用您创建的具有不同权限策略的角色。

AWS Data Pipeline 角色权限策略示例

每个角色都附加了一个或多个权限策略,用于确定该角色可以访问的 AWS 资源以及该角色可以执行的操作。本主题提供了管道角色的权限策略示例。它还提供了 AmazonEC2RoleforDataPipelineRole(默认 EC2 实例角色的托管策略 DataPipelineDefaultResourceRole)的内容。

管道角色权限策略示例

以下示例策略的范围经过限定,允许 AWS Data Pipeline 需要使用 Amazon EC2 和 Amazon EMR 资源运行管道的基本功能。它还提供了许多管道所要求的访问其他 AWS 资源所需的权限,如 Amazon Simple Storage Service 和 Amazon Simple Notification Service。如果管道中定义的对象不需要 AWS 服务的资源,我们强烈建议您移除用于访问该服务的权限。例如,如果您的管道未定义 D ynamoDBData 节点 或未使用 SnsAlarm 操作,我们建议您删除这些操作的允许语句。

  • 111122223333 替换为您的AWS账户 ID。

  • NameOfDataPipelineRole 替换为管道角色的名称(此策略所关联的角色)。

  • NameOfDataPipelineResourceRole 替换为 EC2 实例角色的名称。

  • us-west-1 替换为适合您的应用程序的区域。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetInstanceProfile", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:PassRole" ], "Resource": [ "arn:aws:iam::111122223333:role/NameOfDataPipelineRole", "arn:aws:iam::111122223333 :role/NameOfDataPipelineResourceRole" ] }, { "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CancelSpotInstanceRequests", "ec2:CreateNetworkInterface", "ec2:CreateSecurityGroup", "ec2:CreateTags", "ec2:DeleteNetworkInterface", "ec2:DeleteSecurityGroup", "ec2:DeleteTags", "ec2:DescribeAvailabilityZones", "ec2:DescribeAccountAttributes", "ec2:DescribeDhcpOptions", "ec2:DescribeImages", "ec2:DescribeInstanceStatus", "ec2:DescribeInstances", "ec2:DescribeKeyPairs", "ec2:DescribeLaunchTemplates", "ec2:DescribeNetworkAcls", "ec2:DescribeNetworkInterfaces", "ec2:DescribePrefixLists", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSpotPriceHistory", "ec2:DescribeSubnets", "ec2:DescribeTags", "ec2:DescribeVpcAttribute", "ec2:DescribeVpcEndpoints", "ec2:DescribeVpcEndpointServices", "ec2:DescribeVpcs", "ec2:DetachNetworkInterface", "ec2:ModifyImageAttribute", "ec2:ModifyInstanceAttribute", "ec2:RequestSpotInstances", "ec2:RevokeSecurityGroupEgress", "ec2:RunInstances", "ec2:TerminateInstances", "ec2:DescribeVolumeStatus", "ec2:DescribeVolumes", "elasticmapreduce:TerminateJobFlows", "elasticmapreduce:ListSteps", "elasticmapreduce:ListClusters", "elasticmapreduce:RunJobFlow", "elasticmapreduce:DescribeCluster", "elasticmapreduce:AddTags", "elasticmapreduce:RemoveTags", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ModifyInstanceGroups", "elasticmapreduce:GetCluster", "elasticmapreduce:DescribeStep", "elasticmapreduce:AddJobFlowSteps", "elasticmapreduce:ListInstances", "iam:ListInstanceProfiles", "redshift:DescribeClusters" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "sns:GetTopicAttributes", "sns:Publish" ], "Resource": [ "arn:aws:sns:us-west-1:111122223333:MyFirstSNSTopic", "arn:aws:sns:us-west-1:111122223333:MySecondSNSTopic", "arn:aws:sns:us-west-1:111122223333:AnotherSNSTopic" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListMultipartUploads" ], "Resource": [ "arn:aws:s3:::MyStagingS3Bucket", "arn:aws:s3:::MyLogsS3Bucket", "arn:aws:s3:::MyInputS3Bucket", "arn:aws:s3:::MyOutputS3Bucket", "arn:aws:s3:::AnotherRequiredS3Buckets" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectMetadata", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::MyStagingS3Bucket/*", "arn:aws:s3:::MyLogsS3Bucket/*", "arn:aws:s3:::MyInputS3Bucket/*", "arn:aws:s3:::MyOutputS3Bucket/*", "arn:aws:s3:::AnotherRequiredS3Buckets/*" ] }, { "Effect": "Allow", "Action": [ "dynamodb:Scan", "dynamodb:DescribeTable" ], "Resource": [ "arn:aws:dynamodb:us-west-1:111122223333:table/MyFirstDynamoDBTable", "arn:aws:dynamodb:us-west-1:111122223333:table/MySecondDynamoDBTable", "arn:aws:dynamodb:us-west-1:111122223333:table/AnotherDynamoDBTable" ] }, { "Effect": "Allow", "Action": [ "rds:DescribeDBInstances" ], "Resource": [ "arn:aws:rds:us-west-1:111122223333:db:MyFirstRdsDb", "arn:aws:rds:us-west-1:111122223333:db:MySecondRdsDb", "arn:aws:rds:us-west-1:111122223333:db:AnotherRdsDb" ] } ] }

EC2 实例角色的默认托管策略

下面显示的是 AmazonEC2RoleforDataPipelineRole 的内容。这是附加到 DataPipelineDefaultResourceRole AWS Data Pipeline 的默认资源角色的托管策略。在为管道定义资源角色时,我们建议您从此权限策略开始,然后删除不需要的 AWS 服务操作的权限。

所示的是该策略的第 3 版,这在撰写本文时是最新版本。在 IAM 控制台中查看最新版的策略。

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

为 AWS Data Pipeline 创建 IAM 角色和编辑角色权限

在 IAM 控制台中,请按照以下过程为 AWS Data Pipeline 创建角色。该过程包括两个步骤。首先,创建一个权限策略以附加到该角色。然后,创建一个角色并附加到该策略。创建角色后,您可以通过附加和分离权限策略来更改角色的权限。

注意

当您按照下文所述使用控制台为 AWS Data Pipeline 创建角色时,IAM 会创建并附加该角色所需的相应信任策略。

创建权限策略以与 AWS Data Pipeline 角色配合使用
  1. 访问:https://console.aws.amazon.com/iam/,打开 IAM 控制台。

  2. 在导航窗格中,选择 Policies (策略),然后选择 Create policy (创建策略)

  3. 请选择 JSON 选项卡。

  4. 如果您要创建管道角色,请将策略示例的内容复制并粘贴到 管道角色权限策略示例 中,然后根据您的安全要求酌情对其进行编辑。或者,如果您要创建自定义 EC2 实例角色,请对 EC2 实例角色的默认托管策略 中的示例执行相同的操作。

  5. 选择Review policy(查看策略)

  6. 输入您策略的名称(如 MyDataPipelineRolePolicy)和可选描述,然后选择创建策略

  7. 记下策略的名称。当您创建角色时,您将需要它。

为 AWS Data Pipeline 创建 IAM 角色
  1. 访问:https://console.aws.amazon.com/iam/,打开 IAM 控制台。

  2. 在导航窗格中,选择角色,然后选择创建角色

  3. 选择使用案例下,选择数据管道

  4. 选择您的使用案例下,请执行以下操作之一:

    • 选择 Data Pipeline 以创建管道角色。

    • 选择 EC2 Role for Data Pipeline 以创建资源角色。

  5. 选择Next: Permissions(下一步: 权限)

  6. 如果列出了 AWS Data Pipeline 的默认策略,请继续执行以下步骤来创建角色,然后根据下一个过程中的说明对其进行编辑。否则,输入您在上一个过程中创建的策略的名称,然后从列表中选择它。

  7. 选择下一步:标签,输入任何要添加到角色的标签,然后选择下一步:审核

  8. 输入角色的名称(如 MyDataPipelineRole)和可选描述,然后选择创建角色

为 AWS Data Pipeline 的 IAM 角色附加或取消附加权限策略
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择角色

  3. 在搜索框中,开始键入要编辑的角色的名称,例如 DataPipelineDefaultRoleMyDataPipelineRole,然后从列表中选择角色名称

  4. 权限选项卡上,执行以下操作:

    • 要分离权限策略,请在权限策略下,选择策略条目最右侧的“删除”按钮。当系统提示进行确认时,选择分离

    • 要附加您之前创建的策略,请选择附加策略。在搜索框中,开始键入要编辑的策略的名称,从列表中选中它,然后选择附加策略

更改现有管道的角色

如果要为管道分配不同的管道角色或资源角色,则可以在 AWS Data Pipeline 控制台中使用架构师编辑器。

使用控制台来编辑分配给管道的角色
  1. 打开 AWS Data Pipeline 控制台,网址为 https://console.aws.amazon.com/datapipeline/

  2. 从列表中选择管道,然后选择操作编辑

  3. 在架构师编辑器的右侧窗格中,选择其他

  4. 资源角色角色列表中,选择要为 AWS Data Pipeline 分配的角色,然后选择保存