---
title: "もうアクセスキーの発行はやめよう。S3からGCSへの「鍵なし」転送術 | grasys blog"
url: "https://blog.grasys.io/post/tsunoda/keylesstransfer-s3-gcs/"
description: "こんにちは、つのだです。 Google CloudのStorage Transfer Serviceを使用してS3からGCSへデータを送りたい時ありますよね。 でもアクセスキーの管理めんどくさい... 鍵ローテ？ダルい... 鍵の漏洩リスク？怖い... 「鍵なし」での転送方法は非常にスマートですが、設定手順はちっとも…"
---

# もうアクセスキーの発行はやめよう。S3からGCSへの「鍵なし」転送術

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[tsunoda](/authors/tsunoda/)
-   公開日：2026年4月22日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#AWS](/tags/aws/)[#Amazon S3](/tags/amazon-s3/)[#Google Cloud](/tags/google-cloud/)[#Cloud Storage](/tags/cloud-storage/)[#Storage Transfer Service](/tags/storage-transfer-service/)

![もうアクセスキーの発行はやめよう。S3からGCSへの「鍵なし」転送術](/_astro/hero.BsQravk7_Z17puiw.webp)

こんにちは、つのだです。

Google CloudのStorage Transfer Serviceを使用してS3からGCSへデータを送りたい時ありますよね。

でもアクセスキーの管理めんどくさい…

鍵ローテ？ダルい…

鍵の漏洩リスク？怖い…

「鍵なし」での転送方法は非常にスマートですが、設定手順はちっともスマートじゃなかったので、最短ルートの地図を書き残しておきます。

道に迷いたくない方はこちらをどうぞ。

## フェデレーションIDを使用したS3連携

1つの資格情報セットを使用して、許可されたユーザーが複数のアプリケーションやドメインにアクセスできるようになるものです。

これを使ってS3と連携することで「鍵なし」にします。

手順は以下

* * *

1.  AWS：ポリシー作成
    
2.  AWS：ロール作成
    
3.  GCP：Storage Transfer Serviceで使用するSAのサブジェクトID取得
    
4.  AWS：ロール設定更新(信頼ポリシーの編集)
    
5.  GCP：Storage Transfer Service作成
    

* * *

環境

-   ポリシー
    
    -   grasys-transfer-test-policy
-   ロール
    
    -   grasys-transfer-test-role
-   転送元S3 (sample/あり)
    
    -   AWS：grasys-transfer-origin
-   転送先(空の状態)
    
    -   GCS：grasys-transfer-receiver

![フェデレーションIDを使用したS3連携の画面（1）](/_astro/01-s3_origin-1024x226-552d6ffb.qei09Ari_w16IW.webp)

![フェデレーションIDを使用したS3連携の画面（2）](/_astro/02-gcs_receiver-1024x297-7b067c45.CwgD1UUq_2iL9yv.webp)

## ポリシー作成

まずはAWS側で、Transfer用のポリシーを作成します。

定義される許可は以下にします。(JSON)

Plain textcontent\_copy

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*",
                "s3:Delete*"
            ],
            "Resource": "*"
        }
    ]
}
```

![ポリシー作成の画面](/_astro/03-policy_editor-1024x485-694b23c5.DdjcKy4c_Z1ggOya.webp)

## ロール作成

作成したポリシーを許可ポリシーに設定したロールを作成します。

ウェブアイデンティティに設定

-   プロバイダー：Google
    
-   Audience：accounts.google.com
    

![ロール作成の画面（1）](/_astro/04-make_role1-1024x522-4bc770b0.nEBVFNZN_T9cYc.webp)

許可ポリシーは先ほど作ったポリシーを設定します。

![ロール作成の画面（2）](/_astro/05-make_role2-2-1024x315-d0e4e8b9.CwQgdShi_Z2gda5a.webp)

信頼されたエンティティについては一旦このままにし、ロールを作成しちゃいます。

![ロール作成の画面（3）](/_astro/06-make_role3-1024x793-020eac0a.BSLP0Guf_Z2arqHt.webp)

この後ロールの「信頼されたエンティティ」を更新するのですが、Google Cloud側のStorage Transfer Serviceで使用するサービスアカウントのサブジェクトIDが必要なので、先にそれを取得しに行きます。

## Storage Transfer Serviceで使用するSAのサブジェクトID取得

googleServiceAccounts.getの[リファレンスページ](https://docs.cloud.google.com/storage-transfer/docs/reference/rest/v1/googleServiceAccounts/get)に移動します。

![Storage Transfer Serviceで使用するSAのサブジェクトID取得の画面（1）](/_astro/07-cc19b6ab66dba6bed3919fe34f9016b0-1024x620-7a0cde47.DLRruTFc_1LfARu.webp)

プロジェクトIDを入れてExecuteボタンを押すと、ログインを求められた後、サブジェクトIDを取得できます。

![Storage Transfer Serviceで使用するSAのサブジェクトID取得の画面（2）](/_astro/08-da4d6e509180d26b82a0a9f44236d36f-1ec3d3c5.D1NEaYL8_1knxV2.webp)

## ロール設定更新

作成したロールの信頼関係タブを選択

信頼されたエンティティを以下のようにします(JSON)

Plain textcontent\_copy

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "accounts.google.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "accounts.google.com:sub": "取得したSUBJECT_ID"
                }
            }
        }
    ]
}
```

![ロール設定更新の画面](/_astro/09-cebac333e09718d9fc4420d36e89d533-1024x493-13afef0b.DHcI5N6c_95JqK.webp)

## Storage Transfer Service作成

設定は以下で作成

-   開始
    
    -   ソースタイプ：Amazon S3
        
    -   宛先の種類：Google Cloud Storage
        
    -   スケジュールモード：今回は四半期
        
-   ソースの選択
    
    -   バケットまたはフォルダ：grasys-transfer-origin
        -   転送元のS3バケットを指定する
-   認証情報
    
    -   認証のオプション：ID連携のためのAWS IAMロール
        -   ARNを設定する
-   転送先
    
    -   バケットまたはフォルダ：grasys-transfer-receiver
        -   転送先のGCSバケットを指定する
-   ジョブを実行するタイミングの選択
    
    -   今回は1回だけ実行/今すぐ実行
-   あとはデフォルト
    

![Storage Transfer Service作成の画面（1）](/_astro/10-transfer1-2-6b6692f7.NGf83a8g_Z32BYF.webp)

作成するとジョブが立ち上がり、転送が始まります。

![Storage Transfer Service作成の画面（2）](/_astro/11-gce_receiver_result-1024x377-b01f9d31.ZNvMZB_H_qTC2e.webp)

S3側のsampleフォルダが転送されてきました！

## まとめ

アクセスキーという「物理的な鍵」を持たない運用は快適です。

この構成のポイントを振り返って締めくくります。

* * *

複雑な手順ではありますが、一度設定してしまえば運用は劇的に楽になります。

苦労した先には、鍵の管理がない環境が待っています。

信頼関係(フェデレーション)を正しく設定することは、マルチクラウドの醍醐味だったりします。

まずは一歩、キーレス運用の世界へ踏み出してみましょう！

* * *

(参考) google公式ドキュメント：[フェデレーションIDを使用して認証する](https://docs.cloud.google.com/storage-transfer/docs/source-amazon-s3?hl=ja#federated_identity)

## この記事を書いた人

[![](/_astro/tsunoda.CrA_Wh9V_Z1aOeCP.webp)](/authors/tsunoda/)

### [tsunoda](/authors/tsunoda/)

tsunodaのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/tsunoda/)