モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

目次目次を開く/閉じる

AWS IAM Role を GCP から STS 認証で利用する設定例

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2021/10/31
最終更新最終更新
2024/11/29
記事区分記事区分
一般公開

目次

    インフラ構築と自動化が得意。TerraformとAnsibleでインフラを自動構築するお仕事が多め

    GCP から AWS IAM Role を利用するための設定例を記載します。

    GCP Service Account の作成

    Service Account を作成して Unique ID を確認します。

    AWS IAM Role の作成

    Trust relationship の設定は Web Identity を選択します。Identity Provider として登録されている Google を選択して、Service Account の Unique ID を Audience に指定します。

    以下のような Trust relationship となります。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:aud": "102032064262318603671"
            }
          }
        }
      ]
    }
    

    参考資料: Creating a role for web identity or OpenID connect federation (console)

    GCP VM の作成

    作成した Service Account を紐付けて作成します。

    AWS CLI をインストールします。

    sudo apt install python3-pip
    python3 -m pip install -U pip
    python3 -m pip install -U awscli
    python3 -m pip install -U boto3
    

    STS 認証

    GCP VM Metadata によるトークン取得

    metadata.google.internal によって VM のメタデータを取得できます。

    $ curl -sS -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/instance/name
    instance-2
    
    $ curl -sS -H 'Metadata-Flavor: Google' http://metadata.google.internal/computeMetadata/v1/project/project-id
    myproject-20210411
    

    VM に紐付けられた Service Account の identity トークンを取得します。Fetching identity and access tokens using the metadata server

    curl -sS -H 'Metadata-Flavor: Google' 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?format=standard&audience=gcp'
    

    Cloud SDK が利用できる場合は、以下のようにしても同様です。

    gcloud auth print-identity-token
    

    AWS STS による一時認証情報の取得

    import boto3
    sts = boto3.client('sts', aws_access_key_id='', aws_secret_access_key='')
    
    res = sts.assume_role_with_web_identity(
        RoleArn='arn:aws:iam::123412341234:role/my-gcp-role-20211031',
        WebIdentityToken='xxxxxxxxxxxxxxxxxxxxxx',
        RoleSessionName='my-role-session-name')
    

    以下のようなレスポンスが得られます。

    {'Credentials': {'AccessKeyId': 'xxxxxxxxxxxxxxxxxxxx',
      'SecretAccessKey': 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy',
      'SessionToken': 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz',
      'Expiration': datetime.datetime(2021, 10, 31, 6, 54, 40, tzinfo=tzlocal())},
     'SubjectFromWebIdentityToken': '102032064262318603671',
     'AssumedRoleUser': {'AssumedRoleId': 'AROA3JUBRISFUP3BXDZ4A:my-role-session-name',
      'Arn': 'arn:aws:sts::123412341234:assumed-role/my-gcp-role-20211031/my-role-session-name'},
     'Provider': 'accounts.google.com',
     'Audience': '102032064262318603671',
     'ResponseMetadata': {'RequestId': '5c16dbd6-ccc8-427c-b123-745bce02b40c',
      'HTTPStatusCode': 200,
      'HTTPHeaders': {'x-amzn-requestid': '5c16dbd6-ccc8-427c-b123-745bce02b40c',
       'content-type': 'text/xml',
       'content-length': '1394',
       'date': 'Sun, 31 Oct 2021 05:54:39 GMT'},
      'RetryAttempts': 0}}
    

    一時的な認証情報として得られた結果を ~/.aws/credentials に格納してみます。

    [default]
    aws_access_key_id = xxxxxxxxxxxxxxxxxxxx
    aws_secret_access_key = yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    aws_session_token = zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    

    確かに AWS API を利用できることを確認します。

    $ python3 -m awscli s3 ls
    2021-08-31 01:10:04 my-bucket-1
    2020-06-19 22:58:33 my-bucket-2
    

    credential_process の利用

    上記 STS 認証を自動化するための設定例は以下のとおりです。

    $ cat .aws/credentials
    [default]
    credential_process = /home/myuser/bin/janus.py arn:aws:iam::123412341234:role/my-gcp-role-20211031
    

    credential_process で指定するコマンドは以下のように準備しておきます。

    wget https://raw.githubusercontent.com/doitintl/janus/master/janus.py

    python3 -m pip install -U requests
    chmod +x ./bin/janus.py
    

    動作確認

    $ python3 -m awscli s3 ls
    2021-08-31 01:10:04 my-bucket-1
    2020-06-19 22:58:33 my-bucket-2
    

    参考資料:

    Likeボタン(off)0
    詳細設定を開く/閉じる
    アカウント プロフィール画像

    インフラ構築と自動化が得意。TerraformとAnsibleでインフラを自動構築するお仕事が多め

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    >>さらに詳しくステッカーを贈る
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      ログインする

      関連記事

      • GKE における Node および Pod の autoscaling
        サムネイル画像-7d7ee7c7aa
        Google Kubernetes Engine (GKE) における autoscaling について、用語の意味を整理します。 GKE の機能による Node の autoscaling GKE のクラスタには Standard と Autopilot の二種類が存在します。 Autopilot の場合は Node は Google によって管理されるため、自動で autoscaling され...
        junjun2/18/2024に更新
        いいねアイコン画像0
      • Snowflake におけるネットワーク関連の設定
        サムネイル画像-8ec2ac140d
        本ページではネットワーク関連の設定について記載します。 Network Policy によるアクセス元 IP 制限 IPv4 で指定します。IPv6 は 2021/9/21 時点では利用できません。 allowed list で許可されていない IP は block されます。 allowed list が /24 等で指定されており、その一部を
      • VPC Service Controls に関する雑多な事項の整理
        サムネイル画像-bb464b77f2
        VPC Service Controls (VPC-SC) に関する雑多な事項を記載します。 Private Google Access の基本形 Private Google Access は外部 IP を持たない VM のための機能です。VPC の機能ですが、VPC-SC と関連するため基本事項を記載します。 [Private Google Access](ht
        kentakenta3/18/2024に更新
        いいねアイコン画像0
      • Amazon Comprehend を GCP VPC 内から実行する設定の例 (Public Internet 接続なし)
        GCP DLP に相当する AWS サービスに Amazon Comprehend が存在します。GCP VPC 内から Public Internet を経由せずに利用する設定の例を記載します。 AWS VPC と GCP VPC の作成 クラウド 項目 値 AWS VPC region ap-northeast-1 AWS VPC CIDR 10.2.0.0/16 AWS ap-north
        AWS NinjaAWS Ninja12/12/2023に更新
        いいねアイコン画像0
      • GCP IAP tunnel を HTTP プロキシを通して利用する場合の注意点
        サムネイル画像-fd7e826326
        IAP tunnel は、HTTPS トンネル内で TCP パケットを forward するための技術です。 この HTTPS トンネルは、ユーザと tunnel.cloudproxy.app の間で確立される WebSocket です。 そのため、IAP tunnel を HTTP プロキシ環境下で利用する際には、以下の二つに注意する必要があります。 tunnel.cloudproxy.app ...
        AWS NinjaAWS Ninja11/18/2023に更新
        いいねアイコン画像0