Redshift에 IAM 인증으로 연결하는 방법

8465 단어 IAMredshift

소개



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 문자열은 다음과 같습니다.
  • jdbc:redshift:iam://클러스터 : 포트/데이터베이스 ?AccessKeyID= 액세스 키 &SecretAccessKey= 비밀 키 &DbUser= Redshift 계정

  • 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 문자열에 포함되어 있으므로
    여기에 넣는 문자는 의미가 없습니다만, 무엇인가 입력하지 않으면 작성할 수 없기 때문에 적당하게 입력합니다.
  • 1 접속 마다 그것을 위한 새로운 드라이버를 작성할 필요가 있습니다.
  • 드라이버 관리자에서 복사하면 URL 템플릿을 변경할 수 없으므로 새로 만듭니다.

  • 참고



    IAM 인증을 사용하여 데이터베이스 사용자 자격 증명 생성

    좋은 웹페이지 즐겨찾기