AWS Data Pipeline の IAM ロール - 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 では次の 2 つの IAM ロールが必要です。

  • パイプラインロールは、AWS リソースへの AWS Data Pipeline アクセス権限を制御します。パイプラインオブジェクト定義では、role フィールドによってこのロールが指定されます。

  • EC2 インスタンスロールは、EC2 インスタンス (Amazon EMR クラスター内の EC2 インスタンスを含む) で実行されているアプリケーションが AWS リソースに対して備えるアクセス権限を制御します。パイプラインオブジェクト定義では、resourceRole フィールドによってこのロールが指定されます。

重要

デフォルトロールで AWS Data Pipeline コンソールを使用して 2022 年 10 月 3 日より前にパイプラインを作成した場合、AWS Data Pipeline によって DataPipelineDefaultRole が作成され、AWSDataPipelineRole マネージドポリシーがロールにアタッチされています。2022 年 10 月 3 日から、AWSDataPipelineRole マネージドポリシーは廃止され、コンソールを使用するときにパイプラインのパイプラインロールを指定する必要があります。

既存のパイプラインを確認し、DataPipelineDefaultRole がパイプラインと関連付けられているかどうか、および AWSDataPipelineRole がそのロールにアタッチされているかどうかを判別することをお勧めします。満たされている場合は、このポリシーで許可されているアクセス権限を確認して、セキュリティ要件に適したものになっていることを確認してください。必要に応じて、このロールにアタッチされたポリシーおよびポリシーステートメントを追加、更新、または置換します。または、パイプラインを更新して、異なるアクセス許可ポリシーで作成したロールを使用することもできます。

AWS Data Pipeline ロールのアクセス許可ポリシーの例

各ロールには、そのロールがアクセスできる AWS リソースおよびそのロールが実行できるアクションを決定する 1 つ以上のアクセス許可ポリシーがアタッチされています。このトピックでは、パイプラインロールのアクセス許可ポリシーの例を示します。また、デフォルトの EC2 インスタンスロール DataPipelineDefaultResourceRole のマネージドポリシーである AmazonEC2RoleforDataPipelineRole のコンテンツも示します。

パイプラインロールのアクセス許可ポリシーの例

以下のポリシー例は、Amazon EC2 および Amazon EMR リソースを使用してパイプラインを実行するために AWS Data Pipeline で必要な必須の関数を許可するようにスコープ設定されています。また、多くのパイプラインで必要となる他の AWS リソース (Amazon Simple Storage Service や Amazon Simple Notification Service など) にアクセスするためのアクセス許可も指定しています。パイプラインで定義されているオブジェクトで AWS サービスのリソースが必要ない場合、そのサービスにアクセスするためのアクセス許可を削除することを強くお勧めします。例えば、パイプラインで DynamoDBDataNode が定義されておらず、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 のコンテンツを以下に示します。これは、AWS Data Pipeline のデフォルトリソースロール (DataPipelineDefaultResourceRole) にアタッチされているマネージドポリシーです。パイプラインのリソースロールを定義するときは、このアクセス許可ポリシーから開始し、必要ない 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 のロールを作成します。このプロセスは次の 2 つのステップで構成されています。まず、ロールにアタッチするアクセス許可ポリシーを作成します。次に、ロールを作成して、ポリシーをアタッチします。ロールを作成した後、アクセス許可ポリシーをアタッチおよびデタッチして、ロールのアクセス許可を変更できます。

注記

以下の説明に従ってコンソールを使用して 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. [ポリシーの確認] を選択します。

  6. ポリシーの名前 (例えば、MyDataPipelineRolePolicy) とオプションの [Description] (説明) を入力してから、[Create policy] (ポリシーの作成) を選択します。

  7. ポリシーの名前をメモします。これは、ロールを作成するときに必要になります。

AWS Data Pipeline 用に IAM ロールを作成するには
  1. https://console.aws.amazon.com/iam/IAMコンソールを開きます。

  2. ナビゲーションペインで [Roles] (ロール) を選択し、続いて [Create Role] (ロールの作成) を選択します。

  3. [Choose a use case] (ユースケースの選択) で、[Data Pipeline] を選択します。

  4. [Select your use case] (ユースケースの選択) で、次のいずれかを実行します。

    • Data Pipeline を選択して、パイプラインロールを作成します。

    • EC2 Role for Data Pipeline を選択して、リソースロールを作成します。

  5. [Next: Permissions] (次へ: 許可) を選択します。

  6. AWS Data Pipeline のデフォルトポリシーがリストされている場合、以下のステップに進んでロールを作成してから、次の手順の説明に従ってそのロールを編集します。それ以外の場合は、上記の手順で作成したポリシーの名前を入力し、リストからそのポリシーを選択します。

  7. [Next: Tags] (次へ: タグ) を選択し、ロールに追加するタグを入力してから、[Next: Review] (次へ: 確認) を選択します。

  8. ロールの名前 (例えば、MyDataPipelineRole) とオプションの [Description] (説明) を入力してから、[Create role] (ロールの作成) を選択します。

AWS Data Pipeline の IAM ロールのアクセス許可ポリシーをアタッチまたはデタッチするには
  1. https://console.aws.amazon.com/iam/IAMコンソールを開きます。

  2. ナビゲーションペインで [Roles] (ロール) を選択します。

  3. 検索ボックスで、編集するロールの名前 (例えば、DataPipelineDefaultRoleMyDataPipelineRole) を入力していき、リストから [Role name] (ロール名) を選択します。

  4. [Permissions] (アクセス許可) タブで、以下を実行します。

    • アクセス許可ポリシーをデタッチするには、[Permissions policies] (アクセス許可ポリシー) で、ポリシーエントリの右端にある削除ボタンを選択します。確認を求められたら、[Detach] (デタッチ) を選択します。

    • 前に作成したポリシーをアタッチするには、[Attach policies] (ポリシーをアタッチします) を選択します。検索ボックスで、編集するポリシーの名前を入力していき、リストからポリシーを選択し、[Attach policy] (ポリシーのアタッチ) を選択します。

既存のパイプラインのロールの変更

パイプラインに別のパイプラインロールまたはリソースロールを割り当てる場合は、AWS Data Pipeline コンソールでアーキテクトエディタを使用できます。

コンソールを使用してパイプラインに割り当てられているロールを編集するには
  1. AWS Data Pipeline コンソール (https://console.aws.amazon.com/datapipeline/) を開きます。

  2. リストからパイプラインを選択し、[Actions] (アクション)、[Edit] (編集) を選択します。

  3. アーキテクトエディタの右ペインで、[Others] (その他) を選択します。

  4. [Resource Role] (リソースロール) および [Role] (ロール) のリストで、割り当てる AWS Data Pipeline のロールを選択してから、[Save] (保存) を選択します。