AWS SDK for .NET 및 IAM 인증을 사용하여 DB 인스턴스에 연결
AWS SDK for .NET 및 IAM 인증을 사용하여 DB 인스턴스에 연결 (Connecting to your DB instance using IAM authentication and the AWS SDK for .NET)
AWS SDK for .NET을 사용하여 RDS for MariaDB, MySQL 또는 PostgreSQL DB 인스턴스에 연결할 수 있습니다.
출처: 문서
본문
사전 요구 사항
IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 요구 사항은 다음과 같습니다.
- IAM 데이터베이스 인증 활성화 및 비활성화
- IAM 데이터베이스 액세스용 IAM 정책 생성 및 사용
- IAM 인증을 사용한 데이터베이스 계정 생성
예시
다음 코드 예시는 인증 토큰을 생성한 다음 이를 사용하여 DB 인스턴스에 연결하는 방법을 보여줍니다.
이 코드 예시를 실행하려면 AWS 사이트에서 찾을 수 있는 AWS SDK for .NET이 필요합니다. AWSSDK.CORE 및 AWSSDK.RDS 패키지가 필요합니다. DB 인스턴스에 연결하려면 DB 엔진용 .NET 데이터베이스 커넥터(MariaDB 또는 MySQL용 MySqlConnector, PostgreSQL용 Npgsql)를 사용합니다.
이 코드는 MariaDB 또는 MySQL DB 인스턴스에 연결합니다. 다음 변수의 값을 필요에 따라 수정합니다.
server– 액세스하려는 DB 인스턴스의 엔드포인트user– 액세스하려는 데이터베이스 계정database– 액세스하려는 데이터베이스port– DB 인스턴스에 연결하는 데 사용되는 포트 번호SslMode– 사용할 SSL 모드SslMode=Required를 사용하면 SSL 연결이 SSL 인증서의 엔드포인트에 대해 DB 인스턴스 엔드포인트를 검증합니다.
SslCa– Amazon RDS용 SSL 인증서의 전체 경로- 인증서를 다운로드하려면 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화를 참조하세요.
참고
인증 토큰을 생성하기 위해 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
using Amazon;
namespace ubuntu
{
class Program
{
static void Main(string[] args)
{
var pwd = Amazon.RDS.Util.RDSAuthTokenGenerator.GenerateAuthToken(RegionEndpoint.USEast1, "mysqldb.123456789012.us-east-1.rds.amazonaws.com", 3306, "jane_doe");
// for debug only Console.Write("{0}\n", pwd); //this verifies the token is generated
MySqlConnection conn = new MySqlConnection($"server=mysqldb.123456789012.us-east-1.rds.amazonaws.com;user=jane_doe;database=mydB;port=3306;password={pwd};SslMode=Required;SslCa=full_path_to_ssl_certificate");
conn.Open();
// Define a query
MySqlCommand sampleCommand = new MySqlCommand("SHOW DATABASES;", conn);
// Execute a query
MySqlDataReader mysqlDataRdr = sampleCommand.ExecuteReader();
// Read all rows and output the first column in each row
while (mysqlDataRdr.Read())
Console.WriteLine(mysqlDataRdr[0]);
mysqlDataRdr.Close();
// Close connection
conn.Close();
}
}
}
이 코드는 PostgreSQL DB 인스턴스에 연결합니다. 다음 변수의 값을 필요에 따라 수정합니다.
Server– 액세스하려는 DB 인스턴스의 엔드포인트User ID– 액세스하려는 데이터베이스 계정Database– 액세스하려는 데이터베이스Port– DB 인스턴스에 연결하는 데 사용되는 포트 번호SSL Mode– 사용할 SSL 모드
참고
인증 토큰을 생성하기 위해 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.
using System;
using System.Data;
using Npgsql;
using Amazon;
namespace ubuntu
{
class Program
{
static void Main(string[] args)
{
var pwd = Amazon.RDS.Util.RDSAuthTokenGenerator.GenerateAuthToken(RegionEndpoint.USEast1, "rdspostgres.123456789012.us-east-1.rds.amazonaws.com", 5432, "jane_doe");
// for debug only Console.Write("{0}\n", pwd); //this verifies the token is generated
NpgsqlConnection conn = new NpgsqlConnection($"Server=rdspostgres.123456789012.us-east-1.rds.amazonaws.com;User ID=jane_doe;Database=mydb;Port=5432;Password={pwd};SSL Mode=Require;");
conn.Open();
// Define a query
NpgsqlCommand sampleCommand = new NpgsqlCommand("SELECT version();", conn);
// Execute a query
NpgsqlDataReader pgDataRdr = sampleCommand.ExecuteReader();
// Read all rows and output the first column in each row
while (pgDataRdr.Read())
Console.WriteLine(pgDataRdr[0]);
pgDataRdr.Close();
// Close connection
conn.Close();
}
}
}