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

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

存取其他 AWS 資源的許可

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

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

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

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

角色類型存取控制

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

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

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

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

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

  • 您可以定義精細IAM政策,授予特定叢集和資料庫使用者存取特定 AWS 資源和動作的許可。

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

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

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

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

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

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

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

下列COPY命令範例使用 IAM_ROLE 參數搭配上ARN一個範例中的 ,以進行 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

金鑰型存取控制

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

注意

我們強烈建議使用IAM角色進行身分驗證,而不是提供純文字存取金鑰 ID 和秘密存取金鑰。如果您選擇以金鑰為基礎的存取控制,切勿使用 AWS 您的帳戶 (根) 憑證。一律建立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 使用者至少必須擁有 中列出的許可IAM COPY、 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操作需要一小時,COPY操作會在完成之前失敗。如果您使用角色型存取,臨時安全性登入資料會自動重新整理,直到操作完成。

IAM COPY、 UNLOAD和 的許可 CREATE LIBRARY

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

  • 對於COPY來自 Amazon S3 LIST的 ,如果使用 Amazon S3 儲存貯體和正在載入的 GET Amazon S3 物件,以及資訊清單檔案的許可。

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

  • COPY 從 DynamoDB 對 的 許可,SCAN以及正在載入的 DESCRIBE DynamoDB 資料表。

  • 對於COPY來自 Amazon EMR叢集的 ,Amazon EMR叢集上ListInstances動作的許可。

  • 將資料檔案卸載至 Amazon S3 儲存貯體的 UNLOADAmazon S3LIST、、 GET和 PUT許可。

  • 從 CREATE LIBRARY Amazon S3 取得的 Amazon S3 LIST 儲存貯體和匯入GET之 Amazon S3 物件的許可。

注意

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

您可以透過將IAM政策連接至連接至叢集、使用者或使用者所屬群組IAM的角色來管理IAM許可。例如, AmazonS3ReadOnlyAccess 受管政策會授予 LIST Amazon S3 資源和GET許可。如需IAM政策的詳細資訊,請參閱 IAM 使用者指南 中的管理IAM政策