設定來源存取權:Amazon S3

您可以透過下列任一方法設定 Amazon S3 值區的存取權:

支援的地區

Storage 移轉服務支援下列 Amazon S3 區域:
af-south-1
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ap-southeast-2
ap-southeast-3
ap-southeast-4
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
il-central-1
me-central-1
me-south-1
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2
使用代管私人網路進行轉移時,支援下列 AWS 區域:
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
us-east-1
us-east-2
us-west-1
us-west-2
 

所需權限

如要使用 Storage 移轉服務移動 Amazon S3 值區中的資料,使用者帳戶或同盟身分角色必須具備該值區的適當權限:

權限 說明 使用
s3:ListBucket 允許 Storage 移轉服務列出值區中的物件。 必要。
s3:GetObject 允許 Storage 移轉服務讀取值區中的物件。 如要轉移所有物件的目前版本,這是必填欄位。如果您的資訊清單指定物件版本,請改用 s3:GetObjectVersion
s3:GetObjectVersion 允許 Storage 移轉服務讀取值區中特定版本的物件。 如果資訊清單指定物件版本,則為必要項目。否則請使用 s3:GetObject
s3:DeleteObject 允許 Storage 移轉服務刪除值區中的物件。 如果將 deleteObjectsFromSourceAfterTransfer 設為 true,就需提供這個屬性。

使用存取憑證進行驗證

如要使用存取金鑰 ID 和私密金鑰向 AWS 進行驗證,請按照下列步驟操作:

  1. 建立 AWS 身分與存取權管理 (AWS IAM) 使用者,請使用您可輕易辨識的名稱,如 transfer-user

  2. 如果是 AWS 存取權類型,請選取「Access key - programmatic access」(存取金鑰 - 程式輔助存取)

  3. 將下列其中一個角色授予使用者:

    • AmazonS3ReadOnlyAccess,提供來源的唯讀存取權。 這樣一來,系統就能執行轉移作業,但轉移完成後,就無法刪除來源物件。
    • 如果移轉作業設定為刪除來源物件,請附加 AmazonS3FullAccess
    • 自訂角色,且具備上方「必要權限」表格中的適當權限。最低權限的 JSON 如下列範例所示:

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
  4. 成功建立使用者後,請記下存取金鑰 ID存取密鑰

將存取金鑰 ID 和私密存取金鑰傳遞至 Storage 移轉服務的方式,取決於您用來啟動移轉的介面。

Cloud 控制台

直接在移轉工作建立表單中輸入值。

如要開始使用,請參閱「建立轉移作業」。

gcloud CLI

建立 JSON 檔案,格式如下:

{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}

使用 source-creds-file 標記,將檔案位置傳遞至 gcloud transfer jobs create 指令:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/KEYFILE.JSON

REST API

transferSpec 物件必須包含重要資訊,做為 awsS3DataSource 物件的一部分:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

用戶端程式庫

請參閱「建立轉移作業」頁面中的範例。

將存取憑證儲存在 Secret Manager 中

Secret Manager 是一項安全服務,可儲存及管理密碼等機密資料。這項服務會使用嚴密的加密技術、角色型存取權控管和稽核記錄,保護您的密鑰。

Storage 移轉服務可運用 Secret Manager 保護 AWS 存取憑證。將憑證載入 Secret Manager,然後將密鑰資源名稱傳遞至 Storage Transfer Service。

啟用 API

Enable the Secret Manager API.

Roles required to enable APIs

To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

Enable the API

設定其他權限

使用者權限

建立密鑰的使用者必須具備下列角色:

  • Secret Manager 管理員 (roles/secretmanager.admin)

瞭解如何授予角色

服務代理權限

Storage 移轉服務代理需要下列 IAM 角色:

  • Secret Manager Secret Accessor (roles/secretmanager.secretAccessor)

如要將角色授予服務代理:

Cloud 控制台

  1. 按照操作說明尋找服務專員的電子郵件地址

  2. 前往 Google Cloud 控制台的「IAM」頁面。

    前往「IAM」(身分與存取權管理) 頁面

  3. 按一下「授予存取權」

  4. 在「New principals」(新增主體) 文字方塊中,輸入服務代理商的電子郵件地址。

  5. 在「Select a role」(請選擇角色) 下拉式選單中,搜尋並選取「Secret Manager Secret Accessor」(Secret Manager 密碼存取者)

  6. 按一下 [儲存]

gcloud

使用 gcloud projects add-iam-policy-binding 指令,將 IAM 角色新增至服務代理程式。

  1. 按照操作說明尋找服務專員的電子郵件地址

  2. 在指令列中輸入下列指令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

建立密鑰

使用 Secret Manager 建立密鑰:

Cloud 控制台

  1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

    前往 Secret Manager

  2. 按一下「建立密鑰」

  3. 輸入名稱。

  4. 在「Secret value」(密鑰值) 文字方塊中,以以下格式輸入憑證:

    {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
    
  5. 按一下「建立密鑰」

  6. 建立密鑰後,請記下密鑰的完整資源名稱:

    1. 選取「總覽」分頁標籤。

    2. 複製「資源 ID」的值。格式如下:

      projects/1234567890/secrets/SECRET_NAME

gcloud

如要使用 gcloud 指令列工具建立新密鑰,請將 JSON 格式的憑證傳遞至 gcloud secrets create 指令:

printf '{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-

擷取密鑰的完整資源名稱:

gcloud secrets describe SECRET_NAME

請記下回應中的 name 值。格式如下:

projects/1234567890/secrets/SECRET_NAME

如要進一步瞭解如何建立及管理密鑰,請參閱 Secret Manager 說明文件

將密鑰傳遞至工作建立指令

如要搭配使用 Secret Manager 和 Storage 移轉服務,必須使用 REST API 建立移轉作業。

將 Secret Manager 資源名稱做為 transferSpec.awsS3DataSource.credentialsSecret 欄位的值傳遞:

POST https://storagetransfer.googleapis.com/v1/transferJobs

{
  "description": "Transfer with Secret Manager",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_BUCKET_NAME",
          "credentialsSecret": "SECRET_RESOURCE_ID",
      },
      "gcsDataSink": {
          "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
      }
  }
}

使用聯合身分驗證

如要使用聯合身分向 AWS 進行驗證,請按照下列步驟操作:

  1. 在 AWS 中建立新的 IAM 角色。

  2. 選取「自訂信任政策」做為信任實體類型。

  3. 複製並貼上下列信任政策:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:sub": "SUBJECT_ID"
            }
          }
        }
      ]
    }
    
  4. SUBJECT_ID 替換為 Google 代管服務帳戶的 subjectID。當您開始使用 Storage 移轉服務時,系統會自動建立這個帳戶。如要擷取 subjectID,請按照下列步驟操作:

    1. 前往googleServiceAccounts.get參考頁面

      系統會開啟互動式面板,標題為「試試這個方法」

    2. 在面板的「Request parameters」(要求參數) 下方,輸入專案 ID。您在此指定的專案,必須是您用來管理 Storage 移轉服務的專案。

    3. 按一下 [Execute] (執行)。回應中會包含 subjectId

  5. 將下列其中一項權限政策授予角色:

    • AmazonS3ReadOnlyAccess 提供來源的唯讀存取權。 這樣一來,系統就能執行轉移作業,但轉移完成後,就無法刪除來源物件。
    • 如果移轉作業設定為刪除來源物件,請附加 AmazonS3FullAccess
    • 自訂角色,且具備上方「必要權限」表格中的適當權限。最低權限的 JSON 如下列範例所示:

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
  6. 為角色指派名稱並建立角色。

  7. 建立完成後,請查看角色詳細資料,以擷取 Amazon Resource Name (ARN)。請記下這個值,格式為 arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME

將 ARN 傳遞至 Storage 移轉服務的方式,取決於您用來啟動移轉作業的介面。

Cloud 控制台

直接在移轉工作建立表單中輸入 ARN。

如要開始使用,請參閱「建立轉移作業」。

gcloud CLI

建立 JSON 檔案,格式如下:

{
  "roleArn": "ARN"
}

使用 source-creds-file 標記,將檔案位置傳遞至 gcloud transfer jobs create 指令:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/ARNFILE.JSON

REST API

您的 transferSpec 物件必須包含 ARN 資訊,做為 awsS3DataSource 物件的一部分:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

用戶端程式庫

請參閱「建立轉移作業」頁面中的範例。

IP 限制

如果 AWS 專案使用 IP 限制來存取儲存空間,您必須將 Storage 移轉服務工作站使用的 IP 範圍,加入允許的 IP 清單。

由於這些 IP 範圍可能會變動,我們會在永久位址發布目前的 JSON 檔案值:

https://www.gstatic.com/storage-transfer-service/ipranges.json

在檔案中新增範圍後,我們至少會等待 7 天,才會將該範圍用於儲存空間轉移服務的要求。

建議您至少每週從這份文件提取資料,確保安全設定維持在最新狀態。如需從 JSON 檔案擷取 IP 範圍的 Python 指令碼範例,請參閱這篇虛擬私有雲說明文件

如要將這些範圍新增為允許的 IP,請使用值區政策中的 Condition 欄位,詳情請參閱 AWS S3 說明文件:根據特定 IP 位址管理存取權