個々の Cloud Workstations ポートへのアクセス権を付与する

IAM Conditions を使用して、個々のワークステーション ポートへのアクセス権を付与できます。これは、個々のワークステーション ポートへの限定アクセスを共有する場合に便利です。たとえば、IAM Conditions を使用して、ワークステーション ポートで実行されているデモサーバーにアクセス権を付与できます。

Cloud Workstations は、destination.port IAM Conditions 属性をサポートしています。

IAM Conditions の詳細については、以下をご覧ください。

始める前に

個々のワークステーション ポートへのアクセス権を付与するには、ワークステーションに Cloud Workstations ポリシー管理者(roles/workstations.policyAdmin)のロールが必要です。

ワークステーションの IAM ロールを確認する

ワークステーションに Cloud Workstations ユーザー(roles/workstations.user)ロールと Cloud Workstations ポリシー管理者(roles/workstations.policyAdmin)ロールがあることを確認します。ワークステーションにこれらのロールがない場合は、ワークステーションにこれらのロールを付与するよう組織の Cloud Workstations 管理者に依頼してください。

ワークステーションでデモサーバーを起動する

ワークステーションを起動するガイドに沿って、ワークステーションを起動して接続します。ワークステーションで次のコマンドを実行して、ワークステーション ポートでデモサーバーを起動します。

python3 -m http.server WORKSTATIONS_PORT

次のように置き換えます。

  • WORKSTATIONS_PORT: デモサーバーがリッスンするポート。たとえば、8081 を使用します。

ワークステーションの条件付き IAM ポリシーを更新する

ワークステーション ポートへのアクセス権を付与するには、Google Cloud コンソールまたは gcloud CLI の iam policies コマンドを使用します。

Console

ワークステーションへの条件付きアクセスを許可するには:

  1. Google Cloud コンソールで、[Cloud Workstations> [ワークステーション] ページに移動します。

    [ワークステーション] に移動

  2. ワークステーションを見つけて、more_vert [その他] オプション メニューをクリックし、[ユーザーを追加] を選択します。

    [ワークステーション] ページでユーザーを追加し、権限を編集する

  3. 条件付きアクセスを付与するには、プリンシパルのメールアドレスを入力します。例: 222larabrown@gmail.com

  4. [ロール] として [Cloud Workstations User] が選択されていることを確認します。

  5. ポート固有のアクセス権を付与するように IAM の条件を更新します。

    1. [IAM の条件を追加] をクリックします。

    2. タイトル(ポート 8081 など)を指定します。

    3. [条件エディタ] タブで、次の条件を入力します。

    destination.port == WORKSTATIONS_PORT
    

    宛先ポート 8081 の条件を含む IAM 条件エディタ

    1. [保存] をクリックして、プリンシパルに対する特定のポートの条件付きアクセスの付与を完了します。

gcloud

  1. gcloud CLI の workstations get-iam-policy コマンドを使用して、ワークステーションの IAM ポリシーを取得します。このコマンドは、ポリシーを /tmp/WORKSTATIONS_NAME.yaml ファイルに出力します。ファイルが存在する場合は上書きされます。

    gcloud workstations get-iam-policy WORKSTATIONS_NAME \
      --cluster=WORKSTATIONS_CLUSTER_NAME \
      --config=WORKSTATIONS_CONFIG_NAME \
      --region=LOCATION \
      --project=WORKSTATIONS_PROJECT_ID \
      > /tmp/WORKSTATIONS_NAME.yaml
    

    次のように置き換えます。

    • WORKSTATIONS_NAME: ワークステーションの名前。
    • WORKSTATIONS_CONFIG_NAME: ワークステーション構成の名前。
    • WORKSTATIONS_CLUSTER_NAME: ワークステーション クラスタの名前。
    • LOCATION: ワークステーション クラスタのリージョン名。
    • WORKSTATIONS_PROJECT_ID: ワークステーションを含む Cloud Workstations プロジェクトの ID。
  2. プリンシパルに条件付きアクセス権を付与するには、前の手順でダウンロードしたワークステーションの IAM ポリシー ファイルを /tmp/WORKSTATIONS_NAME.yaml で更新します。

    次に例を示します。

    bindings:
    - members:
      - user:YOUR_ID
        role: roles/workstations.user
    - condition:
        expression: destination.port == WORKSTATIONS_PORT
        title: Port WORKSTATIONS_PORT
      members:
      - user:PRINCIPAL
      role: roles/workstations.user
    etag: BwYlui8uSXo=
    version: 3
    

    次のように置き換えます。

    • YOUR_ID: 独自のログイン ID。例: 222larabrown@gmail.com
    • PRINCIPAL: ワークステーションのポート WORKSTATIONS_PORT へのアクセスを共有するプリンシパル。例: baklavainthebalkans@gmail.com
    • WORKSTATIONS_PORT: デモサーバーがリッスンしているワークステーションのポート。
  3. gcloud CLI の workstations set-iam-policy コマンドを使用して、ワークステーションの IAM ポリシーを設定します。

    gcloud workstations set-iam-policy WORKSTATIONS_NAME \
      --cluster=WORKSTATIONS_CLUSTER_NAME \
      --config=WORKSTATIONS_CONFIG_NAME \
      --region=LOCATION \
      --project=WORKSTATIONS_PROJECT_ID \
      /tmp/WORKSTATIONS_NAME.yaml
    

    次のように置き換えます。

    • WORKSTATIONS_NAME: ワークステーションの名前。
    • WORKSTATIONS_CONFIG_NAME: ワークステーション構成の名前。
    • WORKSTATIONS_CLUSTER_NAME: ワークステーション クラスタの名前。
    • LOCATION: ワークステーション クラスタのリージョン名。
    • WORKSTATIONS_PROJECT_ID: ワークステーションを含む Cloud Workstations プロジェクトの ID。

ワークステーションの IAM ポリシーが更新されると、プリンシパルはワークステーションの指定されたポートにアクセスできるようになります。

ワークステーションの URL を共有する

プリンシパルは、次のワークステーション URL を使用して指定されたポートにアクセスできます。

https://WORKSTATIONS_PORT-WORKSTATIONS_NAME.WORKSTATIONS_CLUSTER_NAME.cloudworkstations.dev

プレースホルダは次のものを表します。

  • WORKSTATIONS_PORT: デモサーバーがリッスンしているポート。
  • WORKSTATIONS_NAME: ワークステーション名。
  • WORKSTATIONS_CLUSTER_NAME: ランダムに生成されたクラスタ識別子。
  • cloudworkstations.dev: ワークステーションのデフォルト ドメイン名。

プリンシパルは、アクセス権のないワークステーションの他のポートにアクセスできません。