# 共有コマンド

## コマンド

#### Keeperコマンドリファレンス

対話型シェル、CLI、JSON設定ファイルのいずれを使用する場合でも、以下のコマンドがサポートされており、各コマンドでは追加のパラメータとオプションがご利用になれます。

特定のコマンドのヘルプを表示するには、以下のコマンドを実行します。

`help <command>`

## 共有コマンド

| コマンド                                                               | 説明                           |
| ------------------------------------------------------------------ | ---------------------------- |
| [`share-record`または`sr`](#share-record-command)                     | ユーザーにレコードへのアクセス権を付与または取り消します |
| [`share-folder`または`sf`](#share-folder-command)                     | 共有フォルダの権限を変更します              |
| [`record-permissions`](#record-permission-command)                 | フォルダのレコード権限を変更します            |
| [`one-time-share`](#share-command)                                 | ワンタイム共有を管理します                |
| [`external-shares-report`または`esr`](#external-shares-reportkomando) | 外部ユーザーに共有を表示または取り消します        |

### share-recordコマンド <a href="#share-record-command" id="share-record-command"></a>

**コマンド:** `share-record`または`sr`

**詳細:** レコードのパスまたはUIDを指定して、レコードへのユーザーアクセスの付与と取り消しを行います。

**パラメータ:**

レコードのパスまたはUID

**スイッチ:**

-e、--email 権限を編集するアカウントのメール (必須)

-a、--action <{*grant, revoke, owner, cancel*}> レコードに設定する権限

-s、--share ユーザーにレコードの共有を許可します

-w、--write ユーザーにレコードの変更を許可します

-R, --recursive コマンドを共有フォルダ階層全体に適用する

\--dry-run 権限の変更内容を表示するが、実際には適用しない

\--expire-at EXPIRE\_AT 共有の期限: 「never」またはISO日付時間形式 (yyyy-MM-dd\[ hh:mm:ss])

\--expire-in \<NUMBER>\[(mi)nutes|(h)ours|(d)ays|(mo)nths|(y)ears] 共有の期限: 「never」または期間

\--contacts-only 既知の共有先のみに共有する。必要に応じて、ユーザー名が一致する別ドメインへのルーティングが可能

**例:**

```
share-record memberships/Gym -e john.smith@gmail.com
sr g6rvo2-Uv-BC16ZM33CF3w -e john.smith@gmail.com --share
sr social/Twitter -e john.smith@gmail.com --action owner
sr --recursive -e john.smith@gmail.com "My Shared Folder" 
sr --expire-at "2050-01-01 00:00:01" -e john.smith@gmail.com memberships/Gym
sr --expire-in 3d -e john.smith@gmail.com social/Twitter
sr --contacts-only -e bob.dobb@wrongdomain.com 'Wifi Credentials'
```

1. 「memberships」フォルダの「Gym」レコードをユーザーJohn Smithと共有します
2. 指定したUIDを持つレコードをユーザーJohn smithと共有し、John smithが他のユーザーとそのレコードを共有できるようにします
3. 「social」フォルダの「Twitter」レコードの所有権をユーザーJohn Smithに移管します
4. 共有フォルダ「My Shared Folder」 (そのサブフォルダ内のすべてのレコードを含む) にあるすべてのレコードをJohn Smithに共有します。
5. 「memberships」フォルダ内の「Gym」レコードをJohn Smithに共有し、2050年1月1日午前0時0分1秒 (GMT) までアクセス可能にします。
6. 「social」フォルダ内の「Twitter」レコードに、John Smithに3日間限定の閲覧専用アクセスを付与します。
7. 指定したユーザーと「Wifi Credentials」レコードを共有します。ただし、共有先ユーザー名を既知の共有対象リストと照合し、一致するユーザー名がない場合は、ドメインが異なる同一ユーザーの既知のユーザー名に置き換えます。この例では、たとえば <bob.dobb@rightdomain.com> が既知の共有対象で、指定されたユーザー名が一致しない場合、共有関係を作成する前に置き換えを行うかどうか確認のメッセージが表示されます。\
   備考: --force オプションを付けると確認メッセージを省略できます。

### share-folderコマンド <a href="#share-folder-command" id="share-folder-command"></a>

**コマンド:** `share-folder`または`sf`

**詳細:** 指定した (1つまたは一連の) 共有フォルダに対するデフォルトの権限をユーザーに付与または取り消します。

{% hint style="info" %}
共有フォルダの作成に関する詳細については、[mkdir ](https://github.com/Keeper-Security/gitbook-jp-secrets-manager/blob/main/commander-cli/record-commands/README.md#mkdir-command)コマンドをご参照ください。
{% endhint %}

**パラメータ:**

フォルダのパスまたはUID

**スイッチ:**

-a、--action <{*grant, remove*}> フォルダやレコードに設定する権限

-e、--email \<EMAIL, TEAM, \*>

* email - フォルダ権限を設定するユーザーのメール
* team - フォルダ権限を設定するチームの名前
* \* - フォルダを共有する新しいユーザーのそれぞれに対して関連する権限を適用します
* @currrent/@existing - フォルダへの既存のアクセス権を持つすべてのユーザーに適用します

-r、--record <{RECORD NAME, UID, \*, @existing, @current}>

* record name / UID - 権限を設定する特定のレコード
* \* - 関連するフォルダに追加されたすべての新しいレコード向けにデフォルトの権限を設定します
* @existing/@current - 指定した共有フォルダに現在含まれているすべてのレコードに権限を適用します

-p、--manage-records レコードの管理権限をオンまたはオフに切り替えます。対象はユーザーやチームのみ。

-o、--manage-users ユーザーの管理権限をオンまたはオフに切り替えます。対象はユーザーやチームのみ。

-s、--can-share レコードの共有権限をオンまたはオフに切り替えます。対象はレコードのみ。

-d、--can-edit レコード変更権限をオンまたはオフに切り替えます。対象はレコードのみ。

-f、--force デフォルトのフォルダ権限を無視して、権限の変更を適用します。

\--expire-at TIMESTAMP\
共有の有効期限指定します。値は 「never」または ISO形式の日付時刻 (yyyy-MM-dd\[ hh:mm:ss])

\--expire-in PERIOD\
共有の期限を期間で指定します。値は「never」または「数字＋単位」（例: 3d、5h) です。\
単位は年 (y)、月 (mo)、日 (d)、時間 (h)、分 (mi) が使えます。

**例:**

```
share-folder memberships -e Jane.Smith@gmail.com -p off
sf jdrkYEaf03bG0ShCGlnKww -e DB_ADMINS -p on
sf "Team Passwords" -e "Marketing Team" -a grant -o on
sf * -e DB_ADMINS -p on
sf -a remove -e Jane.Smith@gmail.com memberships
sf -e Jane.Smith@gmail.com --expire-in 5h memberships
```

1. 「memberships」共有フォルダをユーザー<Jane.Smith@gmail.com>と共有します。 ユーザー<Jane.Smith@gmail.com>にレコード管理を許可します。
2. 指定したUIDを持つフォルダを「DB\_ADMINS」チームと共有し、共有フォルダ内のレコード管理を許可します。
3. 「Team Passwords」フォルダを「Marketing Team」チームと共有し、ユーザー管理権を付与します。
4. すべての共有フォルダを「DB\_ADMINS」チームと共有し、共有フォルダ内のレコード管理を許可します。
5. ユーザー<Jane.Smith@gmail.com>の「memberships」共有フォルダへのすべてのアクセスを削除します。
6. 「memberships」共有フォルダに対して、ユーザーに閲覧専用のアクセス権を付与します。このアクセス権は、以降の5時間のみ有効です。

#### デフォルトのフォルダ設定の変更

デフォルトのフォルダ設定は、新たに追加されたユーザーとレコードの権限を管理します。`share-folder`コマンドでデフォルトの権限を変更するには、\[\*]記号を使用します。

たとえば、UIDに基づいて共有フォルダのユーザーのデフォルトを「共有先とレコードの管理」に設定し、レコードのデフォルトを「編集と共有設定が可能」に設定する手順は以下のとおりです。

{% code overflow="wrap" %}

```
sf --email=* --manage-users on --manage-records on jdrkYEaf03bG0ShCGlnKww
sf --record=* --can-share on --can-edit on jdrkYEaf03bG0ShCGlnKww
```

{% endcode %}

{% hint style="info" %}
また、適切なオプション (レコードに-r、ユーザーに-e) に対して、「@current」や「@existing」の値を指定するだけで、同じコマンドの呼び出し内で、上記の例のように、共有フォルダのデフォルト設定を指定するために使用した同じ権限をその共有フォルダに現在割り当てられているレコード/ユーザーにも適用できます。上記と同様の例を使用すると、以下のような設定になります。

```
sf -e * --manage-users on --manage-records on -e @existing memberships
sf -r * --can-share on --can-edit on -r @existing -e @existing memberships
```

最初の例では、デフォルトのユーザー権限と、共有フォルダに現在割り当てられているユーザーに付与された権限の両方が、「共有先の管理」と「レコードの追加と削除」に設定されます。

2番目の例では、デフォルトのレコード権限と、共有フォルダに現在格納されている既存のレコードの権限の両方が、現在その共有フォルダにアクセスできるユーザーに対して「編集」と「共有」に設定されます。
{% endhint %}

### record-permissionコマンド <a href="#record-permission-command" id="record-permission-command"></a>

**コマンド:** `record-permission`

**詳細:** 共有フォルダのすべてのレコードの権限を変更します

**パラメータ:**

フォルダのパスまたはUID

**スイッチ:**

-a、--action <{*grant, revoke*}> レコードに設定するアクセス権限

-s、--can-share レコード共有を許可します

-d、--can-edit フォルダのレコードの変更を許可します

-f、--force プロンプトを表示せずに権限の変更を適用します

-R、--recursive すべてのサブフォルダに権限の変更を適用します

\--dry-run コマンドによって加えられた権限の変更を実際には権限を変更せずに表示します

\--share-record レコードの共有権限を変更します

\--share-folder フォルダの共有権限を変更します

**例:**

```
record-permission memberships --action grant --can-share
record-permission jdrkYEaf03bG0ShCGlnKww -a revoke -d -R
record-permission social -a grant -s --dry-run
```

1. 「memberships」共有フォルダのすべてのレコードに共有権限を付与します。
2. 指定したUIDを持つフォルダとすべてのサブフォルダのすべてのレコードから編集権限を取り消します。
3. 「social」フォルダに共有権限を付与することによって加えられる変更は表示しますが、権限の変更は適用しません。

### shareコマンド <a href="#share-command" id="share-command"></a>

{% hint style="info" %}
コマンダーのバージョン16.6.3以降が必要となります
{% endhint %}

**コマンド:** `one-time-share`

**詳細:** 指定したレコードのワンタイム共有URLを作成、一覧表示、削除します。ワンタイム共有の詳細については、[こちら](https://docs.keeper.io/enterprise-guide/sharing/one-time-share)をご覧ください。

注: ワンタイム共有は、すべての `KeeperPAM` レコードタイプで利用できるとは限りません。

**サブコマンド:**

`list` - ワンタイム共有を表示します。

`create` - ワンタイム共有URLを新規作成します。

`remove` - ワンタイム共有を削除します。

**List**

**スイッチ:**

`-a`、`--all` 失効した共有を含むすべてのワンタイム共有を表示します

`--format <table, csv, json>` ワンタイム共有の表示形式

`-v`、`--verbose` 詳細出力

`-R --recursive` オプションは、サブフォルダをたどるためのものです。

**パラメータ:**

レコードやフォルダの名前またはUID。反復可能。

**Create**

**スイッチ:**

`--output <clipboard, stdout>` URLをクリップボードにコピーするか、stdout (デフォルト) に出力するかを選択します。

`--name` ワンタイム共有の名前を指定します。

`-e <時間>`、`--expire <時間>` ワンタイム共有の有効期間。

形式: \[(m)inutes|(h)ours|(d)ays] たとえば、1時間は `1h`

\--editable 共有相手によるレコードのフィールドの編集とファイルのアップロードを許可します。

**パラメータ:**

* レコードの名前かUID。反復可能。

**Remove**

**パラメータ:**

* レコードの名前またはUID
* ワンタイム共有の名前またはUID

**例:**

**List**

```
My Vault> one-time-share list -R /
My Vault> ots list dIGd46nq2uE_q1fXlAQGkw --all
Record UID              Name         Share Link ID            Generated            Opened    Expires              Status
----------------------  -----------  -----------------------  -------------------  --------  -------------------  ---------
dIGyf6nq2uE_q1fXlAQGkw  MyShare      vhSIl2fnjp5tTaE4w9DC...  2022-04-29 11:01:19            2022-04-29 12:01:19  Expired
dIGyf6nq2uE_q1fXlAQGkw  LwIdbnYa160  bOuAQzCoYL8XIcQpz2KU...  2022-04-29 15:38:27            2022-04-29 16:38:27  Generated
```

**Create**

```
My Vault> one-time-share create dIGyf6nq2uE_q1fXlAQGkw -e 1h
       URL : https://keepersecurity.com/vault/share#s4iSKc7TP[...]
```

**Create (双方向の編集)**

```
My Vault> share create --editable dIGyf6nq2uE_q1fXlAQGkw -e 1h
       URL : https://keepersecurity.com/vault/share#s4iSKc7TP[...]
```

**Remove**

```
My Vault> one-time-share remove dIGyf6nq2uE_q1fXlAQGkw MyShare
One-time share "MyShare" is removed from record "dIGyf6nq2uE_q1fXlAQGkw"
```

### external-shares-reportコマンド

{% hint style="info" %}
本コマンドには[コンプライアンスレポート作成](https://docs.keeper.io/enterprise-guide/compliance-reports)のアドオンが必要となり、エンタープライズ管理者アカウントのみでご利用になれます。
{% endhint %}

**コマンド:** `external-shares-report`または`esr`

**詳細:** 社外のユーザーに付与された共有権限を表示して、(オプションで) 取り消します。

**スイッチ:**

\--format <{table, json, csv}> 出力の書式を設定します。デフォルトは「table」です。

\--output <ファイル名> ファイル名に出力します。「table」形式では無視されます。

\--action、-a <{remove, none}> 外部共有に対して実行するアクション。省略した場合は「none」。

\--share-type, -t <{direct, shared-folder, all}> 共有タイプでレポートをフィルタリング。省略した場合は「all」。

\--force、-f 共有を削除するときに確認を省略します。

\--refresh-data、-r 実行する前にローカルユーザーとレコードのデータを更新します。

**例:**

```
external-shares-report
external-shares-report -r
esr --output external_shares.json --format json
external-shares-report -a remove
esr -a remove -f
external-shares-report --share-type shared-folder
```

1. 社外のユーザーに共有されているレコードと共有フォルダを表示します。
2. レポートを実行して表示する前に、ローカルにキャッシュされた企業のレコード/フォルダ/ユーザーデータを更新します。
3. レポートを実行し、結果を**external\_shares.json**という名前のJSON形式のファイルにエクスポートします。
4. レポートを実行して結果を表示し、その結果で特定された外部共有を取り消します。
5. 上記#4と同じですが、実行を完了するために追加のユーザー操作は必要ありません (レポートで特定された外部共有を取り消す前の確認プロンプトは省略されます)。
6. レポートを実行して表示し、結果を直接共有で共有されたレコードに限定します (レポートから共有フォルダを除外します)。

{% hint style="info" %}
デフォルトでは、上記のコマンド (`esr -a remove`) を使用して、以前に外部アカウントに付与された共有権限を取り消すには、確認プロンプトによるユーザー操作が必要です。

このタスクを非対話的な方法で実行する必要がある場合は (たとえば、Keeperスクリプト/バッチファイルから実行する場合や自動管理ツールの一部として実行する場合)、コマンド呼び出しに`--force`フラグを付けます (例: `external-shares-report --force --action remove`)。
{% endhint %}

### レコード権限の一括変更

この例では、共有フォルダのレコード権限を再帰的に変更します。

#### 1. 共有フォルダのUIDを特定

コマンダーでは、Bashシェルと同様に「ls-l」コマンドが使用できます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FHqUgwjPG0yZD27yIoyTZ%2Fimage.png?alt=media&#x26;token=92f1b5b7-b0dc-4da9-aefa-fd9c9164d26e" alt=""><figcaption></figcaption></figure>

ボルト内では、情報アイコンをクリックして共有フォルダのUIDを取得できます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F9RXBecuUCSPF6y0vRonj%2Fimage.png?alt=media&#x26;token=db0ac340-c987-49c2-9bf8-f318f51cb571" alt=""><figcaption></figcaption></figure>

#### **2. コマンダーを使用してレコード権限の変更を検証**

コマンダーで`--dry-run`オプションを指定して、`record-permission`コマンドを実行し、このコマンドをシミュレートします。 この例では、共有フォルダのUIDは「-FHdesR\_GSERHUwBg4vTXw」ですので、コマンドは以下のようになります。\
\
**record-permission --dry-run --recursive --action grant --can-edit -- -FHdesR\_GSERHUwBg4vTXw**

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FdB06A9WTyBDznJTDhXWA%2Fimage.png?alt=media&#x26;token=90dfa84e-5882-4db2-8c50-b7508b08f064" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
この例では、共有フォルダのUIDが「-」で始まるため、識別子の前に「--」を追加する必要があります。
{% endhint %}

このコマンドを実行すると、以下の出力が生成されます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FlqdtRS80Iq5RQHy7pLb5%2Fimage.png?alt=media&#x26;token=a0005ca2-8ea0-4b1b-9c74-460669dc391f" alt=""><figcaption></figcaption></figure>

「SKIP」セクションには、コマンダーの現在のユーザーがレコードの所有者ではないため、要求された変更を行うことができない旨表示されています。 「GRANT」セクションの表示は、変更が許可されるとなっています。

#### **3. コマンダーを使用して権限変更コマンドを実行**

コマンドを実行するには、「--dry-run」部分を削除します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FtzV8yK8q5zRosiKyP7t9%2Fimage.png?alt=media&#x26;token=f738b068-3d45-4843-8a53-7f67184cafa3" alt=""><figcaption></figcaption></figure>

これで、該当するレコードの権限がボルトのUIで「編集可」に変更されました。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FwFBByhAlJuP4FryRuCL3%2Fimage.png?alt=media&#x26;token=51615f87-c796-42bb-8bfa-95f6a704276c" alt=""><figcaption></figcaption></figure>

#### レコードの所有者が複数含まれる共有フォルダ

同じ共有フォルダ内に更新が必要なレコードの所有者が多数存在する場合は、各ユーザーがコマンダーで上記の操作を実行するだけで、それぞれのレコードの権限を変更できます。

{% hint style="info" %}
共有管理者権限を持つ企業ユーザーの場合は、上記の手順を1回実行するだけで、共有フォルダ内のすべてのレコード (レコードの所有者に関係なく) の権限を変更できます。

このような場合、他のレコード所有者が同じ手順を繰り返す必要がないため、処理が大幅に簡素化されます。
{% endhint %}

### レコード所有権の一括移管

前の例 (共有フォルダ内のすべてのレコードのアクセス許可を変更する方法) とほぼ同じ手順を使用して、特定の共有フォルダ内のすべてのレコードの所有権を単一のアカウントに移行することもできます。

次の例 (前の例と同じボルトと共有フォルダを使用) では、その共有フォルダ内のレコードの所有権をユーザー<joe.smith@gmail.com>に移管してみます。

#### 1. 共有フォルダUIDを確認

確認方法の詳細については、前の例をご参照ください。

この例では、UID `-FHdesR_GSERHUwBg4vTXw`の共有フォルダを使用します。

#### **2. コマンダーでレコード所有権移管コマンドを検証**

前の例と同様に、コマンダーで--dry-runオプションを指定してshare-recordコマンドを実行することで、実際の実行前に目的のアクションをシミュレートできます (前の例とは異なり、この例ではレコードの所有権の譲渡先アカウントのユーザー名 (<john.smith@gmail.com>) も指定する必要があります)。コマンドは以下のとおりです。

**`share-record --action owner --email john.smith@gmail.com --dry-run --recursive -- -FHdesR_GSERHUwBg4vTXw`**

#### **3. コマンダーでレコード所有権移管コマンドを実行**

最後に、前の例と同様にコマンド呼び出しから--dry-runオプションを削除して、以下のように目的のアクションを実行します。

**`share-record --action owner --email john.smith@gmail.com --recursive -- -FHdesR_GSERHUwBg4vTXw`**
