소스와 대상 간에서 통합을 설정하려면 AWS Glue가 소스의 데이터에 액세스하고 대상에 쓰는 데 사용하는 IAM 역할 구성, 중간 또는 대상 위치의 데이터를 암호화하기 위한 KMS 키 사용 등과 같은 몇 가지 사전 조건이 필요합니다.
소스 리소스 설정
소스에 필요한 다음 설정 작업을 수행합니다.
소스 역할 설정
이 섹션에서는 제로 ETL 통합이 연결에 액세스할 수 있도록 소스 역할을 전달하는 방법을 설명합니다. 이 방법도 SaaS 소스에만 적용됩니다.
참고
몇 개의 연결로만 액세스를 제한하려면 먼저 연결을 생성하여 연결 ARN을 가져올 수 있습니다. 제로 ETL 통합을 위한 소스 구성 섹션을 참조하세요.
통합이 연결에 액세스할 수 있는 권한이 있는 역할을 생성합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GlueConnections",
"Effect": "Allow",
"Action": [
"glue:GetConnections",
"glue:GetConnection"
],
"Resource": [
"arn:aws:glue:*:<accountId>:catalog",
"arn:aws:glue:us-east-1:<accountId>:connection/*"
]
},
{
"Sid": "GlueActionBasedPermissions",
"Effect": "Allow",
"Action": [
// Fetch entities:
"glue:ListEntities",
// Refresh connection credentials:
"glue:RefreshOAuth2Tokens"
],
"Resource": [
"*"
]
}
]
}
신뢰 정책:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"glue.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
대상 리소스 설정
AWS Glue Data Catalog 또는 Amazon Redshift 데이터 웨어하우스 통합 대상에 필요한 다음 설정 작업을 수행합니다.
AWS Glue 데이터베이스 대상과 통합하는 경우:
Amazon Redshift 데이터 웨어하우스 대상과 통합하는 경우:
AWS Glue 데이터베이스 설정
AWS Glue 데이터베이스를 사용하는 통합의 경우:
Amazon S3 위치를 사용하여 AWS Glue Data Catalog에서 대상 데이터베이스를 설정하려면:
AWS Glue 콘솔 홈 페이지의 Data Catalog에서 데이터베이스를 선택합니다.
오른쪽 상단 모서리에서 데이터 추가를 선택합니다. 데이터베이스를 이미 생성한 경우 Amazon S3 URI를 사용하는 위치가 데이터베이스에 대해 설정되어 있는지 확인합니다.
이름과 위치(S3 URI)를 입력합니다. 제로 ETL 통합에는 위치가 필요합니다. 완료되면 데이터베이스 생성을 클릭합니다.
참고
Amazon S3 버킷은 AWS Glue 데이터베이스와 동일한 리전에 있어야 합니다.
AWS Glue에서 새 데이터베이스를 생성하는 방법에 대한 자세한 내용은 AWS Glue Data Catalog 시작하기를 참조하세요.
create-database
CLI를 사용하여 AWS Glue에서 데이터베이스를 생성할 수도 있습니다. --database-input
의 LocationUri
는 필수입니다.
Iceberg 테이블 최적화
대상 데이터베이스에서 AWS Glue에 의해 테이블이 생성된 후 압축을 활성화하여 Amazon Athena에서 쿼리 속도를 높일 수 있습니다. 압축을 위한 리소스(IAM 역할) 설정에 대한 자세한 내용은 테이블 최적화 필수 조건을 참조하세요.
통합에 의해 생성된 AWS Glue 테이블에서 압축을 설정하는 방법에 대한 자세한 내용은 Iceberg 테이블 최적화를 참조하세요.
카탈로그 리소스 기반 액세스(RBAC) 정책 제공
AWS Glue 데이터베이스를 사용하는 통합의 경우 카탈로그 RBAC 정책에 다음 권한을 추가하여 소스와 대상 간의 통합을 허용합니다.
참고
교차 계정 통합의 경우 Alice(통합을 생성하는 사용자) 역할 정책과 카탈로그 리소스 정책 모두 리소스에 대해 glue:CreateInboundIntegration
을 허용해야 합니다. 동일한 계정의 경우에는 리소스 정책 또는 리소스에 대해 glue:CreateInboundIntegration
을 허용하는 역할 정책으로 충분합니다. 두 시나리오 모두 여전히 glue:AuthorizeInboundIntegration
에 대해 glue.amazonaws.com
을 허용해야 합니다.
Data Catalog에서 카탈로그 설정에 액세스할 수 있습니다. 계속해서 다음 권한을 제공하고 누락된 정보를 입력합니다.
{
"Version": "2012-10-17",
"Statement": [
{ // Allow Alice to create Integration on Target Database
"Principal": {
"AWS": [
"arn:aws:iam::<source-account-id>:user/Alice"
]
},
"Effect": "Allow",
"Action": [
"glue:CreateInboundIntegration"
],
"Resource": [
"arn:aws:glue:<region>:<Target-Account-Id>:catalog",
"arn:aws:glue:<region>:<Target-Account-Id>:database/DatabaseName"
],
"Condition": {
"StringLike": {
"aws:SourceArn": "arn:aws:dynamodb:<region>:<Account>:table/<table-name>"
}
}
},
{ // Allow Glue to Authorize the Inbound Integration on behalf of Bob
"Principal": {
"Service": [
"glue.amazonaws.com"
]
},
"Effect": "Allow",
"Action": [
"glue:AuthorizeInboundIntegration"
],
"Resource": [
"arn:aws:glue:<region>:<Target-Account-Id>:catalog",
"arn:aws:glue:<region>:<Target-Account-Id>:database/DatabaseName"
],
"Condition": {
"StringEquals": {
"aws:SourceArn": "arn:aws:dynamodb:<region>:<account-id>:table/<table-name>"
}
}
}
]
}
대상 IAM 역할 생성
다음과 같은 권한 및 신뢰 관계를 가진 대상 IAM 역할을 생성합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::<target iceberg table s3 bucket>",
"Effect": "Allow"
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::<target iceberg table s3 bucket>/prefix/*",
"Effect": "Allow"
},
{
"Action": [
"glue:GetDatabase"
],
"Resource": [
"arn:aws:glue:<region>:<account-id>:catalog",
"arn:aws:glue:<region>:<account-id>:database/DatabaseName"
],
"Effect": "Allow"
},
{
"Action": [
"glue:CreateTable",
"glue:GetTable",
"glue:UpdateTable",
"glue:GetTableVersion",
"glue:GetTableVersions",
"glue:GetResourcePolicy"
],
"Resource": [
"arn:aws:glue:<region>:<account-id>:catalog",
"arn:aws:glue:<region>:<account-id>:database/<DatabaseName>",
"arn:aws:glue:<region>:<account-id>:table/<DatabaseName>/*"
],
"Effect": "Allow"
},
{
"Action": [
"cloudwatch:PutMetricData"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"cloudwatch:namespace": "AWS/Glue/ZeroETL"
}
},
"Effect": "Allow"
},
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
AWS Glue 서비스가 역할을 수임할 수 있도록 다음 신뢰 정책을 추가합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "glue.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Amazon Redshift 데이터 웨어하우스 생성
제로 ETL 통합 대상이 Amazon Redshift 데이터 웨어하우스이지만 아직 없는 경우 데이터 웨어하우스를 생성합니다. Amazon Redshift Serverless 작업 그룹을 생성하려면 네임스페이스가 있는 작업 그룹 생성을 참조하세요. Amazon Redshift 클러스터를 생성하려면 클러스터 생성을 참조하세요.
통합에 성공하려면 대상 Amazon Redshift 작업 그룹 또는 클러스터에 enable_case_sensitive_identifier
파라미터가 켜져 있어야 합니다. 대소문자 구분 활성화에 대한 자세한 내용은 Amazon Redshift 관리 안내서의 데이터 웨어하우스에 대소문자 구분 기능 사용 설정을 참조하세요.
Amazon Redshift 작업 그룹 또는 클러스터 설정이 완료되면 데이터 웨어하우스를 구성해야 합니다. 자세한 내용은 Amazon Redshift 관리 안내서의 제로 ETL 통합 시작하기를 참조하세요.
제로 ETL 통합을 위한 VPC 설정
제로 ETL 통합을 위한 VPC를 설정하려면:
VPC > VPC로 이동하여 VPC 생성을 선택합니다.
VPC 등을 선택합니다.
VPC 이름을 설정합니다.
IPv4 CIDR을 10.0.0.0/16으로 설정합니다.
AZ 수를 1로 설정합니다.
퍼블릭 및 프라이빗 서브넷 수를 1로 설정합니다.
NAT 게이트웨이를 없음으로 설정합니다.
VPC 엔드포인트를 S3 게이트웨이로 설정합니다.
DNS 호스트 이름 및 DNS 확인을 활성화합니다.
엔드포인트로 이동하고 엔드포인트 생성을 선택합니다.
VPC의 프라이빗 서브넷에서 다음 서비스에 대한 엔드포인트를 생성합니다(기본 보안 그룹 사용).
com.amazonaws.us-east-1.lambda
com.amazonaws.us-east-1.glue
com.amazonaws.us-east-1.sts
AWS Glue 연결을 생성합니다.
AWS Glue > 데이터 연결로 이동하고 연결 생성을 선택합니다.
네트워크를 선택합니다.
생성한 VPC, 서브넷(프라이빗) 및 기본 보안 그룹을 선택합니다.
VPC의 대상 역할 설정
대상 역할에는 제로 ETl 통합에 필요한 다른 권한 외에 다음과 같은 권한이 있어야 합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CustomerVpc",
"Effect": "Allow",
"Action": [
"ec2:CreateTags",
"ec2:DeleteTags",
"ec2:DescribeRouteTables",
"ec2:DescribeVpcEndpoints",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:CreateNetworkInterface",
"ec2:DeleteNetworkInterface",
"glue:GetConnection"
],
"Resource": [
"*"
]
}
]
}
대상 레그 리소스 속성 설정
CLI를 사용하는 경우 대상 레그 리소스 속성을 생성한 대상 AWS Glue 데이터베이스로 설정합니다. 대상 역할 ARN과 AWS Glue 연결 이름을 전달합니다.
aws glue create-integration-resource-property \
--resource-arn arn:aws:glue:us-east-1:<account-id>:database/exampletarget \
--target-processing-properties '{"RoleArn" : "arn:aws:iam::<account-id>:role/example-role", "ConnectionName":"example-vpc-3"}' \
--endpoint-url https://example.amazonaws.com --region us-east-1
가능한 클라이언트 오류
다음은 VPC로 구성된 통합에서 발생할 수 있는 클라이언트 오류입니다.
오류 메시지 | 필요한 작업 |
---|---|
제공된 역할은 연결 시 glue:GetConnection을 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 |
제공된 역할은 ec2:DescribeSubnets를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 |
제공된 역할은 ec2:DescribeSecurityGroups를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 |
제공된 역할은 ec2:DescribeVpcEndpoints를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 |
제공된 역할은 ec2:DescribeRouteTables를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 |
제공된 역할은 ec2:CreateTags를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 |
제공된 역할은 ec2:CreateNetworkInterface를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 |
제공된 연결 서브넷에 유효한 S3 엔드포인트 또는 NAT 게이트웨이가 포함되어 있지 않습니다. 서브넷을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | VPC 서브넷 엔드포인트 업데이트 |
연결 서브넷을 찾을 수 없습니다. 연결 서브넷을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | &GLU; 연결 업데이트 |
연결 보안 그룹을 찾을 수 없습니다. 연결 보안 그룹을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | &GLU; 연결 업데이트 |
제공된 VPC 연결을 통해 S3에 연결할 수 없습니다. 서브넷 구성을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | VPC 서브넷 엔드포인트 업데이트 |
제공된 VPC 연결을 통해 Lambda에 연결할 수 없습니다. 서브넷 구성을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | VPC 서브넷 엔드포인트 업데이트 |
제로 ETL 교차 계정 통합 설정
제로 ETL 교차 계정 통합을 설정하려면:
카탈로그 리소스 기반 액세스(RBAC) 정책 제공에 설명된 대로 대상 리소스 정책을 구성합니다. 소스 계정 역할이 대상 리소스에 명시적으로 허용되는지 확인합니다.
소스 계정 역할(통합을 생성하는 데 사용되는 역할)에 다음이 있는지 확인합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt123456789012", "Action": [ "glue:CreateInboundIntegration" ], "Effect": "Allow", "Resource": [ "arn:aws:glue:<region>:<target-account-id>:catalog", "arn:aws:glue:<region>:<target-account-id>:database/DatabaseName" ] }] }
통합 생성에 설명된 대로 통합을 생성합니다.