設定來源存取權: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"
  }
}

用戶端程式庫

請參閱「Create transfers」(建立轉移作業) 頁面的範例。

將存取憑證儲存在 Secret Manager 中

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

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

啟用 API

Enable the Secret Manager API.

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"
  }
}

用戶端程式庫

請參閱「Create transfers」(建立轉移作業) 頁面的範例。

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 位址管理存取權