存取其他資料的許可AWS資源 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

存取其他資料的許可AWS資源

在您的集羣和另一個AWS資源 (例如 Amazon S3、Amazon DynamoDB、Amazon EMR 或 Amazon EC2),叢集必須具備存取此資源和執行必要動作的許可。例如,若要從 Amazon S3 載入資料,COPY 必須具備儲存貯體的 LIST 存取權,且儲存貯體物件必須具備儲存貯體物件的 GET 存取權。如需最低許可的相關資訊,請參閱 COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可

叢集必須經過驗證,才能獲得授權來存取資源。您可以選擇下列任一種身份驗證方法:

  • 角色類型存取控制— 如果是角色型存取控制,請指定AWS Identity and Access Management(IAM) 角色,叢集進行身份驗證和授權時所使用之物件。為了保護您的AWS憑證和敏感資料,強烈建議使用角色型身份驗證。

  • 金鑰型存取控制— 對於基於密鑰的訪問控制,您可以提供AWSIAM 使用者的存取登入資料 (存取金鑰 ID 和私密存取金鑰)。

角色類型存取控制

搭配角色類型存取控制時,您的集羣會暫時代表您擔任 IAM 角色。然後,根據角色獲予的授權,叢集可以存取所需的AWS的費用。

IAM角色類似 IAM 使用者,因為它是AWS身分使用許可政策可決定身分在AWS。但是,角色可以由任何需要此角色的實體來擔任,而不必與一個使用者產生獨特的關聯。此外,角色沒有任何相關聯的登入資料 (密碼或存取金鑰)。反之,如果角色與叢集相關聯,則會動態建立存取金鑰並將該金鑰提供給叢集。

建議您使用角色型存取控制,因為可提供更安全、更精細控制對AWS資源和敏感用户數據,以及保護您的AWS登入資料。

角色型身份驗證提供下列優點:

  • 您可以使用AWS標準 IAM 工具來定義 IAM 角色,並將此角色與多個叢集建立關聯。修改角色的存取政策時,會將變更自動套用至所有使用該角色的叢集。

  • 您可以定義精細的 IAM 策略,以授予特定的叢集和資料庫使用者許可,讓他們可以存取特定的AWS資源和行動.

  • 您的叢集會在執行時間取得臨時工作階段登入資料,並視需要重新整理登入資料,直到操作完成。如果您使用金鑰型臨時登入資料,萬一臨時登入資料在操作完成之前就過期,則操作會失敗。

  • 不會在 SQL 程式碼中存放或傳輸存取金鑰 ID 和私密存取金鑰。

若要使用角色型存取控制,您必須先使用 Amazon Redshift 服務角色型建立 IAM 角色,再將角色連接至叢集。角色至少必須具備 COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可中列出的許可。如需建立 IAM 角色並將其附加至叢集的步驟,請參授權 Amazon Redshift 訪問其他AWS代表您提供的服務中的Amazon Redshift 叢集管理指南

您可以使用 Amazon Redshift 管理主控台、CLI 或 API 將角色新增至叢集,或查看與叢集相關聯的角色。如需詳細資訊,請參閱「」將 IAM 角色與羣集關聯中的Amazon Redshift 叢集管理指南

建立 IAM 角色時,IAM 會傳回角色的 Amazon Resource Name (ARN)。若要指定 IAM 角色,請使用 IAM_ROLE 參數或 CREDENTIALS 參數來提供角色 ARN。

例如,假設下列角色已附加至叢集。

"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"

下列 COPY 命令範例使用 IAM_ROLE 參數,搭配上一個範例中的 ARN,以驗證身分並存取 Amazon S3。

copy customer from 's3://mybucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

下列 COPY 命令範例使用 CREDENTIALS 參數來指定 IAM 角色。

copy customer from 's3://mybucket/mydata' credentials 'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';

此外,超級用户可以向數據庫用户和組授予 ASMEROLE 權限,以便為 COPY 操作提供對角色的訪問權限。如需相關資訊,請參閱 GRANT

金鑰型存取控制

搭配金鑰型存取控制,請提供 IAM 使用者的存取金鑰 ID 和私密存取金鑰,而此 IAM 使用者獲授權存取AWS包含數據的資源。您可以將 ACCESS_KEY_ID and SECRET_ACCESS_KEY 參數一起使用,或使用 CREDENTIALS 參數。

注意

強烈建議使用 IAM 角色來驗證身分,而不要提供純文字存取金鑰 ID 和私密存取金鑰。如果您選擇金鑰型存取控制,請不要使用AWS帳户(根)憑據。請一律建立 IAM 用户,並提供該使用者的存取金鑰 ID 和私密存取金鑰。有關創建 IAM 用户的步驟,請參閲在您的AWS帳戶

若要使用 ACCESS_KEY_ID 和 SECRET_ACCESS_KEY 來驗證身分,請以授權使用者的存取金鑰 ID 和完整私密存取金鑰,取代 <access-key-id><secret-access-key>,如下所示。

ACCESS_KEY_ID '<access-key-id>' SECRET_ACCESS_KEY '<secret-access-key>';

若要使用 CREDENTIALS 參數來驗證身分,請以授權使用者的存取金鑰 ID 和完整私密存取金鑰,取代 <access-key-id><secret-access-key>,如下所示。

CREDENTIALS 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';

IAM 使用者至少必須具備COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可

暫時安全憑證

如果使用金鑰型存取控制,您可以利用臨時安全性登入資料,以進一步限制使用者有何權限存取您的資料。角色型身份驗證會自動使用臨時登入資料。

注意

強烈建議使用role-based access control,而不要建立臨時登入資料並以純文字提供存取金鑰 ID 和私密存取金鑰。角色型存取控制會自動使用臨時登入資料。

臨時安全性登入資料提供加強的安全性,因為有效期限較短,且過期之後不能重複使用。與字符一起產生的存取金鑰 ID 和私密存取金鑰一定要有字符才能使用,而具有這些臨時安全性登入資料的使用者只能在登入資料到期之前存取您的資源。

若要授予使用者暫時存取您資源的許可,請呼叫 AWS Security Token Service (AWS STS) API 操作。AWS STS API 操作會傳回臨時安全性登入資料,該登入資料由安全字符、存取金鑰 ID 和私密存取金鑰組成。如果某使用者需要暫時存取您的資源,您可以將臨時安全性登入資料發行給該使用者。這些使用者可以是現有的 IAM 使用者,或非AWS用户。如需建立臨時安全性憑證的詳細資訊,請參使用臨時安全登入資料IAM 使用者指南中的。

您可以將 ACCESS_KEY_ID and SECRET_ACCESS_KEY 參數與 SESSION_TOKEN 參數或 CREDENTIALS 參數一起使用。您也必須提供字符隨附的存取金鑰 ID 和私密存取金鑰。

若要使用 ACCESS_KEY_ID、SECRET_ACCESS_KEY 和 SESSION_TOKEN 來驗證身分,請取代 <temporary-access-key-id><temporary-secret-access-key><temporary-token>,如下所示。

ACCESS_KEY_ID '<temporary-access-key-id>' SECRET_ACCESS_KEY '<temporary-secret-access-key>' SESSION_TOKEN '<temporary-token>';

若要使用 CREDENTIALS 來驗證身分,請在登入資料字串中包含 token=<temporary-token>,如下所示。

CREDENTIALS 'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>';

下列範例顯示使用臨時安全性登入資料的 COPY 命令。

copy table-name from 's3://objectpath' access_key_id '<temporary-access-key-id>' secret_access_key '<temporary-secret-access-key> token '<temporary-token>';

下列範例使用臨時登入資料和檔案加密來載入 LISTING 資料表。

copy listing from 's3://mybucket/data/listings_pipe.txt' access_key_id '<temporary-access-key-id>' secret_access_key '<temporary-secret-access-key> token '<temporary-token>' master_symmetric_key '<root-key>' encrypted;

下列範例使用 CREDENTIALS 參數搭配臨時登入資料和檔案加密來載入 LISTING 資料表。

copy listing from 's3://mybucket/data/listings_pipe.txt' credentials 'aws_access_key_id=<temporary-access-key-id>;<aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>;master_symmetric_key=<root-key>' encrypted;
重要

臨時安全性登入資料在 COPY 或 UNLOAD 操作的整個期間內必須有效。如果臨時安全性登入資料在操作期間過期,則命令會失敗,而交易會回復。例如,假設臨時安全性登入資料在 15 分鐘之後過期,而 COPY 操作需要 1 小時,則 COPY 操作在完成之前就會失敗。如果您使用角色型存取,臨時安全性登入資料會自動重新整理,直到操作完成。

COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可

CREDENTIALS 參數所參考的 IAM 角色或 IAM 使用者至少必須具備下列許可:

  • 對於來自 Amazon S3 的 COPY,具備許可來列出 Amazon S3 儲存貯體和獲取正在載入的 Amazon S3 資料元以及清單檔案 (如果使用)。

  • 如果使用來自 Amazon S3、Amazon EMR 和遠端主機 (SSH) 的 COPY,具備 JSON 格式的資料,可以在 Amazon S3 上列出和獲取 JSONPath 檔案 (如果使用)。

  • 如果是 DynamoDB 的 COPY,請具備許可來掃描和描述要載入的 DynamoDB 資料表。

  • 若要從 Amazon EMR 集羣 COPY 時,請取得ListInstancesAmazon EMR 叢集上的操作。

  • 若要將資料檔案卸載到此處,具備 GET、LIST 和 PUT 許可,具備「卸載至 Amazon S3」,具備 GET、LIST 和 PUT 許可。

  • 從 Amazon S3 使用的 CREATE LIBRARY 時,具備許可來 LIST S3 儲存貯體及 GET 要匯入的 Amazon S3 物件。

注意

如果您收到錯誤消息S3ServiceException: Access Denied,則在運行 COPY、UNLOAD 或 CREATE LIBRARY 命令時,叢集沒有適當的 Amazon S3 存取許可。

您可以將 IAM 政策附加至 IAM 角色,而該角色附加至 IAM 角色,而該角色附加至 IAM 使用者、IAM 使用者或 IAM 使用者所屬的組,以此來管理 IAM 許可。例如,AmazonS3ReadOnlyAccess託管政策授予 Amazon S3 資源的 LIST 和 GET 許可。如需 IAM 政策的詳細資訊,請參管理 IAM 政策中的IAM User Guide