Mengautentikasi dengan integrasi Amazon Redshift untuk Apache Spark - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengautentikasi dengan integrasi Amazon Redshift untuk Apache Spark

Bagian berikut menunjukkan opsi otentikasi dengan Amazon Redshift saat Anda mengintegrasikan dengan Apache Spark. Bagian menunjukkan bagaimana untuk mengambil kredensi login dan juga rincian tentang menggunakan JDBC driver dengan otentikasi. IAM

Gunakan AWS Secrets Manager untuk mengambil kredensil dan terhubung ke Amazon Redshift

Anda dapat menyimpan kredensil di Secrets Manager untuk mengautentikasi dengan aman ke Amazon Redshift. Anda dapat meminta pekerjaan Spark Anda memanggil GetSecretValue API untuk mengambil kredensialnya:

from pyspark.sql import SQLContextimport boto3 sc = # existing SparkContext sql_context = SQLContext(sc) secretsmanager_client = boto3.client('secretsmanager', region_name=os.getenv('AWS_REGION')) secret_manager_response = secretsmanager_client.get_secret_value( SecretId='string', VersionId='string', VersionStage='string' ) username = # get username from secret_manager_response password = # get password from secret_manager_response url = "jdbc:redshift://redshifthost:5439/database?user=" + username + "&password=" + password # Access to Redshift cluster using Spark

Menggunakan otentikasi IAM berbasis dengan Amazon EMR pada peran eksekusi EKS pekerjaan

Dimulai dengan Amazon EMR pada EKS rilis 6.9.0, driver Amazon JDBC Redshift versi 2.1 atau lebih tinggi dikemas ke lingkungan. Dengan JDBC driver 2.1 dan yang lebih tinggi, Anda dapat menentukan JDBC URL dan tidak menyertakan nama pengguna dan kata sandi mentah. Sebagai gantinya, Anda dapat menentukan jdbc:redshift:iam:// skema. Ini memerintahkan JDBC driver untuk menggunakan Amazon Anda EMR pada peran eksekusi EKS pekerjaan untuk mengambil kredensi secara otomatis.

Lihat Mengonfigurasi JDBC atau ODBC koneksi untuk menggunakan IAM kredensil di Panduan Manajemen Amazon Redshift untuk informasi selengkapnya.

Contoh berikut URL menggunakan jdbc:redshift:iam:// skema.

jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev

Izin berikut diperlukan untuk peran eksekusi pekerjaan Anda ketika memenuhi persyaratan yang disediakan.

Izin Kondisi bila diperlukan untuk peran pelaksanaan pekerjaan
redshift:GetClusterCredentials Diperlukan bagi JDBC pengemudi untuk mengambil kredensil dari Amazon Redshift
redshift:DescribeCluster Diperlukan jika Anda menentukan klaster Amazon Redshift dan Wilayah AWS di titik akhir JDBC URL alih-alih
redshift-serverless:GetCredentials Diperlukan bagi JDBC driver untuk mengambil kredensil dari Amazon Redshift Tanpa Server
redshift-serverless:GetWorkgroup Diperlukan jika Anda menggunakan Amazon Redshift Serverless dan Anda menentukan URL dalam hal nama workgroup dan Wilayah

Kebijakan peran eksekusi pekerjaan Anda harus memiliki izin berikut.

{ "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials", "redshift:DescribeCluster", "redshift-serverless:GetCredentials", "redshift-serverless:GetWorkgroup" ], "Resource": [ "arn:aws:redshift:AWS_REGION:ACCOUNT_ID:dbname:CLUSTER_NAME/DATABASE_NAME", "arn:aws:redshift:AWS_REGION:ACCOUNT_ID:dbuser:DATABASE_NAME/USER_NAME" ] }

Otentikasi ke Amazon Redshift dengan driver JDBC

Tetapkan nama pengguna dan kata sandi di dalam JDBC URL

Untuk mengautentikasi pekerjaan Spark ke cluster Amazon Redshift, Anda dapat menentukan nama database Amazon Redshift dan kata sandi di. JDBC URL

catatan

Jika Anda meneruskan kredensi database diURL, siapa pun yang memiliki akses ke juga URL dapat mengakses kredensialnya. Metode ini umumnya tidak disarankan karena ini bukan opsi yang aman.

Jika keamanan tidak menjadi perhatian untuk aplikasi Anda, Anda dapat menggunakan format berikut untuk mengatur nama pengguna dan kata sandi di JDBCURL:

jdbc:redshift://redshifthost:5439/database?user=username&password=password