View a markdown version of this page

데이터 전송을 위한 IAM 권한 - Amazon Kinesis Data Streams

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

데이터 전송을 위한 IAM 권한

이 주제를 사용하여 Amazon Kinesis Data Streams에서 전송 리소스를 생성하고 관리하는 데 필요한 IAM 권한과 데이터 전송이 대상으로 데이터를 전송하는 데 맡는 서비스 실행 역할에 대해 알아봅니다.

수명 주기 관리 권한

전송 리소스를 생성, 업데이트, 삭제, 설명 및 나열하려면 호출 IAM 보안 주체에 다음 권한이 있어야 합니다.

전송 수명 주기 권한
작업 Resource 설명
kinesis:CreateChannel 스트림 ARN(arn:aws:kinesis:region:account-id:stream/stream-name) Kinesis Data Streams 스트림에서 전송을 생성합니다.
kinesis:AssociateStreamsWithChannel 스트림 ARN(arn:aws:kinesis:region:account-id:stream/stream-name) 스트림을 전송과 연결합니다. 지정된 스트림에서 읽는 전송을 생성하려면 호출 보안 주체에게 부여해야 하는 가상 작업입니다. 외에도 권한이 부여됩니다kinesis:CreateChannel.
kinesis:UpdateChannel 채널 ARN(arn:aws:kinesis:region:account-id:channel/channel-id) 기존 전송 구성을 업데이트합니다.
kinesis:DeleteChannel 채널 ARN 기존 전송을 삭제합니다.
kinesis:DescribeChannel 채널 ARN 전송 세부 정보를 검색합니다.
kinesis:ListChannels 계정 수준(arn:aws:kinesis:region:account-id:stream/*) 계정의 모든 전송을 나열합니다.

서비스 실행 역할

데이터 전송은 IAM 서비스 실행 역할을 수임하여 데이터를 대상으로 전송합니다. 이 역할을 생성하고 신뢰 정책과 권한 정책을 모두 연결해야 합니다.

신뢰 정책

신뢰 정책은 Kinesis Data Streams 서비스가 역할을 수임하도록 허용합니다. 혼동된 대리자 문제를 방지하기 위해 조건 키를 포함합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "kinesis.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "<account-id>" }, "ArnLike": { "aws:SourceArn": "arn:aws:kinesis:<region>:<account-id>:channel/*" } } } ] }

Apache Iceberg에서 테이블을 스트리밍하기 위한 권한 정책

Apache Iceberg의 스트리밍 테이블로 전송할 때 서비스 실행 역할에는 다음 권한이 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3TablesAccess", "Effect": "Allow", "Action": [ "s3tables:GetTable", "s3tables:GetTableBucket", "s3tables:GetTableMetadataLocation", "s3tables:UpdateTableMetadataLocation", "s3tables:CreateTable", "s3tables:CreateNamespace", "s3tables:PutTableData", "s3tables:GetTableData", "s3tables:TagResource", "s3tables:PutTableRecordExpirationConfiguration", "s3tables:PutTableEncryption" ], "Resource": [ "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>", "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/table/*" ] }, { "Sid": "AllowCreateTableWithTag", "Effect": "Allow", "Action": "s3tables:CreateTable", "Resource": [ "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/table/*", "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>" ], "Condition": { "StringEquals": { "aws:RequestTag/TableName": "<table-name>" } } }, { "Sid": "AllowPutTableDataWithTag", "Effect": "Allow", "Action": "s3tables:PutTableData", "Resource": "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/table/*", "Condition": { "StringEquals": { "aws:ResourceTag/TableName": "<table-name>" } } }, { "Sid": "DLQBucketAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::<dlq-bucket-name>", "arn:aws:s3:::<dlq-bucket-name>/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "<dlq-account-id>" } } }, { "Sid": "GlueSchemaRegistryAccess", "Effect": "Allow", "Action": [ "glue:GetSchemaVersion" ], "Resource": [ "arn:aws:glue:<region>:<account-id>:registry/<registry-name>", "arn:aws:glue:<region>:<account-id>:schema/<registry-name>/<schema-name>" ] }, { "Sid": "KMSForCreateTimeValidation", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" } } }, { "Sid": "KMSForS3TablesEncryption", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEquals": { "kms:ViaService": "s3.<region>.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/*", "arn:aws:s3:::<dlq-bucket-name>/*" ] } } }, { "Sid": "KMSForCreateTable", "Effect": "Allow", "Action": ["kms:DescribeKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEquals": { "kms:ViaService": "s3tables.<region>.amazonaws.com" } } }, { "Sid": "KMSForDecryptSourceStreamRecords", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": ["arn:aws:kms:<region>:<account-id>:key/<stream-key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" }, "StringEquals": { "kms:EncryptionContext:aws:kinesis:arn": "arn:aws:kinesis:<region>:<account-id>:stream/<stream-name>" } } } ] }
  • s3tables:PutTableEncryption는 고객 관리형 AWS KMS 키로 대상 테이블을 암호화하는 경우에만 필요합니다. 그렇지 않으면가 CreateTable 성공하지만 테이블 암호화가 실패하고 테이블이 생성되지 않습니다.

  • s3tables:TagResource는 서비스에서 생성하는 테이블에 태그를 지정하기 때문에 필요합니다.

  • AllowCreateTableWithTag 및 AllowPutTableDataWithTag 문은 선택 사항입니다. 테이블 ARN으로만 범위를 지정하는 대신 태그 기반 액세스 제어를 원하는 경우에만 포함합니다. s3tables:CreateTable 및 s3tables:PutTableData를 일치하는 TableName 태그를 전달하는 리소스로 제한합니다. ARN으로 범위를 지정하는 경우 생략합니다.

  • Glue 스키마 레지스트리에는 만 glue:GetSchemaVersion 필요합니다. JSON 및 GSR_JSON 입력 형식 모두에 필요합니다.

  • KMSForCreateTimeValidation 문을 사용하면 전송을 생성할 때 Amazon Kinesis Data Streams가 AWS KMS 키를 검증할 수 있습니다. 대상 테이블 또는 소스 스트림이 고객 관리 AWS KMS 형 키를 사용하는 경우에만 필요합니다.

  • KMSForS3TablesEncryption 문은 전송된 저장 테이블 데이터를 암호화하는 데 사용되는 작업을 부여합니다 AWS KMS . 테이블 버킷이 고객 관리형 키를 사용하는 경우에만 필요합니다.

  • KMSForCreateTable 문을 사용하면 Amazon Kinesis Data Streams가 대상 테이블을 생성할 때 키 구성을 읽을 수 있습니다. 테이블 버킷이 고객 관리형 키를 사용하는 경우에만 필요합니다.

  • KMSForDecryptSourceStreamRecords 문을 사용하면 역할이 소스 스트림에서 읽은 레코드를 해독할 수 있습니다. Kinesis Data Streams 스트림이 고객 관리형 키로 암호화된 경우에만 필요합니다.

범용 Amazon S3 버킷에 대한 권한 정책

범용 Amazon S3 버킷으로 전송할 때 서비스 실행 역할에는 다음 권한이 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DeliveryBucketList", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::<delivery-bucket-name>", "arn:aws:s3:::<delivery-bucket-name>/*" ] }, { "Sid": "DeliveryBucketWrite", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:CreateMultipartUpload", "s3:UploadPart", "s3:CompleteMultipartUpload", "s3:ListMultipartUploads", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::<delivery-bucket-name>/*" ] }, { "Sid": "DLQBucketAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::<dlq-bucket-name>", "arn:aws:s3:::<dlq-bucket-name>/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "<dlq-account-id>" } } }, { "Sid": "KMSForCreateTimeValidation", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" } } }, { "Sid": "KMSForS3BucketEncryption", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEquals": { "kms:ViaService": "s3.<region>.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::<delivery-bucket-name>/*", "arn:aws:s3:::<dlq-bucket-name>/*" ] } } }, { "Sid": "KMSForDecryptSourceStreamRecords", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": ["arn:aws:kms:<region>:<account-id>:key/<stream-key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" }, "StringEquals": { "kms:EncryptionContext:aws:kinesis:arn": "arn:aws:kinesis:<region>:<account-id>:stream/<stream-name>" } } } ] }
  • KMSForCreateTimeValidation 문을 사용하면 전송을 생성할 때 Amazon Kinesis Data Streams가 AWS KMS 키를 검증할 수 있습니다. 대상 버킷 또는 소스 스트림이 고객 관리 AWS KMS 형 키를 사용하는 경우에만 필요합니다.

  • KMSForS3BucketEncryption 문은 Amazon S3가 전송된 유휴 객체를 AWS KMS 암호화하는 데 사용하는 작업을 부여합니다. 대상 버킷 또는 배달 못한 편지 대기열 버킷이 고객 관리형 키와 함께 SSE-KMS를 사용하는 경우에만 필요합니다. 표시된 kms:EncryptionContext:aws:s3:arn 값은 S3 버킷 키가 비활성화될 때 적용되는 객체 ARN을 사용합니다. 대상 버킷 또는 배달 못한 편지 대기열 버킷에서 S3 버킷 키를 활성화하면 Amazon S3는 객체 ARN 대신 버킷 ARN을 암호화 컨텍스트로 사용하므로 해당 값을 해당 버킷 ARN(예: arn:aws:s3:::delivery-bucket-name 또는 arn:aws:s3:::dlq-bucket-name)으로 변경해야 합니다. 자세한 내용은 Amazon S3 사용 설명서의 S3 버킷 키 구성을 참조하세요. Amazon S3

  • KMSForDecryptSourceStreamRecords 문을 사용하면 역할이 소스 스트림에서 읽은 레코드를 해독할 수 있습니다. Kinesis Data Streams 스트림이 고객 관리형 키로 암호화된 경우에만 필요합니다.

중요

s3:PutObject 리소스를 특정 접두사(예: arn:aws:s3:::my-bucket/data*)로 제한하는 경우 출력 키 템플릿에서 생성된 객체 키는 동일한 접두사로 시작해야 합니다. IAM 리소스 접두사와 출력 키 템플릿이 일치하지 않으면 액세스 거부 오류가 발생하고 데이터가 전송되지 않습니다.

예를 들어 정책이 s3:PutObject에를 부여하는 경우 arn:aws:s3:::my-bucket/data*출력 키 템플릿은 data/와 같은 로 시작해야 합니다data/!{yyyy}/!{MM}/!{dd}/!{HH}/. 이를 방지하려면 리소스 범위를 전체 버킷(arn:aws:s3:::my-bucket/*)으로 지정하거나 접두사가 정확히 일치하는지 확인합니다.

선택적 CloudWatch Logs 권한

전송에 대해 CloudWatch Logs를 활성화하는 경우 서비스 실행 역할에 다음 권한을 추가합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsAccess", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region>:<account-id>:log-group:<log-group-name>:*" } ] }