Amazon Redshift Data API에 대한 액세스 권한 부여 - Amazon Redshift

Amazon Redshift Data API에 대한 액세스 권한 부여

Data API에 액세스하려면 사용자에게 권한이 부여되어야 합니다. 해당 사용자에게 미리 정의된 AWS Identity and Access Management(IAM) 정책인 관리형 정책을 추가하여 Data API에 액세스할 수 있는 권한을 부여할 수 있습니다. 가장 좋은 방법은 권한 정책을 IAM 역할에 연결한 다음 필요에 따라 사용자 및 그룹에 할당하는 것입니다. 자세한 내용은 Amazon Redshift의 Identity and Access Management를 참조하세요. 관리형 정책에서 허용 및 거부하는 권한을 보려면 IAM 콘솔(https://console.aws.amazon.com/iam/)을 봅니다.

Amazon Redshift는 AmazonRedshiftDataFullAccess 관리형 정책을 제공합니다. 이 정책은 Amazon Redshift Data API 작업에 대한 전체 액세스 권한을 제공합니다. 이 정책은 또한 Amazon Redshift 클러스터 또는 Redshift Serverless 작업 그룹을 인증하고 이에 액세스하는 데 필요한 특정 Amazon Redshift, AWS Secrets Manager 및 IAM API 작업에 대한 범위 액세스를 허용합니다.

특정 리소스에 대한 액세스를 허용하는 자체 IAM 정책을 생성할 수도 있습니다. 정책을 생성하려면 AmazonRedshiftDataFullAccess 정책을 시작 템플릿으로 사용합니다. 정책을 생성한 후에는 해당 정책을 Data API에 액세스해야 하는 각 사용자에게 추가합니다.

사용자와 연결된 IAM 정책의 다음과 같은 요구 사항을 고려합니다.

  • AWS Secrets Manager를 사용하여 인증하는 경우 정책이 secretsmanager:GetSecretValue 작업을 사용하여 RedshiftDataFullAccess 키로 태그가 지정된 비밀을 검색하도록 허용하는지 확인합니다.

  • 임시 보안 인증 정보를 사용하여 클러스터에 인증하는 경우 정책이 클러스터의 모든 데이터베이스에 대해 데이터베이스 사용자 이름 redshift_data_api_userredshift:GetClusterCredentials 작업을 사용하도록 허용하는지 확인합니다. 이 사용자 이름은 데이터베이스에 이미 생성되어 있어야 합니다.

  • 임시 보안 인증 정보를 사용하여 서버리스 작업 그룹에 인증하는 경우 정책이 RedshiftDataFullAccess 키로 태깅된 작업 그룹을 가져오는 redshift-serverless:GetCredentials 작업의 사용을 허용하는지 확인합니다. 데이터베이스 사용자는 소스 AWS Identity and Access Management(IAM) 아이덴티티에 일대일로 매핑됩니다. 예를 들어 사용자 sample_user는 데이터베이스 사용자 IAM:sample_user로 매핑되고 IAM 역할 sample_role은 IAMR:sample_role로 매핑됩니다. 다양한 IAM 아이덴티티에 대한 자세한 내용은 IAM 사용 설명서에서 IAM 자격 증명(사용자, 그룹 및 역할)을 참조하세요.

다른 계정이 소유한 클러스터에서 쿼리를 실행하려면 소유 계정이 호출 계정에서 Data API가 수임할 수 있는 IAM 역할을 제공해야 합니다. 예를 들어 계정 B가 계정 A가 액세스해야 하는 클러스터를 소유하고 있다고 가정합니다. 계정 B는 AWS 관리형 정책 AmazonRedshiftDataFullAccess를 계정 B의 IAM 역할에 연결할 수 있습니다. 그런 다음 계정 B는 다음과 같은 신뢰 정책을 사용하여 계정 A를 신뢰합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::accountID-of-account-A:role/someRoleA" ] }, "Action": "sts:AssumeRole" } ] }

마지막으로 계정 A IAM 역할은 계정 B IAM 역할을 수임할 수 있어야 합니다.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::accountID-of-account-B:role/someRoleB" } }

다음 링크는 IAM User Guide에서 AWS Identity and Access Management에 대한 자세한 정보를 제공합니다.

AWS Secrets Manager에 데이터베이스 자격 증명 저장

Data API를 호출할 때 AWS Secrets Manager의 비밀을 사용하여 클러스터 또는 서버리스 작업 그룹에 대한 보안 인증 정보를 전달할 수 있습니다. 이 방식으로 자격 증명을 전달하려면 보안 암호의 이름 또는 보안 암호의 Amazon 리소스 이름(ARN)을 지정합니다.

Secrets Manager로 자격 증명을 저장하려면 SecretManagerReadWrite 관리형 정책 권한이 필요합니다. 최소 권한에 대한 자세한 내용은 AWS Secrets Manager User GuideCreating and Managing Secrets with AWS Secrets Manager를 참조하세요.

Amazon Redshift 클러스터의 보안 암호에 자격 증명을 저장하려면
  1. AWS Secrets Manager 콘솔을 사용하여 클러스터의 보안 인증 정보를 포함하는 비밀을 생성합니다.

    • [새 보안 암호 저장(Store a new secret)]을 선택할 때 [Redshift 클러스터용 자격 증명(Credentials for Redshift cluster)]을 선택합니다.

    • 보안 암호에 [사용자 이름(User name)](데이터베이스 사용자), [암호(Password)] 및 [DB 클러스터(DB cluster)](클러스터 식별자) 값을 저장합니다.

    • RedshiftDataFullAccess로 보안 암호에 태그를 지정합니다. AWS 관리형 정책 AmazonRedshiftDataFullAccess는 키 RedshiftDataFullAccess로 태그가 지정된 보안 암호에 대해서만 작업 secretsmanager:GetSecretValue를 허용합니다.

    이에 관한 지침은 AWS Secrets Manager User GuideCreating a Basic Secret을 참조하세요.

  2. AWS Secrets Manager 콘솔을 사용하여 생성한 보안 암호에 대한 세부 정보를 보거나 aws secretsmanager describe-secret AWS CLI 명령을 실행합니다.

    보안 암호의 이름 및 ARN을 적어둡니다. 이러한 이름이나 ARN은 Data API 호출에서 사용할 수 있습니다.

서버리스 작업 그룹의 비밀에 보안 인증 정보를 저장하려면
  1. 서버리스 작업 그룹에 대한 보안 인증 정보를 포함하는 비밀을 저장하려면 AWS Secrets Manager AWS CLI 명령을 사용합니다.

    • 파일에 보안 암호를 생성합니다(예: mycreds.json 이름의 JSON 파일) 파일에 사용자 이름(데이터베이스 사용자) 및 암호 값을 제공합니다.

      { "username": "myusername", "password": "mypassword" }
    • 비밀에 값을 저장하고 RedshiftDataFullAccess 키를 사용하여 비밀에 태그를 지정합니다.

      aws secretsmanager create-secret --name MyRedshiftSecret --tags Key="RedshiftDataFullAccess",Value="serverless" --secret-string file://mycreds.json

      다음은 출력값을 보여줍니다.

      { "ARN": "arn:aws:secretsmanager:region:accountId:secret:MyRedshiftSecret-mvLHxf", "Name": "MyRedshiftSecret", "VersionId": "a1603925-e8ea-4739-9ae9-e509eEXAMPLE" }

    자세한 내용은 AWS CLI 사용 설명서에서 AWS Secrets Manager로 기본 보안 암호 생성을 참조하십시오.

  2. AWS Secrets Manager 콘솔을 사용하여 생성한 보안 암호에 대한 세부 정보를 보거나 aws secretsmanager describe-secret AWS CLI 명령을 실행합니다.

    보안 암호의 이름 및 ARN을 적어둡니다. 이러한 이름이나 ARN은 Data API 호출에서 사용할 수 있습니다.

Data API에 대한 Amazon VPC 엔드포인트(AWS PrivateLink) 생성

Amazon Virtual Private Cloud(Amazon VPC)를 사용하면 Amazon Redshift 클러스터 및 애플리케이션과 같은 AWS 리소스를 Virtual Private Cloud(VPC)에서 시작할 수 있습니다. AWS PrivateLink는 Amazon 네트워크에서 Virtual Private Cloud(VPC)와 AWS 서비스 간의 프라이빗 연결을 안전하게 제공합니다. AWS PrivateLink를 사용하면 VPC 엔드포인트를 생성하여 Amazon VPC 기반의 다른 계정 및 VPC에서 서비스에 연결할 수 있습니다. AWS PrivateLink에 대한 자세한 내용은 Amazon Virtual Private Cloud 사용 설명서VPC 엔드포인트 서비스(AWS PrivateLink)를 참조하세요.

Amazon VPC 엔드포인트를 사용하여 데이터 API를 호출할 수 있습니다. Amazon VPC 엔드포인트를 사용하면 퍼블릭 IP 주소를 사용하지 않고 Amazon VPC의 애플리케이션과 AWS 네트워크에서 데이터 API 간에 트래픽을 유지합니다. Amazon VPC 엔드포인트를 사용하면 퍼블릭 인터넷 연결 제한과 관련된 규정 준수 및 규정 요구 사항을 충족할 수 있습니다. 예를 들어 Amazon VPC 엔드포인트를 사용하는 경우 Amazon EC2 인스턴스에서 실행되는 애플리케이션과 해당 애플리케이션이 포함된 VPC의 데이터 API 간 트래픽을 유지할 수 있습니다.

Amazon VPC 엔드포인트를 생성한 후에는 애플리케이션에서 코드나 구성을 변경하지 않고 엔드포인트를 사용할 수 있습니다.

데이터 API에 대한 Amazon VPC 엔드포인트를 생성하려면
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. 엔드포인트를 선택한 다음 엔드포인트 생성을 선택합니다.

  3. 엔드포인트 생성 페이지에서 서비스 범주에 대해 AWS 서비스를 선택합니다. [서비스 이름(Service Name)]에서 [redshift-data](com.amazonaws.region.redshift-data)를 선택합니다.

  4. VPC의 경우 엔드포인트를 생성할 VPC를 선택합니다.

    데이터 API를 호출하는 애플리케이션이 포함된 VPC를 선택합니다.

  5. 서브넷의 경우 애플리케이션을 실행 중인 AWS 서비스에서 사용하는 각 가용 영역(AZ)의 서브넷을 선택합니다.

    Amazon VPC 엔드포인트를 생성하려면 엔드포인트에 액세스할 수 있는 프라이빗 IP 주소 범위를 지정합니다. 이렇게 하려면 각 가용 영역에 대한 서브넷을 선택합니다. 이렇게 하면 VPC 엔드포인트가 각 가용 영역별 프라이빗 IP 주소 범위로 제한되고 각 가용 영역에 Amazon VPC 엔드포인트가 생성됩니다.

  6. Enable DNS name(DNS 이름 활성화)에서 이 엔드포인트에 대해 활성화를 선택합니다.

    프라이빗 DNS는 표준 데이터 API DNS 호스트 이름(https://redshift-data.region.amazonaws.com)을 Amazon VPC 엔드포인트에 특정한 DNS 호스트 이름과 연결된 프라이빗 IP 주소로 확인합니다. 따라서 데이터 API 엔드포인트 URL을 업데이트하기 위해 코드나 구성을 변경하지 않고도 AWS CLI 또는 AWS SDK를 사용하여 데이터 API VPC 엔드포인트에 액세스할 수 있습니다.

  7. 보안 그룹의 경우 Amazon VPC 엔드포인트와 연결할 보안 그룹을 선택합니다.

    애플리케이션을 실행 중인 AWS 서비스에 대한 액세스를 허용하는 보안 그룹을 선택합니다. 예를 들어 Amazon EC2 인스턴스가 애플리케이션을 실행 중인 경우 Amazon EC2 인스턴스에 대한 액세스를 허용하는 보안 그룹을 선택합니다. 보안 그룹을 사용하면 VPC의 리소스에서 Amazon VPC 엔드포인트로 가는 트래픽을 제어할 수 있습니다.

  8. [Create endpoint]를 선택합니다.

엔드포인트를 생성한 후 AWS Management Console에서 링크를 선택하여 엔드포인트 세부 정보를 봅니다.

엔드포인트 세부 정보 탭에는 Amazon VPC 엔드포인트를 만드는 동안 생성된 DNS 호스트 이름이 표시됩니다.

표준 엔드포인트(redshift-data.region.amazonaws.com) 또는 VPC 관련 엔드포인트 중 하나를 사용하여 Amazon VPC에서 데이터 API를 호출할 수 있습니다. 표준 데이터 API 엔드포인트는 자동으로 Amazon VPC 엔드포인트로 라우팅됩니다. 이 라우팅은 Amazon VPC 엔드포인트를 생성할 때 프라이빗 DNS 호스트 이름을 활성화했기 때문에 발생합니다.

데이터 API 호출에서 Amazon VPC 엔드포인트를 사용하는 경우 애플리케이션과 데이터 API 간의 모든 트래픽은 해당 트래픽이 포함된 Amazon VPC에 남아 있습니다. 모든 유형의 데이터 API 호출에 Amazon VPC 엔드포인트를 사용할 수 있습니다. 데이터 API 호출에 대한 자세한 내용은 Amazon Redshift Data API 호출 시 고려 사항 단원을 참조하십시오.

클러스터에 연결할 때 데이터베이스 그룹에 조인

데이터베이스 그룹은 데이터베이스 사용자의 모음입니다. 그룹에 데이터베이스 권한을 부여할 수 있습니다. 관리자는 데이터 API로 SQL을 실행할 때 이러한 데이터베이스 그룹이 고려되도록 IAM 역할을 구성할 수 있습니다. 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서의 그룹을 참조하세요.

데이터 API가 클러스터에 연결할 때 호출에 지정된 데이터베이스 사용자가 데이터베이스 그룹에 조인하도록 데이터 API 호출자의 IAM 역할을 구성할 수 있습니다. 이 기능은 프로비저닝된 클러스터에 연결할 때만 지원됩니다. Redshift Serverless 작업 그룹에 연결할 때는 지원되지 않습니다. 데이터 API 호출자의 IAM 역할도 redshift:JoinGroup 작업을 허용해야 합니다.

IAM 역할에 태그를 추가하여 이를 구성합니다. 호출자의 IAM 역할의 관리자는 RedshiftDbGroups 키와 데이터베이스 그룹 목록의 키 값을 사용하여 태그를 추가합니다. 값은 콜론(:)으로 구분된 데이터베이스 그룹의 이름을 총 256자까지 나열한 목록입니다. 데이터베이스 그룹은 연결된 데이터베이스에 이전에 정의되어 있어야 합니다. 지정된 그룹이 데이터베이스에서 발견되지 않으면 무시됩니다. 예를 들어 accounting 및 retail 데이터베이스 그룹의 경우 키-값은 accounting:retail입니다. 태그 키-값 쌍 {"Key":"RedshiftDbGroups","Value":"accounting:retail"}은 데이터 API에서 데이터 API 호출에서 제공된 데이터베이스 사용자와 연관된 데이터베이스 그룹을 결정하는 데 사용됩니다.

데이터베이스 그룹을 IAM 역할에 태그로 추가하려면 다음을 수행하세요.
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.

  2. 콘솔의 탐색 창에서 [역할(Roles)]을 선택한 다음 편집할 역할의 이름을 선택합니다.

  3. 태그 탭을 선택한 후 태그 관리를 선택합니다.

  4. 태그 추가를 선택한 다음 RedshiftDbGroups 키와 database-groups-colon-separated 목록인 값을 추가합니다.

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

    이제 이 IAM 역할이 첨부된 IAM 주체가 Data API를 호출하면 지정된 데이터베이스 사용자가 IAM 역할에 지정된 데이터베이스 그룹에 조인합니다.

IAM 역할 및 IAM 사용자를 포함하여 보안 주체에 태그를 연결하는 방법에 대한 자세한 내용은 IAM 사용 설명서IAM 리소스에 태깅을 참조하세요.