다른 AWS 리소스에 대한 액세스 권한
Amazon S3, Amazon DynamoDB, Amazon EMR, Amazon EC2 등의 다른 AWS 리소스와 클러스터 사이에 데이터를 이동시키려면 클러스터에 리소스에 대한 액세스 권한을 비롯해 필요한 작업 권한이 있어야 합니다. 예를 들어 Amazon S3에서 데이터를 로드하려면 COPY에 버킷에 대한 LIST 액세스 권한과 버킷 객체에 대한 GET 액세스 권한이 있어야 합니다. 최소 권한에 대한 자세한 내용은 COPY, UNLOAD 및 CREATE LIBRARY 작업을 위한 IAM 권한 섹션을 참조하세요.
리소스에 대한 액세스 권한을 얻기 위해서는 먼저 클러스터의 인증이 필요합니다. 인증 방법은 다음 중 한 가지를 선택할 수 있습니다.
-
역할 기반 액세스 제어 – 역할 기반 액세스 제어에서는 사용자가 클러스터가 인증 및 권한 부여에 사용할 AWS Identity and Access Management(IAM) 역할을 지정합니다. AWS 자격 증명과 민감한 데이터를 보호하려면 역할 기반 인증의 사용을 강력하게 권장합니다.
-
키 기반 액세스 제어 – 키 기반 액세스 제어에서는 사용자의 AWS 액세스 자격 증명(액세스 키 ID와 비밀 액세스 키)을 일반 텍스트로 입력합니다.
역할 기반 액세스 제어
역할 기반 액세스 제어를 통해 클러스터는 IAM 역할을 임시로 맡습니다. 그런 다음 역할에 부여되는 권한에 따라 클러스터가 필요한 AWS 리소스에 액세스할 수 있습니다.
AWS에서 자격 증명이 할 수 있는 것과 없는 것을 결정하는 권한 정책을 갖춘 AWS 자격 증명이라는 점에서 IAM 역할 생성은 사용자에게 권한을 제공하는 것과 유사합니다. 하지만 역할은 사용자 한 명과 독자적으로 연결되는 것이 아니기 때문에 필요한 모든 객체에게 전달할 수 있습니다. 또한 역할과 연결되는 자격 증명(암호 또는 액세스 키)도 전혀 없습니다. 다만 역할이 클러스터와 연결되면 액세스 키가 동적으로 생성되어 클러스터에게 제공됩니다.
역할 기반 액세스 제어는 AWS 자격 증명을 보호하는 것은 물론이고 AWS 리소스와 민감한 사용자 데이터에 대한 액세스를 더욱 안전하게, 그리고 세분화하여 제어할 수 있다는 점에서 더욱 바람직합니다.
역할 기반 인증의 이점은 다음과 같습니다.
-
AWS 표준 IAM 도구를 사용하여 IAM 역할을 정의한 후 다수의 클러스터와 연결할 수 있습니다. 역할 액세스 정책을 수정할 경우에는 변경 사항이 역할을 사용하는 모든 클러스터에 자동 적용됩니다.
-
특정 클러스터 및 데이터베이스 사용자에게 원하는 AWS 리소스와 작업에 대한 액세스 권한을 부여하는 IAM 정책을 세분화하여 정의할 수 있습니다.
-
클러스터가 실행 시간에 임시 세션 자격 증명을 가져온 후 작업이 끝날 때까지 필요에 따라 자격 증명을 새롭게 변경합니다. 키 기반 임시 자격 증명을 사용하는 경우에는 작업을 마치기 전에 임시 자격 증명이 만료되면 작업이 중단됩니다.
-
액세스 키 ID와 보안 액세스 키 ID는 저장되지도 않고 SQL 코드로 전송되지도 않습니다.
역할 기반 액세스 제어를 사용하려면 먼저 Amazon Redshift 서비스 역할 유형을 사용하여 IAM 역할을 생성한 후 클러스터에 연결해야 합니다. 이 역할에는 최소한 COPY, UNLOAD 및 CREATE LIBRARY 작업을 위한 IAM 권한에 나열된 권한이 있어야 합니다. IAM 역할을 생성하여 클러스터에 연결하는 단계는 Amazon Redshift 관리 가이드의 사용자를 대신하여 기타 AWS 서비스에 액세스하도록 Amazon Redshift에 권한 부여 섹션을 참조하세요.
Amazon Redshift 관리 콘솔, CLI 또는 API를 사용하여 역할을 클러스터에 추가하거나, 클러스터와 연결된 역할을 확인할 수 있습니다. 자세한 내용은 Amazon Redshift 관리 가이드의 클러스터와 IAM 역할 연결 섹션을 참조하세요.
IAM 역할을 생성하면 IAM이 생성된 역할의 Amazon 리소스 이름(ARN)을 반환합니다. IAM 역할을 지정하려면 IAM_ROLE 파라미터 또는 CREDENTIALS 파라미터에 이 역할 ARN을 입력해야 합니다.
예를 들어 클러스터에 다음과 같은 역할이 연결되어 있다고 가정하겠습니다.
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
다음은 위의 예에서 Amazon S3에 대한 인증 및 액세스를 위해 IAM_ROLE 파라미터에 ARN을 사용하는 COPY 명령 예입니다.
copy customer from 's3://amzn-s3-demo-bucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
다음은 CREDENTIALS 파라미터를 사용하여 IAM 역할을 지정하는 COPY 명령 예입니다.
copy customer from 's3://amzn-s3-demo-bucket/mydata' credentials 'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
또한 슈퍼 사용자는 데이터베이스 사용자 및 그룹에 ASSUMEROLE 권한을 부여하여 COPY 작업을 위한 역할에 대한 액세스 권한을 제공할 수 있습니다. 자세한 내용은 GRANT을 참조하세요.
키 기반 액세스 제어
키 기반 액세스 제어의 경우 데이터가 포함된 AWS 리소스에 액세스할 권한이 부여된 IAM 사용자에게 액세스 키 ID와 비밀 액세스 키를 제공합니다. ACCESS_KEY_ID and SECRET_ACCESS_KEY 파라미터를 함께, 혹은 CREDENTIALS 파라미터를 사용할 수 있습니다.
참고
액세스 키 ID와 비밀 액세스 키를 일반 텍스트 형태로 입력하기보다는 IAM 역할을 인증에 사용하는 것을 강력 권장합니다. 키 기반 액세스 제어를 선택하는 경우에는 절대 AWS 계정(루트) 자격 증명을 사용하지 마세요. 항상 IAM 사용자를 먼저 생성한 후 해당 사용자의 액세스 키 ID와 비밀 액세스 키를 입력합니다. IAM 사용자를 생성하는 단계는 AWS 계정의 IAM 사용자 생성을 참조하세요.
ACCESS_KEY_ID와 SECRET_ACCESS_KEY를 사용하여 인증하려면 다음 예와 같이 <access-key-id>
및 <secret-access-key>
에 권한이 부여된 사용자의 액세스 키 ID와 전체 보안 액세스 키를 입력합니다.
ACCESS_KEY_ID '
<access-key-id>
' SECRET_ACCESS_KEY '<secret-access-key>
';
CREDENTIALS 파라미터를 사용하여 인증하려면 다음 예와 같이 <access-key-id>
및 <secret-access-key>
에 권한이 부여된 사용자의 액세스 키 ID와 전체 보안 액세스 키를 입력합니다.
CREDENTIALS 'aws_access_key_id=
<access-key-id>
;aws_secret_access_key=<secret-access-key>
';
IAM 사용자는 최소한 COPY, UNLOAD 및 CREATE LIBRARY 작업을 위한 IAM 권한에 나열된 권한이 있어야 합니다.
임시 보안 자격 증명
키 기반 액세스 제어를 사용하는 경우에는 임시 보안 자격 증명을 통해 데이터에 대한 사용자 액세스를 추가로 제한할 수 있습니다. 역할 기반 인증은 임시 자격 증명을 자동으로 사용합니다.
참고
임시 자격 증명을 생성하여 액세스 키 ID와 보안 액세스 키를 일반 텍스트 형태로 입력하기보다는 role-based access control를 사용하는 것이 더욱 바람직합니다. 역할 기반 액세스 제어는 자동으로 임시 자격 증명을 사용합니다.
임시 보안 자격 증명은 유효 기간이 짧고 만료 후 재사용이 불가능하기 때문에 보안을 강화하는 효과가 있습니다. 토큰으로 생성된 액세스 키 ID와 비밀 액세스 키는 토큰 없이 사용할 수 없으며, 이러한 임시 보안 자격 증명이 발급된 사용자는 자격 증명이 만료될 때까지만 리소스에 액세스할 수 있습니다.
사용자에게 리소스에 대한 임시 액세스 권한을 부여할 때는 AWS STS(AWS Security Token Service) API 작업을 호출합니다. AWS STS API 작업은 보안 토큰, 액세스 키 ID 및 보안 액세스 키로 구성된 임시 보안 자격 증명을 반환합니다. 임시 보안 자격 증명은 리소스에 대한 일시적으로 액세스가 필요한 사용자에게 발급합니다. 이러한 사용자들은 기존 IAM 사용자일 수도 있고, 혹은 AWS를 사용하지 않는 사용자일 수도 있습니다. 임시 보안 자격 증명 생성에 대한 자세한 내용은 IAM User Guide의 Using Temporary Security Credentials 섹션을 참조하세요.
ACCESS_KEY_ID and SECRET_ACCESS_KEY 파라미터를 SESSION_TOKEN 파라미터 또는 CREDENTIALS 파라미터와 함께 사용할 수 있습니다. 또한 토큰과 함께 제공되는 액세스 키 ID와 보안 액세스 키를 입력해야 합니다.
ACCESS_KEY_ID, SECRET_ACCESS_KEY 및 SESSION_TOKEN을 사용하여 인증하려면 다음 예와 같이 <temporary-access-key-id>
, <temporary-secret-access-key>
, <temporary-token>
에 해당하는 자격 증명을 입력합니다.
ACCESS_KEY_ID '
<temporary-access-key-id>
' SECRET_ACCESS_KEY '<temporary-secret-access-key>
' SESSION_TOKEN '<temporary-token>
';
CREDENTIALS를 사용하여 인증하려면 다음 예와 같이 자격 증명 문자열에 session_token=
을 입력합니다.<temporary-token>
CREDENTIALS 'aws_access_key_id=
<temporary-access-key-id>
;aws_secret_access_key=<temporary-secret-access-key>
;session_token=<temporary-token>
';
다음은 임시 보안 자격 증명을 사용하는 COPY 명령 예입니다.
copy table-name from 's3://objectpath' access_key_id '
<temporary-access-key-id>
' secret_access_key '<temporary-secret-access-key>
' session_token '<temporary-token>
';
다음은 임시 자격 증명과 파일 암호화를 사용해 LISTING 테이블에 로드하는 예입니다.
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' access_key_id '
<temporary-access-key-id>
' secret_access_key '<temporary-secret-access-key>
' session_token '<temporary-token>
' master_symmetric_key '<root-key>
' encrypted;
다음은 CREDENTIALS 파라미터에서 임시 자격 증명과 파일 암호화를 사용해 LISTING 테이블에 로드하는 예입니다.
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' credentials 'aws_access_key_id=
<temporary-access-key-id>
;aws_secret_access_key=<temporary-secret-access-key>
;session_token=<temporary-token>
;master_symmetric_key=<root-key>
' encrypted;
중요
임시 보안 자격 증명은 COPY 또는 UNLOAD 작업이 완전히 끝날 때까지 유효해야 합니다. 작업 도중 임시 보안 자격 증명이 만료되면 명령 중단과 함께 트랜잭션이 롤백됩니다. 예를 들어 임시 보안 자격 증명이 15분 후 만료되는데 필요한 COPY 작업 시간이 1시간이라면 COPY 작업이 완료 이전에 중단됩니다. 하지만 역할 기반 액세스를 사용하는 경우에는 작업을 마치기 전에 임시 보안 자격 증명이 새롭게 자동 업데이트됩니다.
COPY, UNLOAD 및 CREATE LIBRARY 작업을 위한 IAM 권한
CREDENTIALS 파라미터에서 참조하는 IAM 역할 또는 사용자는 최소한 다음 권한을 가지고 있어야 합니다.
-
Amazon S3에서 COPY의 경우 Amazon S3 버킷에 대한 LIST 및 로드 중인 Amazon S3 객체와 매니페스트 파일(사용 중인 경우)에 대한 GET 권한.
-
JSON 형식 데이터가 있는 Amazon S3, Amazon EMR 및 원격 호스트(SSH)에서 COPY를 지원하는 경우 Amazon S3의 JSONPaths 파일(사용하는 경우)에 대한 LIST 및 GET 권한.
-
DynamoDB에서 COPY의 경우 로드 중인 DynamoDB 테이블에 대한 SCAN 및 DESCRIBE 권한.
-
Amazon EMR 클러스터에서 COPY의 경우 Amazon EMR 클러스터에 대한
ListInstances
작업 권한. -
Amazon S3로 UNLOAD의 경우 데이터 파일을 언로드 중인 Amazon S3 버킷에 대한 GET, LIST 및 PUT 권한.
-
Amazon S3에서 CREATE LIBRARY의 경우 Amazon S3 버킷에 대한 LIST 및 가져오고 있는 Amazon S3 객체에 대한 GET 권한.
참고
COPY, UNLOAD 또는 CREATE LIBRARY 명령 실행 시 오류 메시지로 S3ServiceException: Access
Denied
가 수신되면 클러스터에 Amazon S3에 대한 액세스 권한이 없는 것입니다.
IAM 권한은 클러스터, 사용자 또는 사용자가 속한 그룹에 연결되어 있는 IAM 역할에 IAM 정책을 연결하여 관리할 수 있습니다. 예를 들어 AmazonS3ReadOnlyAccess
관리형 정책은 Amazon S3 리소스에 LIST 및 GET 권한을 부여합니다. IAM 정책에 대한 자세한 내용은 IAM User Guide의 Managing IAM Policies 섹션을 참조하세요.