You indices tensor carries some implicit information that you should make explicit. For scatter_nd to work, you need to provide some pairs (i,j), where i is the index of the first dimension, and j the index of the second dimension.
You can restructure you indices Tensor the following way:
indices = tf.constant([[1, 2], [0, 2], [1, 0]])
j_indices = tf.reshape(indices, [-1, 1])
i_indices = tf.expand_dims(tf.repeat(tf.range(3), 2), axis=-1)
new_indices = tf.concat([i_indices, j_indices], axis=-1)
New indices contains the (i,j) indexes:
>>> new_indices
<tf.Tensor: shape=(6, 2), dtype=int32, numpy=
array([[0, 1],
[0, 2],
[1, 0],
[1, 2],
[2, 1],
[2, 0]], dtype=int32)>
And you can use that with scatter_nd:
>>> tf.scatter_nd(new_indices, updates=tf.ones(tf.shape(new_indices)[0]), shape=[3, 3])
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[0., 1., 1.],
[1., 0., 1.],
[1., 1., 0.]], dtype=float32)>