View a markdown version of this page

Kebijakan IAM untuk Amazon Redshift Spectrum - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

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

Kebijakan IAM untuk Amazon Redshift Spectrum

Topik ini menjelaskan izin IAM yang diperlukan untuk menggunakan Redshift Spectrum.

Secara default, Amazon Redshift Spectrum menggunakan AWS Glue Data Catalog di Wil AWS ayah yang mendukung AWS Glue. Di Wil AWS ayah lain, Redshift Spectrum menggunakan Katalog Data Athena. Cluster Anda memerlukan otorisasi untuk mengakses katalog data eksternal Anda di AWS Glue atau Athena dan file data Anda di Amazon S3. Anda memberikan otorisasi tersebut dengan mereferensikan peran AWS Identity and Access Management (IAM) yang dilampirkan ke cluster Anda. Jika Anda menggunakan metastore Apache Hive untuk mengelola katalog data Anda, Anda tidak perlu memberikan akses ke Athena.

Anda dapat mengrantai peran sehingga cluster Anda dapat mengambil peran lain yang tidak melekat pada cluster. Untuk informasi selengkapnya, lihat Mengrantai peran IAM di Amazon Redshift Spectrum.

AWS Glue Katalog yang Anda akses mungkin dienkripsi untuk meningkatkan keamanan. Jika AWS Glue katalog dienkripsi, Anda memerlukan AWS KMS kunci AWS Glue untuk mengakses Katalog AWS Glue Data. Untuk informasi selengkapnya, lihat Mengenkripsi Katalog AWS Glue Data Anda di Panduan PengAWS Glue embang.

Izin Amazon S3

Minimal, cluster Anda memerlukan akses GET dan LIST ke bucket Amazon S3 Anda. Jika bucket Anda tidak berada di AWS akun yang sama dengan cluster Anda, bucket Anda juga harus mengotorisasi cluster Anda untuk mengakses data. Untuk informasi selengkapnya, lihat Men gotorisasi Amazon Redshift untuk Mengakses AWS Layanan Lain atas Nama Anda.

catatan

Bucket Amazon S3 tidak dapat menggunakan kebijakan bucket yang membatasi akses hanya dari titik akhir VPC tertentu.

Kebijakan berikut memberikan akses GET dan LIST ke bucket Amazon S3 apa pun. Kebijakan ini memungkinkan akses ke bucket Amazon S3 untuk operasi Redshift Spectrum serta COPY.

JSON
{ "Version":"2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "*" }] }

Kebijakan berikut memberikan akses GET dan LIST ke bucket Amazon S3 Anda yang diberi namaamzn-s3-demo-bucket.

JSON
{ "Version":"2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" }] }

Cross-account Izin Amazon S3

Untuk memberikan izin Redshift Spectrum untuk mengakses data dalam bucket Amazon S3 milik AWS akun lain, tambahkan kebijakan berikut ke bucket Amazon S3. Untuk informasi selengkapnya, lihat Mem berikan Iz Cross-Account in Bucket.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/spectrumrole" }, "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::bucketname", "arn:aws:s3:::bucketname/*" ] } ] }

Kebijakan untuk memberikan atau membatasi akses menggunakan Redshift Spectrum

Kebijakan contoh berikut memungkinkan akses ke bucket Amazon S3 untuk Amazon Redshift. Saat menambahkan kebijakan ini ke peran IAM, sebaiknya gunakan peran IAM yang hanya digunakan untuk Amazon Redshift. Kami juga menyarankan agar Anda tidak menggunakan kembali peran yang ada atau menambahkan izin tambahan ke peran IAM ini.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucketVersions", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

Kebijakan untuk memberikan izin minimum

Kebijakan berikut memberikan izin minimum yang diperlukan untuk menggunakan Redshift Spectrum dengan Amazon S3, AWS Glue, dan Athena.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucketVersions", "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::bucketname", "arn:aws:s3:::bucketname/folder1/folder2/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": "*" } ] }

Jika Anda menggunakan Athena untuk katalog data AWS Glue, kebijakan memerlukan akses Athena penuh. Kebijakan berikut memberikan akses ke sumber daya Athena. Jika database eksternal Anda berada di metastore Hive, Anda tidak memerlukan akses Athena.

JSON
{ "Version":"2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["athena:*"], "Resource": ["*"] }] }

Mengrantai peran IAM di Amazon Redshift Spectrum

Saat Anda melampirkan peran ke cluster Anda, cluster Anda dapat mengambil peran itu untuk mengakses Amazon S3, Athena, dan AWS Glue atas nama Anda. Jika peran yang dilampirkan ke cluster Anda tidak memiliki akses ke sumber daya yang diperlukan, Anda dapat mengrantai peran lain, mungkin milik akun lain. Cluster Anda kemudian untuk sementara mengambil peran rantai untuk mengakses data. Anda juga dapat memberikan akses lintas akun dengan mengrantai peran. Anda dapat merangkai maksimal 10 peran. Setiap peran dalam rantai mengambil peran berikutnya dalam rantai, sampai cluster mengambil peran di akhir rantai.

Untuk rantai peran, Anda membangun hubungan kepercayaan antara peran. Peran yang mengambil peran lain harus memiliki kebijakan izin yang memungkinkannya untuk mengambil peran yang ditentukan. Pada gilirannya, peran yang melewati izin harus memiliki kebijakan kepercayaan yang memungkinkannya meneruskan izinnya ke peran lain. Untuk informasi selengkapnya, lihat Mengh ubungkan Peran IAM di Amazon Redshift.

Saat menjalankan perintah CREATE EXTERNAL SCHEMA, Anda dapat mengrantai peran dengan menyertakan daftar ARN peran yang dipisahkan koma.

catatan

Daftar peran yang dirantai tidak boleh menyertakan spasi.

Dalam contoh berikut, MyRedshiftRole dilampirkan ke cluster. MyRedshiftRolemengambil peranAcmeData, yang menjadi milik akun111122223333.

create external schema acme from data catalog database 'acmedb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole,arn:aws:iam::111122223333:role/AcmeData';

Mengontrol akses ke AWS Glue Katalog Data

Jika digunakan AWS Glue untuk katalog data, Anda dapat menerapkan kontrol akses halus ke Katalog AWS Glue Data dengan kebijakan IAM Anda. Misalnya, Anda mungkin ingin mengekspos hanya beberapa database dan tabel ke peran IAM tertentu.

Bagian berikut menjelaskan kebijakan IAM untuk berbagai tingkat akses ke data yang disimpan dalam Katalog AWS Glue Data.

Kebijakan untuk operasi database

Jika Anda ingin memberi pengguna izin untuk melihat dan membuat database, mereka memerlukan hak akses ke database dan Katalog AWS Glue Data.

Contoh kueri berikut membuat database.

CREATE EXTERNAL SCHEMA example_db FROM DATA CATALOG DATABASE 'example_db' region 'us-west-2' IAM_ROLE 'arn:aws:iam::redshift-account:role/spectrumrole' CREATE EXTERNAL DATABASE IF NOT EXISTS

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk membuat database.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:database/example_db", "arn:aws:glue:us-west-2:111122223333:catalog" ] } ] }

Contoh kueri berikut mencantumkan database saat ini.

SELECT * FROM SVV_EXTERNAL_DATABASES WHERE databasename = 'example_db1' or databasename = 'example_db2';

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk mencantumkan database saat ini.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:database/example_db1", "arn:aws:glue:us-west-2:111122223333:database/example_db2", "arn:aws:glue:us-west-2:111122223333:catalog" ] } ] }

Kebijakan untuk operasi tabel

Jika Anda ingin memberi pengguna izin untuk melihat, membuat, melepas, mengubah, atau mengambil tindakan lain pada tabel, mereka memerlukan beberapa jenis akses. Mereka membutuhkan akses ke tabel itu sendiri, database milik mereka, dan katalog.

Contoh kueri berikut membuat tabel eksternal.

CREATE EXTERNAL TABLE example_db.example_tbl0( col0 INT, col1 VARCHAR(255) ) PARTITIONED BY (part INT) STORED AS TEXTFILE LOCATION 's3://test/s3/location/';

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk membuat tabel eksternal.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:database/example_db", "arn:aws:glue:us-west-2:111122223333:table/example_db/example_tbl0" ] } ] }

Contoh berikut kueri setiap daftar tabel eksternal saat ini.

SELECT * FROM svv_external_tables WHERE tablename = 'example_tbl0' OR tablename = 'example_tbl1';
SELECT * FROM svv_external_columns WHERE tablename = 'example_tbl0' OR tablename = 'example_tbl1';
SELECT parameters FROM svv_external_tables WHERE tablename = 'example_tbl0' OR tablename = 'example_tbl1';

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk mencantumkan tabel eksternal saat ini.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:database/example_db", "arn:aws:glue:us-west-2:111122223333:table/example_db/example_tbl0", "arn:aws:glue:us-west-2:111122223333:table/example_db/example_tbl1" ] } ] }

Contoh kueri berikut mengubah tabel yang ada.

ALTER TABLE example_db.example_tbl0 SET TABLE PROPERTIES ('numRows' = '100');

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk mengubah tabel yang ada.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetTable", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:database/example_db", "arn:aws:glue:us-west-2:111122223333:table/example_db/example_tbl0" ] } ] }

Contoh kueri berikut menjatuhkan tabel yang ada.

DROP TABLE example_db.example_tbl0;

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk menghapus tabel yang ada.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:database/example_db", "arn:aws:glue:us-west-2:111122223333:table/example_db/example_tbl0" ] } ] }

Kebijakan untuk operasi partisi

Jika Anda ingin memberi pengguna izin untuk melakukan operasi tingkat partisi (lihat, buat, lepas, ubah, dan sebagainya), mereka memerlukan izin ke tabel milik partisi tersebut. Mereka juga memerlukan izin ke database terkait dan Katalog AWS Glue Data.

Contoh kueri berikut membuat partisi.

ALTER TABLE example_db.example_tbl0 ADD PARTITION (part=0) LOCATION 's3://test/s3/location/part=0/'; ALTER TABLE example_db.example_t ADD PARTITION (part=1) LOCATION 's3://test/s3/location/part=1/';

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk membuat partisi.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetTable", "glue:BatchCreatePartition" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:database/example_db", "arn:aws:glue:us-west-2:111122223333:table/example_db/example_tbl0" ] } ] }

Contoh kueri berikut mencantumkan partisi saat ini.

SELECT * FROM svv_external_partitions WHERE schemname = 'example_db' AND tablename = 'example_tbl0'

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk mencantumkan partisi saat ini.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetPartitions", "glue:GetTables", "glue:GetTable" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:database/example_db", "arn:aws:glue:us-west-2:111122223333:table/example_db/example_tbl0" ] } ] }

Contoh kueri berikut mengubah partisi yang ada.

ALTER TABLE example_db.example_tbl0 PARTITION(part='0') SET LOCATION 's3://test/s3/new/location/part=0/';

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk mengubah partisi yang ada.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetPartition", "glue:UpdatePartition" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:database/example_db", "arn:aws:glue:us-west-2:111122223333:table/example_db/example_tbl0" ] } ] }

Contoh kueri berikut menjatuhkan partisi yang ada.

ALTER TABLE example_db.example_tbl0 DROP PARTITION(part='0');

Kebijakan IAM berikut memberikan izin minimum yang diperlukan untuk menghapus partisi yang ada.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:DeletePartition" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:database/example_db", "arn:aws:glue:us-west-2:111122223333:table/example_db/example_tbl0" ] } ] }