Kebijakan IAM untuk Amazon Redshift Spectrum - Amazon Redshift

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

Secara default, Amazon Redshift Spectrum menggunakan AWS Glue Data Catalog AWS di Wilayah yang AWS Glue mendukung. Di AWS Wilayah 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 klaster Anda. Jika Anda menggunakan metastore Apache Hive untuk mengelola katalog data Anda, Anda tidak perlu menyediakan akses ke Athena.

Anda dapat merantai peran sehingga klaster Anda dapat mengambil peran lain yang tidak melekat pada klaster. Untuk informasi selengkapnya, lihat Merantai peran IAM dalam 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 AWS Glue Pengembang.

Izin Amazon S3

Minimal, klaster Anda membutuhkan 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 klaster Anda untuk mengakses data. Untuk informasi selengkapnya, lihat Mengotorisasi Amazon Redshift untuk Mengakses Layanan AWS 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 Redshift Spectrum serta operasi COPY.

{ "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 nama. myBucket

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

Izin Amazon S3 lintas akun

Untuk memberikan izin Redshift Spectrum untuk mengakses data di bucket Amazon S3 milik akun AWS lain, tambahkan kebijakan berikut ke bucket Amazon S3. Untuk informasi selengkapnya, lihat Memberikan Izin Bucket Lintas Akun.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::redshift-account: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

Untuk memberikan akses ke bucket Amazon S3 hanya menggunakan Redshift Spectrum, sertakan kondisi yang memungkinkan akses untuk agen pengguna. AWS Redshift/Spectrum Kebijakan berikut mengizinkan akses ke bucket Amazon S3 hanya untuk Redshift Spectrum. Ini tidak termasuk akses lain, seperti operasi COPY.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::myBucket/*", "Condition": {"StringEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }

Demikian pula, Anda mungkin ingin membuat peran IAM yang memungkinkan akses untuk operasi COPY, tetapi tidak termasuk akses Redshift Spectrum. Untuk melakukannya, sertakan kondisi yang menolak akses untuk agen AWS Redshift/Spectrum pengguna. Kebijakan berikut memungkinkan akses ke bucket Amazon S3 dengan pengecualian Redshift Spectrum.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::myBucket/*", "Condition": {"StringNotEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }

Kebijakan untuk memberikan izin minimum

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "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 Anda AWS Glue, kebijakan tersebut 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.

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

Merantai peran IAM dalam Amazon Redshift Spectrum

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

Untuk peran rantai, Anda membangun hubungan kepercayaan antara peran. Peran yang mengasumsikan peran lain harus memiliki kebijakan izin yang memungkinkannya 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 Merantai Peran IAM di Amazon Redshift.

Saat menjalankan perintah CREATE EXTERNAL SCHEMA, Anda dapat merantai 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. MyRedshiftRolemengasumsikan 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 Katalog AWS Glue Data

Jika Anda menggunakan AWS Glue untuk katalog data Anda, 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 basis data

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

Contoh query 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.

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

Contoh query 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 membuat daftar database saat ini.

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

Kebijakan untuk operasi tabel

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

Contoh query 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.

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

Contoh berikut query masing-masing 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 membuat daftar tabel eksternal saat ini.

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

Contoh query 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.

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

Contoh query berikut menjatuhkan tabel yang ada.

DROP TABLE example_db.example_tbl0;

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

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

Kebijakan untuk operasi partisi

Jika Anda ingin memberi pengguna izin untuk melakukan operasi tingkat partisi (melihat, membuat, menjatuhkan, mengubah, dan sebagainya), mereka memerlukan izin ke tabel yang menjadi milik partisi. Mereka juga memerlukan izin ke database terkait dan Katalog AWS Glue Data.

Contoh query 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.

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

Contoh query 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 membuat daftar partisi saat ini.

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

Contoh query 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.

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

Contoh query berikut menjatuhkan partisi yang ada.

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

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

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