

AWS Data Pipeline 不再向新客户提供。的现有客户 AWS Data Pipeline 可以继续照常使用该服务。[了解详情](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

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

# Identity and Access Management AWS Data Pipeline
<a name="dp-control-access"></a>

您的安全凭证使 AWS 中的服务可以识别您，并授予您对 AWS 资源（例如您的管道）的使用权限。您可以使用 AWS Data Pipeline 和 AWS Identity and Access Management (IAM) 的功能允许 AWS Data Pipeline 其他用户访问您的 AWS Data Pipeline 资源，而无需共享您的安全证书。

组织可以共享对管道的访问权限，这样该组织中的个人可以合作开发和维护。不过，可能需要执行以下操作：
+ 控制哪些用户可以访问特定的管道
+ 保护生产管道，避免被错误编辑
+ 允许审计员具有管道的只读访问权限，但阻止他们进行更改

AWS Data Pipeline 与 AWS Identity and Access Management (IAM) 集成，后者提供多种功能：
+ 在中创建用户和群组 AWS 账户。
+ 在您的用户之间轻松共享您的 AWS 资源 AWS 账户。
+ 为每个用户分配具有唯一性的安全凭证
+ 控制每个用户对服务和资源的访问
+ 为您 AWS 账户的所有用户获取一张账单。

通过将 IAM 与配合使用 AWS Data Pipeline，您可以控制组织中的用户是否可以使用特定 API 操作执行任务，以及他们是否可以使用特定的 AWS 资源。您可以基于管道标签和工作线程组使用 IAM 策略，将您的管道与其他用户分享并控制这些用户拥有的访问级别。

**Topics**
+ [适用的 IAM 政策 AWS Data Pipeline](dp-iam-resourcebased-access.md)
+ [的策略示例 AWS Data Pipeline](dp-example-tag-policies.md)
+ [适用的 IAM 角色 AWS Data Pipeline](dp-iam-roles.md)

# 适用的 IAM 政策 AWS Data Pipeline
<a name="dp-iam-resourcebased-access"></a>

默认情况下，IAM 实体没有创建或修改 AWS 资源的权限。要允许 IAM 实体创建或修改资源和执行任务，您必须创建 IAM policy 以允许 IAM 实体使用他们所需的特定资源和 API 操作，然后将这些策略与需要这些权限的 IAM 实体关联起来。

在将策略附加到一个用户或一组用户时，它会授权或拒绝用户使用指定资源执行指定任务。有关 IAM policy 的一般信息，请参阅 *IAM 用户指南*中的[权限与策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/PermissionsAndPolicies.html)。有关管理和创建自定义 IAM policy 的更多信息，请参阅[管理 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html)。

**Topics**
+ [策略语法](#dp-policy-syntax)
+ [使用标签控制对管道的访问权限](#dp-control-access-tags)
+ [使用工作线程组控制对管道的访问权限](#dp-control-access-workergroup)

## 策略语法
<a name="dp-policy-syntax"></a>

IAM 策略是包含一个或多个语句的 JSON 文档。每个语句的结构如下：

```
{
  "Statement":[{
    "Effect":"effect",
    "Action":"action",
    "Resource":"*",
    "Condition":{
      "condition":{
        "key":"value"
        }
      }
    }
  ]
}
```

策略声明包含以下元素：
+ **Effect：**此 *effect* 可以是 `Allow` 或 `Deny`。在默认情况下，IAM 实体没有使用资源和 API 操作的许可，因此，所有请求均会被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。
+ **Action**：*action* 是对其授予或拒绝权限的特定 API 操作。有关操作的列表 AWS Data Pipeline，请参阅 *AWS Data Pipeline API 参考*中的[操作](https://docs.aws.amazon.com/datapipeline/latest/APIReference/API_Operations.html)。
+ **Resource**：受操作影响的资源。此处唯一有效值为 `"*"`。
+ **条件**：条件是可选的。它们可以用于控制策略生效的时间。

  AWS Data Pipeline 实现 AWS 范围的上下文密钥（参见[条件的可用密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#AvailableKeys)），以及以下特定于服务的密钥。
  + `datapipeline:PipelineCreator` - 向创建管道的用户授予访问权限。有关示例，请参阅[授予管道所有者完全访问权限](dp-example-tag-policies.md#ex3)。
  + `datapipeline:Tag` - 基于管道标记授予访问权限。有关更多信息，请参阅 [使用标签控制对管道的访问权限](#dp-control-access-tags)。
  + `datapipeline:workerGroup` - 基于工作线程组的名称授予访问权限。有关更多信息，请参阅 [使用工作线程组控制对管道的访问权限](#dp-control-access-workergroup)。

## 使用标签控制对管道的访问权限
<a name="dp-control-access-tags"></a>

您可以创建引用管道标签的 IAM 策略。这使您能够使用管道标签来执行以下操作：
+ 授予对管道的只读访问权限
+ 授予对管道的 read/write 访问权限
+ 阻止对管道的访问

例如，假设一个管理员有生产和开发两个管道环境，每个环境有一个 IAM 组。对于生产环境中的管道，经理向生产 IAM 组中的用户授予 read/write 访问权限，但向开发人员 IAM 组中的用户授予只读访问权限。对于开发环境中的管道，经理授予对生产和开发者 IAM 组的 read/write 访问权限。

要实现这一场景，管理员使用“environment = production”标签来标记生产管道，并将以下策略附加到开发人员 IAM 组。第一条语句授予对所有管道的只读访问权限。第二条语句授予对没有 “环境=生产” 标签的管道的 read/write 访问权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "datapipeline:Describe*",
        "datapipeline:ListPipelines",
        "datapipeline:GetPipelineDefinition",
        "datapipeline:QueryObjects"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "datapipeline:*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {"datapipeline:Tag/environment": "production"}
      }
    }
  ]
}
```

------

此外，管理员将以下策略附加到生产 IAM 组。此语句授予对所有管道的完全访问权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "datapipeline:*",
      "Resource": "*"
    }
  ]
}
```

------

有关更多示例，请参阅[基于标签向用户授予只读访问权限](dp-example-tag-policies.md#ex1)和[基于标签向用户授予完全访问权限](dp-example-tag-policies.md#ex2)。

## 使用工作线程组控制对管道的访问权限
<a name="dp-control-access-workergroup"></a>

您可以创建引用工作线程组名称的 IAM 策略。

例如，假设一个管理员有生产和开发两个管道环境，每个环境有一个 IAM 组。管理员有三个数据库服务器，分别为生产、生产前和开发人员环境配置了任务运行程序。管理员想要确保用户在生产 IAM 组中的用户可以创建推送任务到生产资源的管道，而开发 IAM 组中的用户可以创建推送任务到生产前和开发人员资源的管道。

要实现这种场景，管理员使用生产凭证在生产资源上安装任务运行程序，并将 `workerGroup` 设置为“prodresource”。此外，管理员使用开发凭证在开发资源上安装任务运行程序，并将 `workerGroup` 设置为“pre-production”和“development”。管理员将以下策略附加到开发人员 IAM 组来阻止对“prodresource”资源的访问。第一条语句授予对所有管道的只读访问权限。当工作人员组的名称前缀为 “dev” 或 “pre-prod” 时，第二条语句授予对管道的 read/write 访问权限。

此外，管理员将以下策略附加到生产 IAM 组来授予对“prodresource”资源的访问权限。第一条语句授予对所有管道的只读访问权限。当工作人员组的名称前缀为 “prod” 时，第二条语句授予 read/write 访问权限。

# 的策略示例 AWS Data Pipeline
<a name="dp-example-tag-policies"></a>

以下示例演示如何授予用户对管道的完全或受限访问权限。

**Topics**
+ [示例 1：基于标签授予用户只读访问权限](#ex1)
+ [示例 2：基于标签授予用户完全访问权限](#ex2)
+ [示例 3：授予管道所有者完全访问权限](#ex3)
+ [示例 4：向用户授予 AWS Data Pipeline 控制台访问权限](#example4-grant-users-access-to-console)

## 示例 1：基于标签授予用户只读访问权限
<a name="ex1"></a>

以下策略允许用户使用只读 AWS Data Pipeline API 操作，但仅限于标有 “环境=生产” 标签的管道。

 ListPipelines API 操作不支持基于标签的授权。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "datapipeline:Describe*",
        "datapipeline:GetPipelineDefinition",
        "datapipeline:ValidatePipelineDefinition",
        "datapipeline:QueryObjects"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "datapipeline:Tag/environment": "production"
        }
      }
    }
  ]
}
```

------

## 示例 2：基于标签授予用户完全访问权限
<a name="ex2"></a>

以下策略允许用户使用所有 AWS Data Pipeline API 操作，但仅限于标有 “en ListPipelines vironment=test” 标签的管道。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "datapipeline:*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "datapipeline:Tag/environment": "test"
        }
      }
    }
  ]
}
```

------

## 示例 3：授予管道所有者完全访问权限
<a name="ex3"></a>

以下策略允许用户使用所有 AWS Data Pipeline API 操作，但只能使用自己的管道。

## 示例 4：向用户授予 AWS Data Pipeline 控制台访问权限
<a name="example4-grant-users-access-to-console"></a>

以下策略允许用户使用 AWS Data Pipeline 控制台创建和管理管道。

该策略包括针对与该 AWS Data Pipeline 需求相关的特定资源的`PassRole`权限`roleARN`的操作。有关基于身份 (IAM) `PassRole` 权限的更多信息，请参阅博客文章[授予使用 IAM 角色启动 EC2 实例的PassRole权限（权限）](https://aws.amazon.com/blogs/security/granting-permission-to-launch-ec2-instances-with-iam-roles-passrole-permission/)。

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [{
			"Action": [
				"cloudwatch:*",
				"datapipeline:*",
				"dynamodb:DescribeTable",
				"elasticmapreduce:AddJobFlowSteps",
				"elasticmapreduce:ListInstance*",
				"iam:AddRoleToInstanceProfile",
				"iam:CreateInstanceProfile",
				"iam:GetInstanceProfile",
				"iam:GetRole",
				"iam:GetRolePolicy",
				"iam:ListInstanceProfiles",
				"iam:ListInstanceProfilesForRole",
				"iam:ListRoles",
				"rds:DescribeDBInstances",
				"rds:DescribeDBSecurityGroups",
				"redshift:DescribeClusters",
				"redshift:DescribeClusterSecurityGroups",
				"s3:List*",
				"sns:ListTopics"
			],
			"Effect": "Allow",
			"Resource": [
				"*"
			]
		},
		{
			"Action": "iam:PassRole",
			"Effect": "Allow",
			"Resource": [
				"arn:aws:iam::*:role/DataPipelineDefaultResourceRole",
				"arn:aws:iam::*:role/DataPipelineDefaultRole"
			]
		}
	]
}
```

------

# 适用的 IAM 角色 AWS Data Pipeline
<a name="dp-iam-roles"></a>

AWS Data Pipeline 使用 AWS Identity and Access Management 角色。附加到 IAM 角色的权限策略决定了您的应用程序可以执行哪些操作 AWS Data Pipeline 以及它们可以访问哪些 AWS 资源。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

AWS Data Pipeline 需要两个 IAM 角色：
+ **管道角色**控制对您的 AWS 资源的 AWS Data Pipeline 访问权限。在管道对象定义中，`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 角色权限策略示例
<a name="dp-role-permissions-policy-examples"></a>

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

### 管道角色权限策略示例
<a name="dp-role-example-policy"></a>

以下示例策略的范围是允许 AWS Data Pipeline 需要使用 Amazon EC2 和 Amazon EMR 资源运行管道的基本功能。它还提供访问许多渠道 AWS 所需的其他资源（例如亚马逊简单存储服务和亚马逊简单通知服务）的权限。如果管道中定义的对象不需要 AWS 服务的资源，我们强烈建议您移除访问该服务的权限。例如，如果您的管道未定义 [Dynamo 节点 DBData](dp-object-dynamodbdatanode.md) 或未使用 [SnsAlarm](dp-object-snsalarm.md) 操作，我们建议您删除这些操作的允许语句。
+ `111122223333`替换为您的 AWS 账户 ID。
+ `NameOfDataPipelineRole` 替换为管道角色的名称（此策略所关联的角色）。
+ `NameOfDataPipelineResourceRole` 替换为 EC2 实例角色的名称。
+ `us-west-1` 替换为适合您的应用程序的区域。

### EC2 实例角色的默认托管策略
<a name="dp-resource-role-example-policy"></a>

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

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

------
#### [ JSON ]

****  

```
{
  "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": ["*"]
    }]
}
```

------

## 为其创建 IAM 角色 AWS Data Pipeline 和编辑角色权限
<a name="dp-iam-roles-new"></a>

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

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

**创建权限策略以与角色配合使用 AWS Data Pipeline**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中选择**策略**，然后选择**创建策略**。

1. <a name="step3"></a>选择 **JSON** 选项卡。

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

1. 选择**查看策略**。

1. 输入您策略的名称（如 `MyDataPipelineRolePolicy`）和可选**描述**，然后选择**创建策略**。

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

**为创建 IAM 角色 AWS Data Pipeline**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**，然后选择**创建角色**。

1. 在**选择使用案例**下，选择**数据管道**。

1. 在**选择您的使用案例**下，请执行以下操作之一：
   + 选择 `Data Pipeline` 以创建管道角色。
   + 选择 `EC2 Role for Data Pipeline` 以创建资源角色。

1. 选择**下一步: 权限**。

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

1. 选择**下一步：标签**，输入任何要添加到角色的标签，然后选择**下一步：审核**。

1. 输入角色的名称（如 `MyDataPipelineRole`）和可选**描述**，然后选择**创建角色**。

**为某个 IAM 角色附加或取消权限策略 AWS Data Pipeline**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**

1. 在搜索框中，开始键入要编辑的角色的名称（例如**DataPipelineDefaultRole**或 **MyDataPipelineRole**），然后从列表中选择**角色名称**。

1. 在**权限**选项卡上，执行以下操作：
   + 要分离权限策略，请在**权限策略**下，选择策略条目最右侧的“删除”按钮。当系统提示进行确认时，选择**分离**。
   + 要附加您之前创建的策略，请选择**附加策略**。在搜索框中，开始键入要编辑的策略的名称，从列表中选中它，然后选择**附加策略**。

## 更改现有管道的角色
<a name="dp-iam-change-console"></a>

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

**使用控制台来编辑分配给管道的角色**

1. 打开 AWS Data Pipeline 控制台，网址为[https://console.aws.amazon.com/datapipeline/](https://console.aws.amazon.com/datapipeline/)。

1. 从列表中选择管道，然后选择**操作**、**编辑**。

1. 在架构师编辑器的右侧窗格中，选择**其他**。

1. 从 “**资源角色**和**角色**” 列表中，选择要为 AWS Data Pipeline 其分配的角色，然后选择 “**保存**”。