Amazon MWAA 실행 역할 - Amazon Managed Workflows for Apache Airflow

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon MWAA 실행 역할

실행 역할은 Amazon Managed Workflows for Apache Airflow에 사용자를 대신하여 다른 AWS 서비스의 리소스를 호출할 수 있는 권한을 부여하는 권한 정책이 있는 AWS Identity and Access Management (IAM) 역할입니다. 여기에는 Amazon S3 버킷, AWS 소유 키 및 CloudWatch 로그와 같은 리소스가 포함될 수 있습니다. Amazon MWAA 환경에는 환경당 하나의 실행 역할이 필요합니다. 이 주제에서는 Amazon이 환경에서 사용하는 다른 AWS 리소스에 MWAA 액세스할 수 있도록 환경의 실행 역할을 사용하고 구성하는 방법을 설명합니다.

실행 역할 개요

Amazon이 환경에서 사용하는 다른 AWS 서비스를 사용할 수 MWAA 있는 권한은 실행 역할에서 가져옵니다. Amazon MWAA 실행 역할에는 환경에서 사용하는 다음 AWS 서비스에 대한 권한이 필요합니다.

  • Amazon CloudWatch (CloudWatch) - Apache Airflow 지표 및 로그를 전송합니다.

  • Amazon Simple Storage Service(Amazon S3) - 환경의 DAG 코드 및 지원 파일(예: )을 구문 분석합니다requirements.txt.

  • Amazon Simple Queue Service(Amazon SQS) - Amazon가 소유한 Amazon 대기열에서 환경의 Apache Airflow 작업을 SQS 대기열에 넣습니다MWAA.

  • AWS Key Management Service (AWS KMS) - 환경의 데이터 암호화(AWS 소유 키 또는 고객 관리형 키 사용).

    참고

    Amazon이 AWS 소유 KMS 키를 사용하여 데이터를 암호화MWAA하도록 선택한 경우 Amazon MWAA 실행 역할에 연결된 정책에서 Amazon를 통해 계정 외부에 저장된 임의의 KMS 키에 대한 액세스 권한을 부여하는 권한을 정의해야 합니다SQS. 환경의 실행 역할이 임의 KMS 키에 액세스하려면 다음 두 가지 조건이 필요합니다.

    • 타사 계정의 KMS 키는 리소스 정책을 통해이 교차 계정 액세스를 허용해야 합니다.

    • DAG 코드는 타사 계정airflow-celery-에서 로 시작하고 암호화에 동일한 KMS 키를 사용하는 Amazon SQS 대기열에 액세스해야 합니다.

    리소스에 대한 교차 계정 액세스와 관련된 위험을 완화하려면 워크플로가 계정 외부의 임의의 Amazon SQS 대기열에 액세스하지 않도록 DAGs에 배치된 코드를 검토하는 것이 좋습니다. 또한 자체 계정에 저장된 고객 관리형 KMS 키를 사용하여 Amazon에서 암호화를 관리할 수 있습니다MWAA. 이렇게 하면 계정의 KMS 키에만 액세스하도록 환경의 실행 역할이 제한됩니다.

    암호화 옵션을 선택한 후에는 기존 환경에 대한 선택사항을 변경할 수 없다는 점에 유의하십시오.

실행 역할에는 다음 IAM 작업에 대한 권한도 필요합니다.

  • airflow:PublishMetrics - Amazon이 환경의 상태를 MWAA 모니터링할 수 있도록 허용합니다.

권한은 기본적으로 연결됩니다.

Amazon MWAA 콘솔의 기본 옵션을 사용하여 실행 역할과 AWS 소유 키를 생성한 다음이 페이지의 단계를 사용하여 실행 역할에 권한 정책을 추가할 수 있습니다.

  • 콘솔에서 새 역할 생성 옵션을 선택하면 Amazon은 환경에 필요한 최소 권한을 실행 역할에 MWAA 연결합니다.

  • 경우에 따라 Amazon은 최대 권한을 MWAA 연결합니다. 예를 들어 Amazon MWAA 콘솔에서 옵션을 선택하여 환경을 생성할 때 실행 역할을 생성하는 것이 좋습니다. Amazon은 실행 역할의 정규식 패턴을 로 사용하여 모든 CloudWatch 로그 그룹에 대한 권한 정책을 자동으로 MWAA 추가합니다"arn:aws:logs:your-region:your-account-id:log-group:airflow-your-environment-name-*".

다른 AWS 서비스를 사용할 수 있는 권한을 추가하는 방법

Amazon은 환경이 생성된 후에는 기존 실행 역할에 권한 정책을 추가하거나 편집할 MWAA 수 없습니다. 사용자는 환경에 필요한 추가 권한 정책으로 실행 역할을 업데이트해야 합니다. 예를 들어에 액세스DAG해야 하는 경우 AWS Glue Amazon은 환경에서 이러한 권한이 필요한지 자동으로 감지하거나 실행 역할에 권한을 추가할 MWAA 수 없습니다.

다음 두 가지 방법으로 실행 역할에 권한을 추가할 수 있습니다.

  • 실행 역할 인라인에 대한 JSON 정책을 수정합니다. 이 페이지의 샘플 JSON 정책 문서를 사용하여 IAM 콘솔에서 실행 역할의 JSON 정책을에 추가하거나 교체할 수 있습니다.

  • AWS 서비스에 대한 JSON 정책을 생성하고 실행 역할에 연결함으로써. 이 페이지의 단계를 사용하여 AWS 서비스에 대한 새 JSON 정책 문서를 IAM 콘솔의 실행 역할에 연결할 수 있습니다.

실행 역할이 이미 환경에 연결되어 있다고 가정하면 Amazon은 추가된 권한 정책을 즉시 사용할 MWAA 수 있습니다. 즉, 실행 역할에서 필요한 권한을 제거하면이 실패할 DAGs 수 있습니다.

새 실행 역할을 연결하는 방법

언제든지 사용자 환경의 실행 역할을 변경할 수 있습니다. 새 실행 역할이 아직 사용자의 환경에 연결되지 않은 경우, 이 페이지의 단계를 사용하여 새 실행 역할 정책을 만들고 해당 역할을 환경에 연결합니다.

새 역할 생성

기본적으로 Amazon은 사용자를 대신하여 데이터 암호화 및 실행 역할을 위한 AWS 소유 키를 MWAA 생성합니다. 환경을 생성할 때 Amazon MWAA 콘솔에서 기본 옵션을 선택할 수 있습니다. 다음 이미지는 환경에 대한 실행 역할을 생성하기 위한 기본 옵션을 보여줍니다.

새 역할을 생성할 수 있는 기본 옵션이 있는 이미지입니다.

실행 역할 정책 보기 및 업데이트

Amazon MWAA 콘솔에서 환경의 실행 역할을 보고 IAM 콘솔에서 역할에 대한 JSON 정책을 업데이트할 수 있습니다.

실행 역할 정책 업데이트
  1. Amazon MWAA 콘솔에서 환경 페이지를 엽니다.

  2. 환경을 선택합니다.

  3. 권한 창에서 실행 역할을 선택하여에서 권한 페이지를 엽니다IAM.

  4. 실행 역할 이름을 선택하여 권한 정책을 엽니다.

  5. 정책 편집을 선택합니다.

  6. JSON 탭을 선택합니다.

  7. JSON 정책을 업데이트합니다.

  8. 정책 검토를 선택합니다.

  9. Save changes(변경 사항 저장)를 선택합니다.

다른 AWS 서비스를 사용하도록 JSON 정책 연결

AWS 서비스에 대한 JSON 정책을 생성하고 실행 역할에 연결할 수 있습니다. 예를 들어 다음 JSON 정책을 연결하여의 모든 리소스에 대한 읽기 전용 액세스 권한을 부여할 수 있습니다 AWS Secrets Manager.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource":[ "*" ] } ] }
실행 역할에 대한 정책 연결
  1. Amazon MWAA 콘솔에서 환경 페이지를 엽니다.

  2. 환경을 선택합니다.

  3. 권한 창에서 실행 역할을 선택합니다.

  4. 정책 연결을 선택합니다.

  5. 정책 생성을 선택합니다.

  6. JSON를 선택합니다.

  7. JSON 정책을 붙여 넣습니다.

  8. 다음: 태그를 선택한 후 다음: 검토를 선택합니다.

  9. 정책의 이름(예: SecretsManagerReadPolicy)과 설명을 입력합니다.

  10. 정책 생성을 선택합니다.

Amazon S3 버킷에 대한 액세스 권한을 계정 수준의 퍼블릭 액세스 차단으로 부여합니다.

PutPublicAccessBlockAmazon S3 작업을 사용하여 계정의 모든 버킷에 대한 액세스를 차단하는 것이 좋을 수 있습니다. 계정의 모든 버킷에 대한 액세스를 차단할 때는 사용자의 환경 실행 역할은 권한 정책에 s3:GetAccountPublicAccessBlock 작업이 포함되게 해야 합니다.

다음 예는 계정의 모든 Amazon S3 버킷에 대한 액세스를 차단할 때 사용자의 실행 역할에 연결해야 하는 정책을 보여줍니다.

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

Amazon S3 버킷에 대한 액세스를 제한하는 방법에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서Amazon S3 Storage에 대한 퍼블릭 액세스 차단을 참조하십시오.

Apache Airflow 연결 사용

또한 Apache Airflow 연결을 생성하고 Apache Airflow 연결 객체ARN에서 실행 역할과 해당 역할을 지정할 수 있습니다. 자세한 내용은 Apache Airflow에 대한 연결 관리을 참조하십시오.

실행 역할에 대한 샘플 JSON 정책

이 섹션의 샘플 권한 정책은 기존 실행 역할에 사용된 권한 정책을 대체하거나 새 실행 역할을 생성하여 사용자 환경에 사용할 수 있는 두 가지 정책을 보여줍니다. 이러한 정책에는 Apache Airflow 로그 그룹, Amazon S3 버킷Amazon MWAA 환경을 위한 리소스 ARN 자리 표시자가 포함되어 있습니다.

예제 정책을 복사하고 샘플 ARNs 또는 자리 표시자를 교체한 다음 JSON 정책을 사용하여 실행 역할을 생성하거나 업데이트하는 것이 좋습니다. 예를 들면, {your-region}us-east-1로 바꾸는 경우가 있습니다.

고객 관리형 키에 대한 샘플 정책

다음 예는 고객 관리형 키에 사용할 수 있는 실행 역할 정책을 보여줍니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:{your-region}:{your-account-id}:log-group:airflow-{your-environment-name}-*" ] }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetAccountPublicAccessBlock" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:{your-region}:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "Resource": "arn:aws:kms:{your-region}:{your-account-id}:key/{your-kms-cmk-id}", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.{your-region}.amazonaws.com", "s3.{your-region}.amazonaws.com" ] } } } ] }

다음으로, 사용자를 대신하여 작업을 수행하려면 Amazon이이 역할을 MWAA 수임하도록 허용해야 합니다. IAM 콘솔을 사용하여이 실행 역할의 신뢰할 수 있는 엔터티 목록에 "airflow.amazonaws.com""airflow-env.amazonaws.com" 서비스 보안 주체를 추가하거나를 사용하여 IAM create-role 명령을 통해이 실행 역할에 대한 수임 역할 정책 문서에 이러한 서비스 보안 주체를 배치하여이 작업을 수행할 수 있습니다 AWS CLI. 역할 가정 정책 문서의 예는 다음과 같습니다.

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

그런 다음 고객 관리형 키에 다음 JSON 정책을 연결합니다. 이 정책은 kms:EncryptionContext 조건 키 접두사를 사용하여 CloudWatch 로그의 Apache Airflow 로그 그룹에 대한 액세스를 허용합니다.

{ "Sid": "Allow logs access", "Effect": "Allow", "Principal": { "Service": "logs.{your-region}.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:{your-region}:{your-account-id}:*" } } }

AWS 소유 키에 대한 샘플 정책

다음 예시는 AWS 소유 키에 사용할 수 있는 실행 역할 정책을 보여줍니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "airflow:PublishMetrics", "Resource": "arn:aws:airflow:{your-region}:{your-account-id}:environment/{your-environment-name}" }, { "Effect": "Deny", "Action": "s3:ListAllMyBuckets", "Resource": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{your-s3-bucket-name}", "arn:aws:s3:::{your-s3-bucket-name}/*" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents", "logs:GetLogEvents", "logs:GetLogRecord", "logs:GetLogGroupFields", "logs:GetQueryResults" ], "Resource": [ "arn:aws:logs:{your-region}:{your-account-id}:log-group:airflow-{your-environment-name}-*" ] }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetAccountPublicAccessBlock" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*" }, { "Effect": "Allow", "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:{your-region}:*:airflow-celery-*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt" ], "NotResource": "arn:aws:kms:*:{your-account-id}:key/*", "Condition": { "StringLike": { "kms:ViaService": [ "sqs.{your-region}.amazonaws.com" ] } } } ] }

다음 단계