ロールベース アクセス制御を使用する

Cloud Data Fusion のロールベース アクセス制御(RBAC)を使用すると、インスタンスと名前空間全体でユーザー権限を管理できます。このアクセスモデルを使用すると、統合ワークロードを表示、設計、実行できるユーザーを制御して、ワークスペースを分離し、パイプラインを保護できます。

RBAC は、バージョン 6.5 以降を実行している Cloud Data Fusion インスタンスで使用できます。自動化が必要な場合を除き、Google Cloud コンソールを使用して RBAC タスクを実行します。詳細については、ロールベース アクセス制御(RBAC)の概要をご覧ください。

既存のインスタンスで RBAC を有効にする

バージョン 6.5 以降で実行されている既存の Cloud Data Fusion インスタンスで RBAC を有効にできます。

Console

既存の Cloud Data Fusion インスタンスで RBAC を有効にするには:

  1. インスタンスの詳細(
    1. Google Cloud コンソールで、Cloud Data Fusion のページに移動します。

    2. [インスタンス]、インスタンス名の順にクリックして、[インスタンスの詳細] ページに移動します。

      [インスタンス] に移動

    )に移動します。
  2. インスタンスがバージョン 6.5 以降にアップグレードされていることを確認します。インスタンスが 6.5 より前の場合は、インスタンスをバージョン 6.5 以降にアップグレードします。
  3. [RBAC を有効にする] をクリックします。
  4. [保存] をクリックします。
  5. インスタンスの更新オペレーションが完了するまで待ちます。

gcloud

既存の Cloud Data Fusion インスタンスで RBAC を有効にするには、次のコマンドを実行します。

gcloud beta data-fusion instances update --enable_rbac --location=REGION INSTANCE_ID

REST API

Cloud Data Fusion patch API を使用して、既存のインスタンスで RBAC を有効にします。次のコマンド例を使用して、enableRbac フラグを true に設定し、updateMask クエリ パラメータを使用します。

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "true"}'

既存のインスタンスで RBAC を無効にする

RBAC が有効になっている既存のインスタンスがある場合は、必要に応じて RBAC を無効にできます。RBAC を無効にしても、インスタンス内の既存のパイプラインや構成には影響しません。単に名前空間の間のセキュリティ分離を無効にします。

Console

既存の Cloud Data Fusion インスタンスで RBAC を無効にするには:

  1. インスタンスの詳細(

    1. Google Cloud コンソールで、Cloud Data Fusion のページに移動します。

    2. [インスタンス]、インスタンス名の順にクリックして、[インスタンスの詳細] ページに移動します。

      [インスタンス] に移動

    )に移動します。

  2. [RBAC を無効にする] をクリックします。

  3. [保存] をクリックします。

  4. インスタンスの更新オペレーションが完了するまで待ちます。

gcloud

既存のインスタンスの RBAC を無効にするには、引数 --enable-rbac の代わりに --no-enable_rbac を使用します。

gcloud beta data-fusion instances update --no-enable_rbac --location=REGION INSTANCE_ID

使用例:

gcloud beta data-fusion instances update --no-enable_rbac --location=us-east1 cdf-test-instance

REST API

Cloud Data Fusion patch API を使用して、既存のインスタンスの RBAC を無効にします。次のコマンド例を使用して、enableRbac フラグを false に設定し、updateMask クエリ パラメータを使用します。

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "false"}'

RBAC 対応の新しいインスタンスを作成する

Console

RBAC が有効になっている新しい Cloud Data Fusion インスタンスを作成するには:

  1. Cloud Data Fusion の [インスタンス] ページに移動します。

  2. [Instances] をクリックします。

    [インスタンス] に移動

  3. [インスタンスを作成] をクリックし、インスタンスの詳細を入力します。

  4. [Enterprise Edition] を選択します。 RBAC は、Enterprise Edition でのみサポートされます。

  5. [詳細オプション] で、[きめ細かいロールベースのアクセス制御の有効化] を選択します。

    この機能は、Cloud Data Fusion バージョン 6.5 以降を使用するインスタンスでのみ使用できます。

  6. [作成] をクリックします。

gcloud

RBAC 対応の新しいインスタンスを作成するには、次のコマンドを実行します。

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=REGION INSTANCE_ID \
--version=6.5.0

使用例:

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=us-east1 \
--version=6.5.0

REST API

REST API を使用して RBAC 対応インスタンスを作成するには、次のコマンドで示すように、インスタンス オプションで true に設定された enableRbac フラグを渡します。

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances?instanceId=$INSTANCE -X POST -d '{"description": "RBAC CDF instance created through REST", "type": "ENTERPRISE", "enableRbac": "true"}'

Cloud Data Fusion の事前定義ロールをユーザーに付与する(必須)

RBAC を有効にしたら、インスタンスまたは名前空間で特定の操作が実行できるようにプリンシパルにロールを付与します。要件に最適なロールを決定するには、Cloud Data Fusion の事前定義ロールとセキュリティに関する推奨事項をご覧ください。

Console

Cloud Data Fusion の事前定義ロールをプリンシパルに付与するには:

  1. Cloud Data Fusion の [インスタンス] ページに移動します。

    [権限] に移動

  2. [追加] をクリックします。

    [ユーザーのアクセスを追加] ダイアログが開きます。

  3. [新しいメンバー] フィールドに、ロールを付与するプリンシパル(ユーザー、グループ、またはサービス アカウントのメールアドレス)のリストを入力します。

  4. これらの権限を付与する各インスタンスの横にあるチェックボックスをオンにします。

    インスタンスを選択

  5. [ロール] 列に移動し、選択したインスタンスの横にあるプルダウンを選択します。

    1. インスタンス管理者の権限を付与するには、[インスタンス管理者] を選択します。

    2. 名前空間レベルの権限を付与するには、[名前空間ユーザー] を選択します。

      名前空間ユーザーのロールを選択する

      1. 名前空間レベルの権限を付与する場合は、[選択] をクリックします。

        [アクセス権を追加] ダイアログが開きます。

      2. 名前空間を選択し、名前空間に付与する事前定義された Cloud Data Fusion ロールを選択します。

      3. [選択] をクリックして新しい設定を保存します。

      4. (省略可)他のインスタンスに名前空間の権限を付与するには、手順 5 を繰り返します。

  6. [保存] をクリックします。

    付与されているロールを確認するには、 Google Cloud コンソールでロールを確認するをご覧ください。

gcloud

Google Cloud CLI を使用して、プログラムでアクセスを制御できます。

gcloud CLI を使用してロールを付与するには、次の形式のユーザー ID のカンマ区切りリストを使用します。

[user|group|serviceAccount][email_address]

次の値を指定します。

  • user:useremail@example.com
  • group:groupemail@example.com
  • serviceAccount:serviceaccount@project.iam.gserviceaccount.com

その他の例については、ロールを付与するをご覧ください。

インスタンス アクセサーのロールを付与する(必須)

まず、ユーザーにインスタンスへのアクセサーのロールを付与することで、インスタンスへのアクセス権を付与する必要があります。

  1. 次のコマンドで変数をエクスポートし、変数を独自の値に置き換えます。

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    次の変数は、独自の値に置き換えます。

    • PROJECT_ID: プロジェクト名。
    • INSTANCE_ID: インスタンスの名前。
    • REGION: プロジェクトが属するリージョン。
    • EMAIL: プリンシパルのメールアドレス。
    • USER_TYPE: ユーザータイプは、user、group、serviceAccount のいずれかです。
  2. 次のコマンドを実行して、ロールを割り当てます。

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --member="${USER_TYPE}:${USER_ID}" --role="roles/datafusion.accessor"
    

名前空間にロールを付与する(ユースケースによって異なる)

ユースケースに応じて、次のコマンドでロールを付与します。

  1. 次のコマンドで変数をエクスポートし、変数を独自の値に置き換えます。

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    次の変数は、独自の値に置き換えます。

    • PROJECT_ID: プロジェクト名。
    • INSTANCE_ID: インスタンスの名前。
    • REGION: プロジェクトが属するリージョン。
    • NAMESPACE: 名前空間名。
    • EMAIL: プリンシパルのメールアドレス。
    • USER_TYPE: ユーザータイプは、user、group、serviceAccount のいずれかです。
  2. 次のコマンドを実行して、特定の名前空間のプリンシパルにロールを割り当てます。

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="roles/ROLE_NAME"
    

    ROLE_NAME は次のいずれかの値に置き換えます。

    • 名前空間の編集者のロールには、datafusion.editor を使用します。
    • 名前空間のオペレーターのロールには、datafusion.operator を使用します。
    • 名前空間のデベロッパーのロールには、datafusion.developer を使用します。
    • 名前空間の閲覧者のロールには、datafusion.viewer を使用します。

省略可: 名前空間のロールを取り消す

特定の 名前空間に対してユーザーに付与されたロールを取り消すには、次のコマンドを使用します。

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
export USER_ID=EMAIL
# User type can be one of: user, group, or serviceAccount.
export USER_TYPE=USER_TYPE
export ROLE=ROLE_NAME
gcloud beta data-fusion remove-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="${ROLE}"

省略可: 特定の名前空間で付与されたロールを一覧表示する

特定の名前空間で付与されているすべてのロールを一覧表示するには、次のコマンドを使用して IAM ポリシーを取得します。

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

REST API

インスタンス アクセサーのロールを付与する(必須)

まず、ユーザーにインスタンスへのアクセサーのロールを付与することで、インスタンスへのアクセス権を付与する必要があります。

強く推奨: gcloud CLI を使用してアクセサー ロールを付与します。

  1. インスタンスに対するアクセサー ロールを付与します。

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    # User type can be one of: user, group, or serviceAccount.
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
    
  2. 現在の IAM ポリシーを取得してファイルに保存します。

    gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy > iam_policy.json
    
  3. ポリシーにロールとユーザーのバインディングを追加します。例:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/datafusion.accessor",
            "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    
  4. インスタンスの IAM ポリシーを更新します。

    gcurl \
      -d @iam_policy.json \
      https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:setIamPolicy
    

名前空間にロールを付与する(ユースケースによって異なる)

ユースケースに応じて、次のコマンドでロールを付与します。

  1. 次のコマンドで変数をエクスポートし、変数を独自の値に置き換えます。

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
    

    次の変数は、独自の値に置き換えます。

    • PROJECT_ID: プロジェクト名。
    • INSTANCE_ID: インスタンスの名前。
    • REGION: プロジェクトが属するリージョン。
    • NAMESPACE: 名前空間名。
    • EMAIL: プリンシパルのメールアドレス。
    • USER_TYPE: ユーザータイプは、user、group、serviceAccount のいずれかです。
  2. 現在の IAM ポリシーを取得してファイルに保存します。

      gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/{NAMESPACE}:getIamPolicy > iam_policy.json
    

    iam_policy.json は、ご自身のファイル名に置き換えます。

  3. ポリシー ファイルにロールとユーザーのバインディングを追加します。たとえば、ポリシー ファイルは次のようになります。

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/ROLE_NAME",
              "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    

    特定のポリシーに複数のロール バインディングを指定できます。また、特定のロール バインディングのメンバーリストに複数のプリンシパルを指定できます。特定のプリンシパルについては、ROLE_NAME を次のいずれかの値に置き換えます。

    • 名前空間の編集者のロールには、datafusion.editor を使用します。
    • 名前空間のオペレーターのロールには、datafusion.operator を使用します。
    • 名前空間のデベロッパーのロールには、datafusion.developer を使用します。
    • 名前空間の閲覧者のロールには、datafusion.viewer を使用します。
  4. 次のコマンドを実行して、ポリシー ファイルを更新します。

    gcurl -d @iam_policy.json \
    https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/{NAMESPACE}:setIamPolicy
    

    iam_policy.json は、ご自身のファイル名に置き換えます。

Google Cloud コンソールでロールを確認する

Cloud Data Fusion の [権限] ページで既存のロールを確認、編集します。

[権限] に移動

ポリシー ファイルでロールを確認する

gcloud CLI または REST API を使用して、IAM ポリシー ファイルで正しいユーザーにロールが付与されていることを確認します。

次の IAM ポリシー ファイルの例では、ユーザー alice@example.com には Data Fusion デベロッパーのロールがあります。

bindings:
- members:
  - user:alice@example.com
  role: roles/datafusion.developer
- members:
  - user:bob@example.com
  - serviceAccount:myserviceaccount@myproject.iam.gserviceaccount.com
  role: roles/datafusion.operator
- members:
  - user:james@example.com
  - user:mike@example.com
  - group:mygroup@googlegroups.com
  role: roles/datafusion.editor
etag: BwXA8BAHYmw=

インスタンスの IAM ポリシーを取得する

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy

名前空間の IAM ポリシーを取得する

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export NAMESPACE=NAMESPACE
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/${NAMESPACE}:getIamPolicy

次のステップ