Redshift에 IAM 인증으로 연결하는 방법
소개
AWS의 Redshift에는 보통 ID/Pass로 연결하는 것 외에도,
IAM에서 만든 액세스 키/비밀 키로 연결할 수 있습니다.
이 IAM 인증을 사용하여 JDBC 연결을 시도했습니다.
SSO가 아니라 단순히 액세스 키의 키 쌍을 사용하여 연결입니다.
연결 준비
Redshift 계정 만들기
여기서는 rsuser라는 계정을 만들 것입니다.
create user rsuser password disable ;
password는 disable로 설정합니다.
정책 만들기
redshift : GetClusterCredentials의 Resource에서
방금 만든 Redshift 계정 rsuser에만 할당할 수 있도록 정책을 작성합니다.
RedshiftIAMAuthPolicy{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "redshift:GetClusterCredentials",
"Resource": [
"arn:aws:redshift:*:*:dbuser:*/rsuser",
"arn:aws:redshift:*:*:dbgroup:*/*",
"arn:aws:redshift:*:*:dbname:*/*"
]
},
{
"Effect": "Allow",
"Action": "redshift:DescribeClusters",
"Resource": "*"
}
]
}
생략하지만 사실은 리전, 데이터베이스 이름 등을 제한합니다.
IAM 사용자 만들기
IAM에서 사용자를 만들고 방금 만든 정책(RedshiftIAMAuthPolicy)을 할당합니다.
액세스 키의 키 페어를 발행해, 메모해 둡니다.
연결
만든 IAM 사용자를 Redshift 계정에 할당하고 연결합니다.
JDBC 문자열은 다음과 같습니다.
Redshift 계정 만들기
여기서는 rsuser라는 계정을 만들 것입니다.
create user rsuser password disable ;
password는 disable로 설정합니다.
정책 만들기
redshift : GetClusterCredentials의 Resource에서
방금 만든 Redshift 계정 rsuser에만 할당할 수 있도록 정책을 작성합니다.
RedshiftIAMAuthPolicy
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "redshift:GetClusterCredentials",
"Resource": [
"arn:aws:redshift:*:*:dbuser:*/rsuser",
"arn:aws:redshift:*:*:dbgroup:*/*",
"arn:aws:redshift:*:*:dbname:*/*"
]
},
{
"Effect": "Allow",
"Action": "redshift:DescribeClusters",
"Resource": "*"
}
]
}
생략하지만 사실은 리전, 데이터베이스 이름 등을 제한합니다.
IAM 사용자 만들기
IAM에서 사용자를 만들고 방금 만든 정책(RedshiftIAMAuthPolicy)을 할당합니다.
액세스 키의 키 페어를 발행해, 메모해 둡니다.
연결
만든 IAM 사용자를 Redshift 계정에 할당하고 연결합니다.
JDBC 문자열은 다음과 같습니다.
jdbc:redshift://~~ 대신
jdbc:redshift:iam//~~ 가 되는 것에 주의해 주세요.
Java 샘플
import java.sql.*;
import java.util.Properties;
public class IamAuthSample{
public static void main(String[] args){
String jdbcURL = "jdbc:redshift:iam://hoge.xxxxxxxxx.ap-northeast-1.redshift.amazonaws.com:5439/database01?AccessKeyID=XXXXXXXXXXX&SecretAccessKey=YYYYYYYYYYYYYY&DbUser=rsuser";
try (Connection con = DriverManager.getConnection(jdbcURL);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from information_schema.tables;")) {
while (rs.next()) {
String catalog = rs.getString("table_catalog");
String name = rs.getString("table_name");
System.out.println("Catalog: " + catalog + ", Name: " + name);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
getConnection()에 건네주는 것은 jdbc 캐릭터 라인만이 되는 것에 주목입니다.
샘플이므로 AccessKeyID 등 접속 정보를 소스에 직접 쓰고 있습니다만,
실제로 사용하는 경우는 다른 사람으로부터 취득하는 등 궁리합시다.
DBeaver
Redshift 연결 클라이언트 도구 비교 에서 소개한 DBeaver 으로 접속할 때는 조금 궁리가 필요했습니다.
Dbeaver 버전은 7.0.0입니다.
메뉴> 드라이버 관리자에서 새로 드라이버를 만듭니다.
드라이버 이름은 여기에서는 RedsfhitIAM입니다.
URL 템플릿에 위의 JDBC 문자열을 그대로 입력합니다.
이것 이외는 기존의 Redshift 드라이버와 같은 설정으로 합니다.
메뉴> 데이터베이스> 새 연결> RedshiftIAM
Host, Port 등은 드라이버에 설정한 JDBC 문자열에 포함되어 있으므로
여기에 넣는 문자는 의미가 없습니다만, 무엇인가 입력하지 않으면 작성할 수 없기 때문에 적당하게 입력합니다.
참고
IAM 인증을 사용하여 데이터베이스 사용자 자격 증명 생성
Reference
이 문제에 관하여(Redshift에 IAM 인증으로 연결하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/_konishi_/items/38f05a98ae4372031979
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Redshift에 IAM 인증으로 연결하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/_konishi_/items/38f05a98ae4372031979텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)