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에게는 두 가지 IAM 역할이 필요합니다.

  • 파이프라인 역할은 AWS 리소스에 대한 AWS Data Pipeline액세스를 제어합니다. 파이프라인 객체 정의에서, role필드가 이 역할을 지정합니다.

  • EC2 인스턴스 역할은 Amazon EMR 클러스터의 EC2 인스턴스를 포함하여 EC2 인스턴스에서 실행되는 애플리케이션이 보유한 AWS리소스에 대한 액세스를 제어합니다. 파이프라인 객체 정의에서, resourceRole 필드가 이 역할을 지정합니다.

중요

기본 역할이 있는 AWS Data Pipeline콘솔을 사용하여 2022년 10월 3일 이전에 파이프라인을 생성한 경우, AWS Data Pipeline은(는) 사용자를 위한 DataPipelineDefaultRole을(를) 생성했고, AWSDataPipelineRole관리형 정책을 역할에 연결했습니다. 2022년 10월 3일부터 AWSDataPipelineRole관리형 정책은 더 이상 사용되지 않으며 콘솔을 사용할 때 파이프라인을 위해 파이프라인 역할을 지정해야 합니다.

기존 파이프라인을 검토하여 DataPipelineDefaultRole이(가) 파이프라인과 연결되어 있는지, AWSDataPipelineRole이(가) 해당 역할에 연결되어 있는지 결정하는 것이 좋습니다. 그런 경우, 이 정책이 허용하는 액세스를 검토하여 보안 요구 사항에 적합한지 확인하세요. 필요에 따라 이 역할에 연결된 정책 및 정책 설명을 추가, 업데이트 또는 교체하십시오. 대안으로, 다른 권한 정책으로 생성한 역할을 사용하도록 파이프라인을 업데이트할 수도 있습니다.

AWS Data Pipeline 역할의 권한 정책 예시

각 역할에는 역할이 액세스할 수 있는 AWS리소스와 역할이 수행할 수 있는 작업을 결정하는 하나 이상의 권한 정책이 연결되어 있습니다. 이 항목은 파이프라인 역할에 대한 권한 정책의 예를 제공합니다. 또한 기본 EC2 인스턴스 역할 DataPipelineDefaultResourceRole에 대한 관리형 정책인 AmazonEC2RoleforDataPipelineRole의 내용도 제공합니다.

파이프라인 역할 권한 정책 예

다음 예제 정책은 AWS Data Pipeline이(가) Amazon EC2 및 Amazon EMR 리소스로 파이프라인을 실행하는 데 필요한 필수 기능을 허용하도록 범위가 지정되었습니다. 또한 Amazon Simple Storage Service, Amazon Simple Notification Service 등 여러 파이프라인에 필요한 다른 AWS리소스에 액세스할 수 있는 권한을 제공합니다. 파이프라인에 정의된 객체에 AWS서비스의 리소스가 필요하지 않은 경우, 해당 서비스에 액세스할 수 있는 권한을 제거하는 것이 좋습니다. 예를 들어 파이프라인이 DynamoDBDataNode을(를) 정의하지 않거나 SnsAlarm작업을 사용하지 않는 경우, 해당 작업에 대한 allow 문을 제거하는 것이 좋습니다.

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

IAM 역할 생성 AWS Data Pipeline및 역할 권한 편집

다음 절차를 사용하여 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. 다음: 권한을 선택합니다.

  6. AWS Data Pipeline에 대한 기본 정책이 나열되어 있는 경우, 다음 단계를 진행하여 역할을 생성한 후, 다음 절차의 지침에 따라 편집하십시오. 그렇지 않으면, 위 절차에서 생성한 정책의 이름을 입력한 다음 그것을 목록에서 선택합니다.

  7. 다음: 태그를 선택하고, 역할에 추가할 태그를 입력한 후, 다음: 검토를 선택합니다.

  8. 역할 이름(예: MyDataPipelineRole) 및 선택 사항인 설명을 입력한 다음 역할 생성을 선택합니다.

AWS Data Pipeline의 IAM 역할에 대한 권한 정책을 연결 또는 분리하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할을 선택합니다.

  3. 검색 상자에 편집하려는 역할 이름(예: DataPipelineDefaultRole 또는 MyDataPipelineRole)을 입력한 다음 목록에서 역할 이름을 선택합니다.

  4. 권한 탭에서 다음을 수행합니다.

    • 권한 정책을 분리하려면 권한 정책에서 정책 항목의 맨 오른쪽에 있는 제거 버튼을 선택합니다. 확인하라는 메시지가 나타나면 분리를 선택합니다.

    • 이전에 만든 정책을 연결하려면 정책 연결을 선택합니다. 검색 상자에 편집하려는 정책의 이름을 입력하고 목록에서 정책을 선택한 다음 정책 연결을 선택합니다.

기존 파이프라인의 역할 변경

파이프라인에 다른 파이프라인 역할 또는 리소스 역할을 할당하려는 경우 AWS Data Pipeline콘솔에서 아키텍트 편집기를 사용할 수 있습니다.

콘솔을 사용하여 파이프라인에 할당된 역할을 편집하려면
  1. https://console.aws.amazon.com/datapipeline/에서 AWS Data Pipeline 콘솔을 엽니다.

  2. 목록에서 파이프라인을 선택한 다음 작업, 편집을 선택합니다.

  3. 아키텍트 에디터의 오른쪽 창에서 기타를 선택합니다.

  4. 리소스 역할역할 목록에서 할당하려는 AWS Data Pipeline의 역할을 선택한 다음 저장을 선택합니다.