

# Amazon MSK 이벤트 소스 매핑에 대한 Lambda 권한 구성
<a name="with-msk-permissions"></a>

Amazon MSK 클러스터에 액세스하려면 함수와 이벤트 소스 매핑에 다양한 Amazon MSK API 작업을 수행할 수 있는 권한이 필요합니다. 함수의 [실행 역할](lambda-intro-execution-role.md)에 이러한 권한을 추가합니다. 사용자에게 액세스 권한이 필요한 경우 사용자 또는 역할에 대한 ID 정책에 필요한 권한을 추가합니다.

[AWSLambdaMSKExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaMSKExecutionRole.html) 관리형 정책에는 Amazon MSK Lambda 이벤트 소스 매핑에 필요한 최소 권한이 포함되어 있습니다. 다음 작업을 통해 권한 프로세스를 간소화할 수 있습니다.
+ [AWSLambdaMSKExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaMSKExecutionRole.html) 관리형 정책을 실행 역할에 연결합니다.
+ Lambda 콘솔에서 권한을 생성하도록 합니다. [콘솔에서 Amazon MSK 이벤트 소스 매핑을 생성](msk-esm-create.md#msk-console)하면 Lambda에서 실행 역할을 평가하고 권한이 누락된 경우 알립니다. **권한 생성**을 선택하여 실행 역할을 자동으로 업데이트합니다. 실행 역할 정책을 수동으로 생성하거나 수정한 경우 또는 정책이 여러 역할에 연결된 경우에는 효과가 없습니다. [실패 시 대상](kafka-on-failure.md) 또는 [AWS Glue Schema Registry](services-consume-kafka-events.md)와 같은 고급 기능을 사용하는 경우에도 실행 역할에 추가 권한이 필요할 수 있습니다.

**Topics**
+ [필수 권한](#msk-required-permissions)
+ [선택적 권한](#msk-optional-permissions)

## 필수 권한
<a name="msk-required-permissions"></a>

Amazon MSK 이벤트 소스 매핑에 대한 Lambda 함수 실행 역할에는 다음 권한이 필요합니다. 이러한 권한은 [AWSLambdaMSKExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaMSKExecutionRole.html) 관리형 정책에 포함됩니다.

### CloudWatch Logs 권한
<a name="msk-basic-permissions"></a>

다음 권한을 통해 Lambda는 Amazon CloudWatch Logs에 로그를 생성하고 저장할 수 있습니다.
+ [logs:CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)
+ [logs:CreateLogStream](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)
+ [logs:PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)

### MSK 클러스터 권한
<a name="msk-cluster-permissions"></a>

다음 권한을 통해 Lambda는 사용자를 대신하여 Amazon MSK 클러스터에 액세스할 수 있습니다.
+ [kafka:DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html)
+ [kafka:DescribeClusterV2](https://docs.aws.amazon.com/MSK/2.0/APIReference/v2-clusters-clusterarn.html)
+ [kafka:GetBootstrapBrokers](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-bootstrap-brokers.html)

[kafka:DescribeCluster](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn.html) 대신 [kafka:DescribeClusterV2](https://docs.aws.amazon.com/MSK/2.0/APIReference/v2-clusters-clusterarn.html)를 사용하는 것이 좋습니다. v2 권한은 프로비저닝된 Amazon MSK 클러스터와 서버리스 Amazon MSK 클러스터 모두에서 작동합니다. 정책에는 이 권한 중 하나만 필요합니다.

### VPC 권한
<a name="msk-vpc-permissions"></a>

다음 권한을 통해 Lambda는 Amazon MSK 클러스터에 연결할 때 네트워크 인터페이스를 생성 및 관리할 수 있습니다.
+ [ec2:CreateNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
+ [ec2:DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)
+ [ec2:DescribeVpcs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)
+ [ec2:DeleteNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteNetworkInterface.html)
+ [ec2:DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html)
+ [ec2:DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)

## 선택적 권한
<a name="msk-optional-permissions"></a>

 Lambda 함수에 또한 다음 권한이 필요할 수 있습니다.
+ 교차 계정 Amazon MSK 클러스터에 액세스합니다. 교차 계정 이벤트 소스 매핑의 경우 실행 역할에 [kafka:DescribeVpcConnection](https://docs.aws.amazon.com/msk/1.0/apireference/vpc-connection-arn.html)이 필요합니다. 교차 계정 이벤트 소스 매핑을 생성하는 IAM 보안 주체에는 [kafka:ListVpcConnections](https://docs.aws.amazon.com/msk/1.0/apireference/vpc-connections.html)가 필요합니다.
+ [SASL/SCRAM 인증](msk-cluster-auth.md#msk-sasl-scram)을 사용하는 경우 SCRAM 보안 암호에 액세스 이렇게 하면 함수가 사용자 이름과 암호를 사용하여 Kafka에 연결할 수 있습니다.
+ SASL/SCRAM 또는 [mTLS 인증을](msk-cluster-auth.md#msk-mtls) 사용하는 경우 Secrets Manager 보안 암호 설명 이렇게 하면 함수가 보안 연결에 필요한 자격 증명이나 인증서를 검색할 수 있습니다.
+ AWS Secrets Manager 보안 암호가 AWS KMS 고객 관리형 키로 암호화된 경우 AWS KMS 고객 관리형 키에 액세스합니다.
+ 인증과 함께 스키마 레지스트리를 사용하는 경우 스키마 레지스트리 시크릿에 액세스합니다.
  + AWS Glue 스키마 레지스트리의 경우: 함수에 `glue:GetRegistry` 및 `glue:GetSchemaVersion` 권한이 필요합니다. 이를 통해 함수가 AWS Glue에 저장된 메시지 형식 규칙을 조회하고 사용할 수 있습니다.
  + `BASIC_AUTH` 또는 `CLIENT_CERTIFICATE_TLS_AUTH`를 사용하는 [Confluent 스키마 레지스트리](https://docs.confluent.io/platform/current/schema-registry/security/index.html)의 경우: 함수에 인증 자격 증명이 포함된 시크릿에 대한 `secretsmanager:GetSecretValue` 권한이 필요합니다. 이렇게 하면 함수가 Confluent 스키마 레지스트리에 액세스하는 데 필요한 사용자 이름/암호 또는 인증서를 검색할 수 있습니다.
  + Private CA Certificate의 경우: 함수에 인증서가 포함된 시크릿에 대한 secretsmanager:GetSecretValue 권한이 필요합니다. 이렇게 하면 함수가 사용자 지정 인증서를 사용하는 스키마 레지스트리의 ID를 확인할 수 있습니다.
+ 이벤트 소스 매핑에 IAM 인증을 사용하는 경우 주제에서 Kafka 클러스터 소비자 그룹에 액세스하고 메시지를 폴링합니다.

 이는 다음과 같은 필수 권한에 해당합니다.
+ [kafka:ListScramSecrets](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-scram-secrets.html) - Kafka 인증을 위한 SCRAM 시크릿 나열 허용
+ [secretsmanager:GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) - Secrets Manager에서 시크릿 검색 활성화
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) - AWS KMS를 사용하여 암호화된 데이터의 복호화 허용
+ [glue:GetRegistry](https://docs.aws.amazon.com/glue/latest/webapi/API_GetRegistry.html) - AWS Glue 스키마 레지스트리에 대한 액세스 허용
+ [glue:GetSchemaVersion](https://docs.aws.amazon.com/glue/latest/webapi/API_GetSchemaVersion.html) - AWS Glue 스키마 레지스트리에서 특정 스키마 버전 검색 활성화
+ [kafka-cluster:Connect](https://docs.aws.amazon.com/service-authorization/latest/reference/list_apachekafkaapisforamazonmskclusters.html) - 클러스터에 연결하고 인증할 수 있는 권한 부여
+ [kafka-cluster:AlterGroup](https://docs.aws.amazon.com/service-authorization/latest/reference/list_apachekafkaapisforamazonmskclusters.html) - Apache Kafka의 READ GROUP ACL에 해당하는 클러스터에서 그룹에 참여할 수 있는 권한 부여
+ [kafka-cluster:DescribeGroup](https://docs.aws.amazon.com/service-authorization/latest/reference/list_apachekafkaapisforamazonmskclusters.html) - Apache Kafka의 DESCRIBE GROUP ACL에 해당하는 클러스터에서 그룹을 설명할 수 있는 권한 부여
+ [kafka-cluster:DescribeTopic](https://docs.aws.amazon.com/service-authorization/latest/reference/list_apachekafkaapisforamazonmskclusters.html) - Apache Kafka의 DESCRIBE TOPIC ACL에 해당하는 클러스터에서 주제를 설명할 수 있는 권한 부여
+ [kafka-cluster:ReadData](https://docs.aws.amazon.com/service-authorization/latest/reference/list_apachekafkaapisforamazonmskclusters.html) - Apache Kafka의 READ TOPIC ACL에 해당하는 클러스터에서 주제의 데이터를 읽을 수 있는 권한 부여

 또한 실패한 간접 호출의 레코드를 장애 시 대상으로 전송하려면 대상 유형에 따라 다음과 같은 권한이 필요합니다: 
+ Amazon SQS 대상의 경우: [sqs:SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) - Amazon SQS 대기열로 메시지 전송 허용
+ Amazon SNS 대상의 경우: [sns:Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) - Amazon SNS 주제에 메시지 게시 허용
+ Amazon S3 버킷 대상의 경우: [s3:PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) 및 [s3:ListBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucket.html) - Amazon S3 버킷에서 객체 쓰기 및 나열 활성화

일반적인 인증 및 권한 부여 오류 문제를 해결할 경우 [Kafka 이벤트 소스 매핑 오류 문제 해결](with-kafka-troubleshoot.md) 섹션을 참조하세요.