存取其他 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 認證和敏感資料,我們強烈建議您使用以角色為基礎的驗證。

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

角色類型存取控制

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

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

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

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

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

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

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

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

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

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

建立 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://DOC-EXAMPLE-BUCKET/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

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

copy customer from 's3://DOC-EXAMPLE-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 和秘密訪問密鑰進行身份驗證,請將 <> 和 < access-key-id > 替換為授權用戶的訪問密鑰 ID 和完全密鑰訪問密鑰,如下secret-access-key所示。

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

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

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 和私密存取金鑰。

要使用訪問 _KEY_ID,秘密密鑰和會話令牌進行身份驗證,請替換 <>,<>,並如下所示。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://DOC-EXAMPLE-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://DOC-EXAMPLE-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 操作在完成之前就會失敗。如果您使用角色型存取,臨時安全性登入資料會自動重新整理,直到操作完成。

COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可

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

  • 從 Amazon S3 COPY 時,具備許可來 LIST Amazon S3 儲存貯體及 GET 要載入的 Amazon S3 物件和資訊清單檔案 (如果使用)。

  • 從 Amazon S3、Amazon EMR 和遠端主機 (SSH) COPY JSON 格式的資料時,具備許可來 LIST 和 GET Amazon S3 上的 JSONPaths 檔案 (如果使用)。

  • 從 DynamoDB COPY 時,具備許可來 SCAN 和 DESCRIBE 要載入的 DynamoDB 資料表。

  • 從 Amazon EMR 叢集 COPY 時,具備許可在 Amazon EMR 叢集上執行 ListInstances 動作。

  • UNLOAD 到 Amazon S3 時,對於 Amazon S3 儲存貯體 (要將資料檔案卸載到此處),具備 GET、LIST 和 PUT 許可。

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

注意

執行 COPY、UNLOAD 或 CREATE LIBRARY 命令時,如果出現錯誤訊息 S3ServiceException: Access Denied,表示叢集沒有 Amazon S3 的適當存取許可。

您可以將 IAM 政策附加至 IAM 角色,而該角色附加至叢集、使用者或使用者所屬的群組,以此來管理 IAM 許可。例如,AmazonS3ReadOnlyAccess 受管政策授予 Amazon S3 資源的 LIST 和 GET 許可。如需管理政策的相關資訊,請參閱《IAM 使用者指南》中的管理 IAM 政策