S3 호환 개체 스토리지의 외부 데이터에 액세스하도록 PolyBase 구성

적용 대상: SQL Server 2022(16.x)

이 문서에서는 PolyBase를 사용하여 S3 호환 개체 스토리지에서 외부 데이터를 쿼리하는 방법을 설명합니다.

SQL Server 2022(16.x)에는 모든 S3 호환 개체 스토리지에 연결하는 기능이 도입되었습니다. 인증에는 기본 인증 또는 통과 권한 부여(STS 권한 부여라고도 함)의 두 가지 사용 가능한 옵션이 있습니다.

정적 자격 증명이라고도 하는 기본 인증을 사용하려면 사용자가 SQL Server에 저장 access key id 해야 하며 secret key id , 필요할 때마다 자격 증명을 명시적으로 해지하고 회전해야 합니다. 세분화된 액세스 제어를 사용하려면 관리자가 각 로그인에 대해 정적 자격 증명을 설정해야 합니다. 이 방법은 수십 또는 수백 개의 고유한 자격 증명을 처리할 때 어려울 수 있습니다.

STS(통과) 권한 부여는 SQL Server 사용자 ID를 사용하여 S3 호환 개체 스토리지에 액세스할 수 있도록 하여 이러한 문제에 대한 솔루션을 제공합니다. S3 호환 개체 스토리지에는 STS(보안 토큰 서비스)를 사용하여 임시 자격 증명을 할당하는 기능이 있습니다. 이러한 자격 증명은 단기적이고 동적으로 생성됩니다.

이 문서에는 기본 인증 및 STS(통과 권한 부여) 권한 부여에 대한 지침이 포함되어 있습니다.

필수 조건

S3 호환 개체 스토리지 통합 기능을 사용하려면 다음 도구와 리소스가 필요합니다.

  • SQL Server PolyBase 기능을 설치합니다.
  • SSMS(SQL Server Management Studio) 또는 Azure Data Studio를 설치합니다.
  • S3 호환 스토리지입니다.
  • 생성한 S3 버킷입니다. 버킷은 SQL Server에서 만들거나 구성할 수 없습니다.
  • 사용자에게 알려진 사용자(Access Key ID) 및 비밀(Secret Key ID)입니다. S3 개체 스토리지 엔드포인트에 대해 인증하려면 두 항목이 모두 필요합니다.
  • S3 사용자의 찾아보기 권한을 위한 ListBucket 권한입니다.
  • S3 사용자의 읽기 권한을 위한 ReadOnly 권한입니다.
  • S3 사용자의 쓰기 권한을 위한 WriteOnly 권한입니다.
  • TLS(전송 계층 보안)를 구성해야 합니다. 모든 연결이 HTTP가 아닌 HTTPS를 통해 안전하게 전송된다고 가정합니다. 엔드포인트는 SQL Server OS 호스트에 설치된 인증서에 의해 유효성이 검사됩니다. TLS 및 인증서에 대한 자세한 내용은 데이터베이스 엔진 암호화된 연결 사용을 참조하세요.

사용 권한

프록시 사용자가 S3 버킷의 콘텐츠를 읽으려면 사용자가 S3 엔드포인트에 대해 다음 작업을 수행할 수 있어야 합니다.

  • AWS S3에서 사용자 지정 역할을 만들고 특히 액세스가 필요한 S3 API를 명시합니다.
    • 백업에는 ListBucket(찾아보기), PutObject(쓰기 - 백업용)의 권한이 필요합니다.
    • 복원에는 ListBucket(찾아보기), GetObject(읽기 - 복원), GetObject(읽기 - 복원용) 권한이 필요합니다.
  • 다른 S3 호환 스토리지:
    • 백업을 사용하려면 사용자(Access Key ID)에게 ListBucketWriteOnly 권한이 모두 있어야 합니다.
    • 복원하려면 사용자(Access Key ID)에게 ListBucketReadOnly 권한이 모두 있어야 합니다.

PolyBase 사용

  1. sp_configure에서 PolyBase 사용:

    EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1;
    GO
    RECONFIGURE
    GO
    
  2. 설정을 확인합니다.

    EXEC sp_configure @configname = 'polybase enabled';
    

인증

계속하려면 기본 인증 또는 STS(통과) 권한 부여를 선택합니다.

기본 인증

데이터베이스 범위 자격 증명을 만들기 전에 자격 증명을 보호하려면 사용자 데이터베이스에 마스터 키가 있어야 합니다. 자세한 내용은 CREATE MASTER KEY를 참조하세요.

기본 인증을 사용하여 데이터베이스 범위 자격 증명 만들기

다음 샘플 스크립트는 SQL Server 인스턴스의 database_name 데이터베이스에 데이터베이스 범위 자격 증명 s3-dc 을 만듭니다. 자세한 내용은 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 참조하세요.

USE [database_name];
GO
IF NOT EXISTS(SELECT * FROM sys.database_scoped_credentials WHERE name = 's3_dc')
BEGIN
 CREATE DATABASE SCOPED CREDENTIAL s3_dc
 WITH IDENTITY = 'S3 Access Key',
 SECRET = '<AccessKeyID>:<SecretKeyID>' ;
END
GO

sys.database_scoped_credentials(Transact-SQL)를 사용하여 새 데이터베이스 범위 자격 증명을 확인합니다.

SELECT * FROM sys.database_scoped_credentials;

기본 인증을 사용하여 외부 데이터 원본 만들기

다음 샘플 스크립트는 SQL Server의 원본 사용자 데이터베이스에 s3_ds 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 s3_dc 데이터베이스 범위 자격 증명을 참조합니다. 자세한 내용은 CREATE EXTERNAL DATA SOURCE를 참조하세요.

CREATE EXTERNAL DATA SOURCE s3_ds
WITH
(   LOCATION = 's3://<ip_address>:<port>/'
,   CREDENTIAL = s3_dc
);
GO

sys.external_data_sources를 사용하여 새 외부 데이터 원본을 확인합니다.

SELECT * FROM sys.external_data_sources;

기본 인증의 제한 사항

  1. S3 호환 개체 스토리지의 경우 고객은 해당 문자로 액세스 키 ID를 : 만들 수 없습니다.
  2. 전체 URL 길이는 259자로 제한됩니다. 따라서 s3://<hostname>/<objectkey>는 259자를 초과하면 안 됩니다. s3://는 이 제한에 대한 개수이므로 경로 길이는 259-5 = 254자를 초과할 수 없습니다.
  3. SQL 자격 증명 이름은 UTF-16 형식에서 128자로 제한됩니다.
  4. 이 자격 증명이 새 외부 데이터 원본에 대한 것이 아니면 만든 자격 증명 이름에 버킷 이름이 포함되어야 합니다.
  5. 액세스 키 ID 및 비밀 키 ID는 영숫자 값만 포함해야 합니다.

STS(통과) 권한 부여

S3 호환 개체 스토리지에는 STS(보안 토큰 서비스)를 사용하여 임시 자격 증명을 할당하는 기능이 있습니다. 이러한 자격 증명은 단기적이고 동적으로 생성됩니다.

통과 권한 부여는 OIDC(OpenID 커넥트) ID 공급자 역할을 하는 ADFS(Active Directory Federation Service)에 의존하며, S3 호환 개체 스토리지 STS와 통신하고 STS를 요청하고 SQL Server에 다시 제공하는 것은 ADFS의 요지입니다.

SQL Server에서 STS(통과) 권한 부여 사용

  1. TLS는 SQL Server와 S3 호환 호스트 서버 간의 인증서로 구성해야 합니다. 모든 연결은 HTTP가 아닌 HTTPS를 통해 안전하게 전송됩니다. 엔드포인트는 SQL Server OS 호스트에 설치된 인증서에 의해 유효성이 검사됩니다. 공용 또는 자체 서명된 인증서가 지원됩니다.

  2. ID를 S3 호환 개체 스토리지에 전달하는 데 사용할 데이터베이스 범위 자격 증명을 만듭니다. 자세한 내용은 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 참조하세요. 다음 예제와 같습니다.

    CREATE DATABASE SCOPED CREDENTIAL CredName
    WITH IDENTITY = 'User Identity'
    
  3. 외부 데이터 원본을 만들어 S3 호환 개체 스토리지에 액세스합니다. JSON 형식으로 ADFS 및 STS 모두에 필요한 정보를 알리는 데 사용합니다 CONNECTION_OPTIONS. 자세한 내용은 CREATE EXTERNAL DATA SOURCE를 참조하세요. 다음 예제와 같습니다.

    CREATE EXTERNAL DATA SOURCE EdsName
    WITH
    {
        LOCATION = 's3://<hostname>:<port>/<bucket_name>'
        , CREDENTIAL = <CredName>
        [ , CONNECTION_OPTIONS = ' {
            [ , "authorization": {
                    "adfs": {
                        "endpoint": "http[s]://hostname:port/servicepath",
                        "relying_party": "SQL Server Relying Party Identifier"
                    },
                    "sts": {
                        "endpoint": "http[s]://hostname:port/stspath",
                        "role_arn": "Role Arn"
                        [ , "role_session_name": "AD user login" ] -- default value if not provided
                        [ , "duration_seconds": 3600 ]             -- default value if not provided
                        [ , "version": "2011-06-15" ]              -- default value if not provided
                        [ , "request_parameters": "In request query string format" ]
                    }
                } ]
            [ , "s3": {
                "url_style": "Path"
                } ]
        }' ]
    }
    
  • ADFS 옵션은 ADFS에서 SQL Server의 Windows 전송 엔드포인트 및 relying_party 식별자를 지정합니다.
  • STS 옵션은 요청에 대한 S3 호환 개체 스토리지 STS 엔드포인트 및 매개 변수를 AssumeRoleWithWebIdentity 지정합니다. 인증 AssumeRoleWithWebIdentity 에 사용되는 임시 보안 자격 증명을 획득하는 데 사용되는 방법입니다. 선택적 매개 변수 및 기본값에 대한 정보를 포함한 전체 매개 변수 목록은 STS API 참조를 참조하세요.

Active Directory에서 STS(통과) 권한 부여 사용

  • S3 호환 스토리지에 대한 통과를 허용하도록 AD의 SQL Server 사용자 계정 속성을 민감하지 않은 것으로 표시합니다.
  • SQL Server SPN(서비스 사용자 이름)과 관련된 사용자에 대해 ADFS 서비스에 Kerberos 제한 위임을 허용합니다.

Active Directory Federation Service에서 STS(통과) 권한 부여 사용

  • SQL Server를 Active Directory의 클레임 공급자 트러스트 로 설정합니다.
  • ADFS에 대한 인증 방법으로 인트라넷 Windows 인증을 허용합니다.
  • 인트라넷에서 Windows 전송 서비스 엔드포인트를 사용하도록 설정합니다.
  • OIDC(OpenID 커넥트) 엔드포인트를 사용하도록 설정합니다.
  • SQL Server를 신뢰 당사자 트러스트등록합니다.
    • 고유 식별자를 제공합니다.
    • JWT(JSON 웹 토큰)에 대한 클레임 규칙을 설정합니다.
  • 사용자 지정 클레임 - 스토리지 쪽에서 액세스 정책을 결정하는 데 필요한 경우 고객이 이러한 클레임을 추가할 수 있습니다.
  • 공급업체별 자세한 내용은 S3 호환 플랫폼 공급자와 검사.

S3 호환 개체 스토리지에서 STS(통과) 권한 부여 사용

  • S3 호환 스토리지 공급자가 제공하는 설명서에 따라 외부 OIDC ID 공급자를 설정합니다. ID 공급자를 설정하려면 일반적으로 다음 값이 필요합니다.

    • OIDC 공급자의 구성 끝점입니다.
    • OIDC 공급자의 지문입니다.
    • S3 호환 개체 스토리지에 대한 통과 권한 부여

STS(통과) 권한 부여의 제한 사항

  • S3 호환 개체 스토리지에 대한 STS(통과 권한 부여)는 Windows 인증 사용하여 SQL Server 로그인에 대해 지원됩니다.
  • STS 토큰은 S3 호환 개체 스토리지BACKUP to URL에 사용할 수 없습니다.
  • ADFS 및 SQL Server는 동일한 do기본 있어야 합니다. ADFS Windows 전송 엔드포인트는 엑스트라넷에서 사용하지 않도록 설정해야 합니다.
  • ADFS에는 클레임 신뢰 공급자와 SQL Server와 동일한 AD(Active Directory)가 있어야 합니다.
  • S3 호환 스토리지에는 클라이언트가 외부 ID의 JWT를 사용하여 임시 자격 증명을 요청할 수 있도록 하는 STS 엔드포인트 서비스가 있어야 합니다.
  • OPENROWSET 및 CETAS(외부 테이블을 선택으로 만들기) 쿼리는 parquet 및 CSV 형식에 대해 지원됩니다.
  • 기본적으로 Kerberos 티켓 갱신 시간은 7일이며 수명은 Windows에서 10시간, Linux에서는 2시간입니다. SQL Server는 최대 7일 동안 사용자의 Kerberos 토큰을 갱신합니다. 7일 후에 사용자의 티켓이 만료되므로 S3 호환 스토리지에 대한 통과가 실패합니다. 이 경우 SQL Server는 사용자를 다시 인증하여 새 Kerberos 티켓을 가져와야 합니다.
  • Windows Server 2019를 사용하는 ADFS 2019가 지원됩니다.
  • S3 REST API 호출은 AWS 서명 버전 4를 사용합니다.