Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
IAMkebijakan untuk Amazon Redshift Spectrum
Topik ini menjelaskan IAM izin yang diperlukan untuk menggunakan 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 IAMPeran rantai 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 AWS Glue Pengembang.
Topik
Izin Amazon S3
Minimal, klaster Anda membutuhkan GET dan LIST akses 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 tertentu. VPC
Kebijakan berikut memberikan GET dan LIST akses 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 GET dan LIST akses ke bucket Amazon S3 Anda yang diberi nama. amzn-s3-demo-bucket
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" }] }
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 COPY operasi.
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": {"StringEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }
Demikian pula, Anda mungkin ingin membuat IAM peran yang memungkinkan akses untuk COPY operasi, 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:::amzn-s3-demo-bucket/*", "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": ["*"] }] }
IAMPeran rantai di 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 IAM Peran di Amazon Redshift.
Saat menjalankan CREATE EXTERNAL SCHEMA perintah, Anda dapat merantai peran dengan menyertakan daftar peran yang dipisahkan koma. ARNs
catatan
Daftar peran yang dirantai tidak boleh menyertakan spasi.
Dalam contoh berikut, MyRedshiftRole
dilampirkan ke cluster. MyRedshiftRole
mengasumsikan 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 digunakan AWS Glue untuk katalog data, Anda dapat menerapkan kontrol akses berbutir halus ke Katalog AWS Glue Data dengan kebijakan Anda. IAM Misalnya, Anda mungkin ingin mengekspos hanya beberapa database dan tabel ke peran tertentuIAM.
Bagian berikut menjelaskan IAM kebijakan 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
IAMKebijakan 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';
IAMKebijakan 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/';
IAMKebijakan 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';
IAMKebijakan berikut memberikan izin minimum yang diperlukan untuk mencantumkan 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');
IAMKebijakan 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;
IAMKebijakan 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/';
IAMKebijakan 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'
IAMKebijakan 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/';
IAMKebijakan 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');
IAMKebijakan berikut memberikan izin minimum yang diperlukan untuk menghapus 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" ] } ] }