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

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

存取其他 AWS 資源的許可

若要在叢集和其他 AWS 資源 (例如 Amazon S3、Amazon DynamoDB、Amazon 或 Amazon) 之間移動資料 EMREC2,您的叢集必須具有存取資源和執行必要動作的權限。例如,若要從 Amazon S3 載入資料,COPY必須能夠LIST存取儲存貯體並GET存取儲存貯體物件。如需最低許可的相關資訊,請參閱 IAMCOPY、和的UNLOAD權限 CREATE LIBRARY

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

  • 角色類型存取控制— 對於以角色為基礎的存取控制,您可以指定叢集用於驗證和授權的 AWS Identity and Access Management (IAM) 角色。為了保護您的 AWS 認證和敏感資料,我們強烈建議您使用以角色為基礎的驗證。

  • 金鑰型存取控制— 對於以金鑰為基礎的存取控制,您可以以純文字形式提供使用者的存取認證 (存取金鑰 ID 和秘密存取金鑰)。 AWS

角色類型存取控制

透過以角色為基礎的存取控制,您的叢集會暫時代表您擔任IAM角色。然後,根據角色獲予的授權,叢集即可存取所需的 AWS 資源。

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

我們建議您使用以角色為基礎的存取控制,因為除了保護您的認證之外,它還提供對 AWS 資源和敏感使用者資料的存取更加安全、更精細的控制。 AWS

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

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

  • 您可以定義精細的IAM原則,授與特定叢集和資料庫使用者存取特定 AWS 資源和動作的權限。

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

  • 您的存取金鑰 ID 和秘密存取金鑰 ID 不會儲存或傳輸在SQL程式碼中。

若要使用以IAM角色為基礎的存取控制,您必須先使用 Amazon Redshift 服務角色類型建立角色,然後將該角色附加到叢集。角色至少必須具備 IAMCOPY、和的UNLOAD權限 CREATE LIBRARY中列出的許可。如需建立IAM角色並將其附加到叢集的步驟,請參閱 Amazon Redshift 管理指南中的授權 Amazon Redshift 代您存取其他 AWS 服務

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

建立IAM角色時,會IAM傳回該角色的 Amazon 資源名稱 (ARN)。若要指定IAM角色,請為角ARN色提供IAM_ROLE參數或CREDENTIALS參數。

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

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

下列COPY命令範例使用上一個範例ARN中的 IAM _ ROLE 參數來進行身份驗證和存取 Amazon S3。

copy customer from 's3://amzn-s3-demo-bucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

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

copy customer from 's3://amzn-s3-demo-bucket/mydata' credentials 'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';

此外,超級使用者可以將ASSUMEROLE權限授與資料庫使用者和群組,以提供COPY作業角色的存取權。如需相關資訊,請參閱 GRANT

金鑰型存取控制

透過以金鑰為基礎的存取控制,您可以為獲得授權存取包含資料之 AWS 資源的IAM使用者提供存取金鑰 ID 和秘密存取金鑰。您可以將 ACCESS_KEY_ID and SECRET_ACCESS_KEY 參數一起使用,或使用 CREDENTIALS 參數。

注意

我們強烈建議您使用IAM角色進行驗證,而不是提供純文字存取金鑰 ID 和秘密存取金鑰。如果您選擇以金鑰為基礎的存取控制,請勿使用您的 AWS 帳號 (root) 憑證。始終創建一個IAM用戶,並提供該用戶的訪問密鑰 ID 和秘密訪問密鑰。如需建立IAM使用者的步驟,請參閱在您的 AWS 帳IAM戶中建立使用者。

要使用 ACCESS _ KEY _ID 和 SECRET ACCESS _ 進行身份驗證KEY,請替換 <access-key-id> 以及 <secret-access-key> 與授權用戶的訪問密鑰 ID 和完全秘密訪問密鑰,如下圖所示。

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

若要使用CREDENTIALS參數進行驗證,請取代 <access-key-id> 以及 <secret-access-key> 與授權用戶的訪問密鑰 ID 和完全秘密訪問密鑰,如下圖所示。

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

使IAM用者至少必須具有中列出的權限IAMCOPY、和的UNLOAD權限 CREATE LIBRARY

暫時安全憑證

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

注意

強烈建議使用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,請包含session_token=<temporary-token>在認證字串中,如下所示。

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

下列範例顯示具有暫時安全性認證的COPY命令。

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

下列範例會載入含有暫時認證和檔案加密的資料LISTING表。

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

下列範例會使用具有臨時認證和檔案加密的CREDENTIALS參數載入資料LISTING表。

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

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

IAMCOPY、和的UNLOAD權限 CREATE LIBRARY

參數所CREDENTIALS參照的IAM角色或使用者至少必須具備下列權限:

  • 對於COPY從 Amazon S3,授權要LIST載入的 Amazon S3 儲存貯GET體和 Amazon S3 物件,以及資訊清單檔案 (如果有使用的話)。

  • 對於COPY來自具有JSON格式化資料的 Amazon S3 EMR、Amazon 和遠端主機 (SSH),請允許 Amazon S3 上GET的檔案LIST和JSONPaths檔案 (如果有使用的話)。

  • 對於COPY從 DynamoDB,請參閱正DESCRIBE在載入的 DynamoDB 資料表的權限SCAN和動態資料表。

  • 對於COPY來自 Amazon EMR 叢集,請在 Amazon EMR 叢集上ListInstances執行該動作的許可。

  • 適用於UNLOAD要卸載資料檔案之 Amazon S3 儲存貯體的 Amazon S3 LIST、、和PUT許可。GET

  • 對於CREATELIBRARY從 Amazon S3,允許匯LIST入的 Amazon S3 儲存貯GET體和 Amazon S3 物件。

注意

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

您可以將IAM原則附加至叢集、使用者或使用者所屬群組的IAM角色,藉此管理IAM權限。例如,AmazonS3ReadOnlyAccess受管政策授予 Amazon S3 資源LIST並獲得GET許可。如需有關IAM策略的詳細資訊,請參閱IAM使用指南中的管理IAM策略