IAMpolitiche per Amazon Redshift Spectrum - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

IAMpolitiche per Amazon Redshift Spectrum

Per impostazione predefinita, Amazon Redshift Spectrum utilizza AWS Glue Data Catalog le AWS regioni che AWS Glue supportano. In altre AWS regioni, Redshift Spectrum utilizza il catalogo dati Athena. Il tuo cluster necessita dell'autorizzazione per accedere al tuo catalogo di dati esterno in AWS Glue o Athena e ai tuoi file di dati in Amazon S3. Fornisci tale autorizzazione facendo riferimento a un ruolo AWS Identity and Access Management (IAM) collegato al tuo cluster. Se si utilizza un metastore Apache Hive per gestire il catalogo dati, non sarà necessario fornire l'accesso a ad Athena.

Puoi concatenare i ruoli di modo che il cluster possa assumere altri ruoli non associati al cluster. Per ulteriori informazioni, consulta Concatenamento IAM dei ruoli in Amazon Redshift Spectrum.

Il AWS Glue catalogo a cui accedi potrebbe essere crittografato per aumentare la sicurezza. Se il AWS Glue catalogo è crittografato, è necessaria la AWS KMS chiave AWS Glue per accedere al catalogo AWS Glue dati. Per ulteriori informazioni, consulta Encrypting Your AWS Glue Data Catalog nella AWS Glue Developer Guide.

Autorizzazioni di Amazon S3

Come minimo, il tuo cluster ha bisogno GET di LIST accesso al tuo bucket Amazon S3. Se il bucket non si trova nello stesso AWS account del cluster, il bucket deve inoltre autorizzare il cluster ad accedere ai dati. Per ulteriori informazioni, consulta Autorizzazione di Amazon Redshift ad accedere ad AWS altri servizi per tuo conto.

Nota

Il bucket Amazon S3 non può utilizzare una policy di bucket che limiti l'accesso solo da endpoint specifici. VPC

La seguente politica concede GET e LIST accede a qualsiasi bucket Amazon S3. La policy consente l'accesso ai bucket Amazon S3 per Redshift Spectrum e alle operazioni. COPY

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

La seguente politica concede GET e LIST consente l'accesso al tuo bucket Amazon S3 denominato. amzn-s3-demo-bucket

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

Autorizzazioni Amazon S3 tra account

Per concedere a Redshift Spectrum l'autorizzazione ad accedere ai dati in un bucket Amazon S3 che appartiene a AWS un altro account, aggiungi la seguente policy al bucket Amazon S3. Per ulteriori informazioni, consultare la pagina relativa alla concessione di autorizzazioni per bucket multiaccount.

{ "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/*" ] } ] }

Policy per concedere o limitare l'accesso mediante Redshift Spectrum

Per concedere l'accesso a un bucket Amazon S3 solo mediante Redshift Spectrum, includere una condizione che consenta l'accesso per l'agente utente AWS Redshift/Spectrum. La policy seguente consente l'accesso a bucket Amazon S3 unicamente per Redshift Spectrum. Esclude altri accessi, come le operazioni. COPY

{ "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"}} }] }

Allo stesso modo, potresti voler creare un IAM ruolo che consenta l'accesso alle COPY operazioni, ma escluda l'accesso a Redshift Spectrum. A questo proposito, è necessario includere una condizione che nega l'accesso per l'agente utente AWS Redshift/Spectrum. La policy seguente consente l'accesso a un bucket Amazon S3 a eccezione di 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"}} }] }

Policy per concedere autorizzazioni minime

La seguente politica concede le autorizzazioni minime richieste per utilizzare Redshift Spectrum con Amazon S3 e 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": [ "*" ] } ] }

Se invece utilizzi Athena per il tuo catalogo dati AWS Glue, la policy richiede l'accesso completo ad Athena. La policy seguente concede l'accesso alle risorse Athena. Se il database esterno è un metastore Hive, l'accesso ad Athena non è necessario.

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

Concatenamento IAM dei ruoli in Amazon Redshift Spectrum

Quando associ un ruolo al cluster, quest'ultimo può assumere quel ruolo per accedere ad Amazon S3, Athena e AWS Glue per tuo conto. Se un ruolo collegato al cluster non ha accesso alle risorse necessarie, è possibile concatenare un altro ruolo, possibilmente appartenente a un altro account. Il cluster quindi può assumere temporaneamente il ruolo concatenato per accedere ai dati. Concatenando i ruoli è anche possibile concedere l'accesso a più account. È possibile concatenare un massimo di 10 ruoli. Ogni ruolo nella catena assume il ruolo successivo nella catena, fino a quando il cluster non assume il ruolo alla fine della catena.

Per concatenare i ruoli, stabilisci una relazione di trust tra di essi. Un ruolo che assume un altro ruolo deve avere una policy di autorizzazioni che gli consente di assumere il ruolo specificato. A sua volta, il ruolo che passa le autorizzazioni deve avere una policy di trust che gli consente di passare le relative autorizzazioni a un altro ruolo. Per ulteriori informazioni, consulta Concatenamento di IAM ruoli in Amazon Redshift.

Quando esegui il CREATE EXTERNAL SCHEMA comando, puoi concatenare i ruoli includendo un elenco di ruoli separati da virgole. ARNs

Nota

L'elenco di ruoli concatenati non deve includere spazi.

Negli esempi seguenti, MyRedshiftRole è collegato al cluster. MyRedshiftRole assume il ruolo AcmeData, che appartiene all'account 111122223333.

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';

Controllo dell'accesso al Data Catalog AWS Glue

Se lo utilizzi AWS Glue per il tuo catalogo di dati, puoi applicare un controllo granulare degli accessi al AWS Glue Data Catalog con la tua policy. IAM Ad esempio, potresti voler esporre solo alcuni database e tabelle a un ruolo specifico. IAM

Le sezioni seguenti descrivono le IAM politiche per i vari livelli di accesso ai dati archiviati nel AWS Glue Data Catalog.

Policy per le operazioni di database

Se desideri concedere agli utenti le autorizzazioni per visualizzare e creare un database, devono disporre dei diritti di accesso sia al database che al AWS Glue Data Catalog.

Nella seguente query di esempio viene creato un 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

La seguente IAM politica fornisce le autorizzazioni minime richieste per la creazione di un 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" ] } ] }

La seguente query di esempio elenca i database correnti.

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

La seguente IAM politica fornisce le autorizzazioni minime necessarie per elencare i database correnti.

{ "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" ] } ] }

Policy per le operazioni di tabella

Affinché possano visualizzare, creare, rimuovere, modificare o effettuare altre operazioni sulle tabelle, gli utenti hanno bisogno di diversi tipi di accessi. Hanno bisogno di poter accedere alle tabelle, ai database ai quali queste appartengono e al catalogo.

La query di esempio seguente crea una tabella esterna.

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

La seguente IAM politica fornisce le autorizzazioni minime richieste per creare una tabella esterna.

{ "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" ] } ] }

Le query di esempio seguenti elencano ciascuna le tabelle esterne correnti.

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';

La seguente IAM politica fornisce le autorizzazioni minime necessarie per elencare le tabelle esterne correnti.

{ "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" ] } ] }

La query di esempio seguente modifica una tabella esistente.

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

La seguente IAM politica fornisce le autorizzazioni minime necessarie per modificare una tabella esistente.

{ "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" ] } ] }

La query di esempio seguente rimuove una tabella esistente.

DROP TABLE example_db.example_tbl0;

La seguente IAM politica fornisce le autorizzazioni minime necessarie per eliminare una tabella esistente.

{ "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" ] } ] }

Policy per le operazioni di partizione

Perché possano effettuare operazioni a livello di partizione (visualizzazione, creazione, rimozione, modifica e così via), gli utenti hanno bisogno delle autorizzazioni per le tabelle alle quali appartengono le partizioni. Hanno inoltre bisogno delle autorizzazione per i database correlati e il catalogo dati AWS Glue .

La query di esempio seguente crea una partizione.

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/';

La seguente IAM politica fornisce le autorizzazioni minime richieste per creare una partizione.

{ "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" ] } ] }

La seguente query di esempio elenca le partizioni correnti.

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

La seguente IAM politica fornisce le autorizzazioni minime necessarie per elencare le partizioni correnti.

{ "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" ] } ] }

La query di esempio seguente modifica una partizione esistente.

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

La seguente IAM politica fornisce le autorizzazioni minime necessarie per modificare una partizione esistente.

{ "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" ] } ] }

La query di esempio seguente rimuove una partizione esistente.

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

La seguente IAM politica fornisce le autorizzazioni minime necessarie per eliminare una partizione esistente.

{ "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" ] } ] }