ユーザーの API キーの管理

連携ユーザーまたは非連携ユーザーは、CLI で使用する API キーを作成したり、自動化の一部としてユーザー ID としてログインしたりできます。 コンソール、CLI、または API を使用して、キーの一覧表示、キーの作成、キーの更新、キーの削除を行い、 IBM Cloud® API キーを管理できます。

API キーは、作成対象のユーザー ID に割り当てられているすべてのアクセス権限を継承し、アクセス権限は API キーが作成されたアカウントには限定されません。これは、対象ユーザーに割り当てられているすべてのポリシーからアクセス権限が継承されるためです。 したがって、ユーザーが複数のアカウントのリソースに対するアクセス権限を持つ場合、API キーはすべてのアカウントのアクセス権限を継承します。 そのため、ユーザーの API キーを使用してトークンを生成したり、API キーが作成されたアカウントの外部にある、ユーザーがアクセス権限を持つリソースにアクセスしたりできます。

あなたのユーザーIDに関連付けられているAPIキーは、あなたがメンバーであるすべてのアカウント、あなたが権利を有するすべてのアクセス権を持っています。 このため、APIキーの使用方法には注意が必要だ。 例えば、IBM Cloud サービスをユーザーのために機能させたり、IAM 対応ではないサービスにアクセスさせたりする必要がある場合、そのサービスでユーザー API キーが必要にあることがあります。 このような場合は、サービスを利用するために必要な最小レベルのアクセス権が割り当てられた機能IDに関連付けられたAPIキーを作成する。

機能 ID は、プログラム、アプリケーション、サービスを表わすために作成されるユーザー ID です。 機能 ID をアカウントに招待して、特定のリソースやアプリケーションとの対話など、特定の目的に限定したアクセス権限を割り当てることができます。 機能 ID には、その ID が作成された特定の機能に必要な、単一アカウント内の最小レベルのアクセス権限のみを付与する必要があります。

トラステッド・プロファイルを適用している場合、ユーザー API キーを作成することはできません。 とはいえ、他のすべての API キーは作成して管理することができます。 例えば、サービス ID API キーなどがあります。 詳しくは、 IAMに関する よくある質問 をご覧ください。

ユーザーの API キーの管理

自分のユーザー・アイデンティティに関連付けられている IBM Cloud API キー、またはアカウント内の他のユーザーのために管理するアクセス権を持っている API キーを管理するには、 IBM Cloud コンソールの Manage > Access (IAM) > API keys に進みます。 APIキーのページでは、 IBM Cloud APIキーを作成、編集、削除することができます。 また、ユーザー階層で自分が祖先となるユーザーのすべての クラシック・インフラストラクチャー APIキー を管理することもできます。 さらに、アカウント所有者であるか、または、アカウントの他のユーザーの API キーを管理するために必要なアクセス権限を割り当てられたユーザーである場合は、**「表示」**フィルターを使用して、それらの API キーもリスト表示して管理することができます。

APIキーページでのAPIキー管理に必要なアクセス権
フィルター・オプション 表示される API キー 必要なアクセス権限 許可されるアクション
自分の IBM Cloud API キー 自分の IBM Cloud API キー アクセス権限不要 表示、作成、編集、削除
すべてのユーザーの IBM Cloud API キー アカウントのすべてのユーザーによって作成されたすべての All IBM Cloud API キー IAM Identity サービスに対する管理者役割 表示、編集、および削除

コンソールでの API キーの作成

IBM Cloud ユーザーは、プログラムまたはスクリプトを使用可能にする際、パスワードをスクリプトに配布せずに、API キーを使用できます。 APIキーを使用する利点は、ユーザーまたは組織が異なるプログラム用に複数のAPIキーを作成できることである。 APIキーが漏洩した場合、他のAPIキーやユーザーを妨げることなく、APIキーを独自に削除することができる。 最大 20 個の API キーを作成できます。

UI でユーザー ID の API キーを作成するには、以下の手順を実行します。

  1. IBM Cloud コンソールで**「管理」** > 「アクセス (IAM)」 > **「API キー」**に移動します。
  2. **「IBM Cloud API キーの作成」**をクリックします。
  3. API キーの名前と説明を入力します。
  4. 「作成」 をクリックします。
  5. 次に、**「表示」をクリックして API キーを表示します。 または、「コピー」をクリックして後で使用するためにコピーして保存するか、または「ダウンロード」**をクリックします。

安全上の理由により、API キーをコピーまたはダウンロードできるのは作成時のみになります。 API キーを紛失した場合は、新しい API キーを作成する必要があります。

CLI を使用した API キーの作成

CLI を使用して API キーを作成するには、以下のコマンドを使用します。

  1. ibmcloud iam api-key-create NAME [-d DESCRIPTION] [-f, --file FILE] [--action-if-leaked VALUE] を入力し、名前、説明、キーを保存するファイルを指定します。 以下の例を参照してください。
ibmcloud iam api-key-create MyKey -d "this is my API key" --file key_file --action-if-leaked "DELETE"

--action-if-leaked では、"NONE"、"DISABLE"、または "DELETE "が指定できる。 デフォルトの動作は「DISABLE」である。

  • DISABLE :キーを無効にすると、そのキーの認証とサービスへのアクセスが直ちにブロックされる。 必要であれば、後でキーを再度有効にすることができます。
  • DELETE: APIキーはアカウント永久に削除され、認証に使用できなくなります。 この操作は元に戻せません。
  • NONE :鍵はアクティブのままで、リソースへのアクセスに使用できる。

API を使用した API キーの作成

APIキーを作成するには、以下の例に示すように IAM Identity Service APIを呼び出す:

curl -X POST 'https://iam.cloud.ibm.com/v1/apikeys' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -d '{
  "name": "My-apikey",
  "description": "my personal key",
  "iam_id": "IBMid-123WEREW",
  "account_id": "ACCOUNT_ID"
  "store_value": false
  "action_when_leaked": "delete"
  "support_sessions": false
}'
CreateApiKeyOptions createApiKeyOptions = new CreateApiKeyOptions.Builder()
    .name(apiKeyName)
    .iamId(iamId)
    .description("Example ApiKey")
    .build();

Response<ApiKey> response = service.createApiKey(createApiKeyOptions).execute();
ApiKey apiKey = response.getResult();
apikeyId = apiKey.getId();
System.out.println(apiKey.toString());
const params = {
  name: apikeyName,
  iamId: iamId,
  description: 'Example ApiKey',
};

iamIdentityService.createApiKey(params)
  .then(res => {
    apikeyId = res.result.id
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err);
  });
api_key = iam_identity_service.create_api_key(
  name=apikey_name,
  iam_id=iam_id
).get_result()

apikey_id = api_key['id']

print(json.dumps(api_key, indent=2))
createAPIKeyOptions := iamIdentityService.NewCreateAPIKeyOptions(apikeyName, iamID)
createAPIKeyOptions.SetDescription("Example ApiKey")

apiKey, response, err := iamIdentityService.CreateAPIKey(createAPIKeyOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(apiKey, "", "  ")
fmt.Println(string(b))
apikeyID = *apiKey.ID

action_when_leaked では、"none"、"disable"、"delete "のいずれかを指定する。 デフォルトは "disable "である。

  • 無効にする :disable:キーを無効にすると、そのキーの認証とサービスへのアクセスが即座にブロックされる。 必要であれば、後でキーを再度有効にすることができます。
  • 削除します:APIキーはアカウント永久に削除され、認証に使用できなくなります。 この操作は元に戻せません。
  • none :キーはアクティブのままで、リソースへのアクセスに使用できる。

support_sessions の場合、APIキーのCLIログイン・セッションを管理できるかどうかを定義する:

  • true を指定します:このAPIキーのログインセッションを作成し、セッションを確認または取り消すことで管理できます。 詳細については、 ログインセッションの監視を 参照してください。
  • false :セッションは作成されず、追跡もされない。 ログインの取り消しや見直しはできず、アクセスをブロックするにはAPIキー自体を削除するかローテーションする必要がある。

開始前に

Terraformを使ってユーザーAPIキーを管理する前に、以下のステップを完了していることを確認してください:

  • Terraform CLIをインストールし、Terraform用の IBM Cloud Providerプラグインを設定する。 詳しくは、 でTerraformを始める IBM Cloud® のチュートリアルをご覧ください。 このプラグインは、以下のタスクを実行するために使用される IBM Cloud API を抽象化します。
  • main.tfという名前の Terraform 構成ファイルを作成します。 このファイルでは、 HashiCorp Configuration Languageを使用してリソースを定義します。 詳しくは Terraformのドキュメントを参照。

Terraformを使ってAPIキーを作成する

以下の手順で、Terraformを使ってアクセスグループを作成する。

  1. main.tf ファイルに引数を作成する。 以下の例では、 ibm_iam_api_key リソースを使用してアクセス・グループを作成している。 name は、API キーを識別するための一意の名前である。

    resource "ibm_iam_api_key" "iam_api_key" {
     name        = "test1234"
    }
    

    description プロパティは、APIキーの作成時に説明が提供された場合にのみ利用可能である。 詳しくは Terraform Identity and Access Management(IAM) ページの引数リファレンスの詳細を参照してください。

  2. 設定ファイルのビルドが終わったら、Terraform CLIを初期化します。 詳しくは、 作業ディレクトリの初期化を参照のこと。

    terraform init
    
  3. main.tf ファイルからリソースをプロビジョニングする。 詳しくは Terraformによるインフラのプロビジョニングを参照してください。

    1. terraform plan を実行してTerraformの実行プランを生成し、提案されたアクションをプレビューする。

      terraform plan
      
    2. terraform apply を実行し、プランで定義されたリソースを作成する。

      terraform apply
      

コンソールでAPIキーを更新する

API キーの名前や説明を変更する場合は、UI または CLI で以下の手順を実行します。

API キーを編集するには、以下の手順を実行します。

  1. IBM Cloud コンソールで**「管理」** > 「アクセス (IAM)」 > **「API キー」**に移動します。
  2. 更新したい API キーの行を識別し、アクション・アイコンアクション・アイコン > 編集をクリックします。
  3. API キーの情報を更新します。
  4. **「適用」**をクリックします。

自分のものではないが管理できる API キーを編集するには、「API キー」ページに移動します。 次に、**「表示」メニューから「すべてのユーザーの IBM Cloud API キー」**オプションを選択して対象の API キーを見つけます。

CLIを使用したAPIキーの更新

CLI を使用して API キーを編集するには、以下のコマンドを入力します。

  1. ibmcloud iam api-key-update NAME [-n NAME] [-d DESCRIPTION] と入力し、キーの古い名前、新しい名前、新しい説明を指定する。 詳しくは以下の例を参照:
ibmcloud iam api-key-update MyCurrentName -n MyNewName -d "the new description of my key"

API を使用した API キーの更新

APIを使用してAPIキーを編集するには、以下の例に示すように IAM Identity Service APIを呼び出す:

curl -X PUT 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID' -H 'Authorization: Bearer TOKEN' -H 'If-Match: <value of etag header from GET request>' -H 'Content-Type: application/json' -d '{
  "name": "My-apikey",
  "description": "my personal key"
}'
UpdateApiKeyOptions updateApiKeyOptions = new UpdateApiKeyOptions.Builder()
    .id(apikeyId)
    .ifMatch(apikeyEtag)
    .description("This is an updated description")
    .build();

Response<ApiKey> response = service.updateApiKey(updateApiKeyOptions).execute();
ApiKey apiKey = response.getResult();
System.out.println(apiKey.toString());
const params = {
  id: apikeyId,
  ifMatch: apikeyEtag,
  description: 'This is an updated description',
};

iamIdentityService.updateApiKey(params)
  .then(res => {
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err);
  });
api_key = iam_identity_service.update_api_key(
  id=apikey_id,
  if_match=apikey_etag,
  description='This is an updated description'
).get_result()

print(json.dumps(api_key, indent=2))
updateAPIKeyOptions := iamIdentityService.NewUpdateAPIKeyOptions(apikeyID, apikeyEtag)
updateAPIKeyOptions.SetDescription("This is an updated description")

apiKey, response, err := iamIdentityService.UpdateAPIKey(updateAPIKeyOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(apiKey, "", "  ")
fmt.Println(string(b))

Terraformを使ってAPIキーを更新する

以下の手順で、terraformを使ってAPIキーを更新する:

  1. Terraformの設定 main.tf ファイルで、 iam_api_key を作成するために使用したTerraformコードを探します。

  2. 以下の例では、 ibm_iam_api_key リソースを使用して、API キーを更新している。 name は、API キーを識別するための一意の名前である。

    resource "ibm_iam_api_key" "iam_api_key" {
     name        = "test1234"
     description = "API key for users"
    }
    

    description プロパティは、APIキーの作成時に説明が提供された場合にのみ利用可能である。 詳しくは Terraform Identity and Access Management(IAM) ページの引数リファレンスの詳細を参照してください。

  3. main.tf ファイルからリソースをプロビジョニングする。 詳しくは Terraformによるインフラのプロビジョニングを参照してください。

    1. terraform plan を実行してTerraformの実行プランを生成し、提案されたアクションをプレビューする。

      terraform plan
      
    2. terraform apply を実行し、プランで定義されたリソースを作成する。

      terraform apply
      

詳しくは、Terraform の資料を参照してください。

コンソールでのAPIキーのロックとアンロック

ユーザー ID を表すプラットフォーム API キーの場合、API キーをロックすることにより削除されないようにすることができます。 ロックされた API キーには、 ロックされたアイコン Locked icon が表示される。

  1. IBM Cloud コンソールで**「管理」** > 「アクセス (IAM)」 > **「API キー」**に移動します。
  2. ロックしたい API キーの行を識別し、アクション・アイコンアクション・アイコン > ロックをクリックします。

API キーを更新したりアカウントから削除したりするために、API キーをいつでもアンロックできます。 アンロックする API キーを表から選択し、アクション・アイコン アクション・アイコン > アンロックをクリックします。

CLI を使用した API キーのロックおよびアンロック

ユーザー ID を表すプラットフォーム API キーの場合、API キーをロックすることにより削除されないようにすることができます。 API キーをロックするには、以下のコマンドを使用します。

ibmcloud iam api-key-lock (NAME|UUID) [-f, --force]

前提条件: エンドポイント、ログイン

コマンド・オプション

NAME (必須)
ロックするAPIキーの名前。UUIDで排他的。
UUID (必須)
NAMEと排他的にロックするAPIキーのUUID。
-f, --force
確認なしでロックを強制します。

:

API キーのロック test-api-key

ibmcloud iam api-key-lock test-api-key

API キーをアンロックするには、以下のコマンドを実行します。

ibmcloud iam api-key-unlock (NAME|UUID) [-f, --force]

前提条件: エンドポイント、ログイン

コマンド・オプション

NAME (必須)
アンロックする API キーの名前。UUID と同時に指定することはできません。
UUID (必須)
アンロックする API キーの UUID。NAME と同時に指定することはできません。
-f, --force
確認なしでアンロックを強制します。

:

API キーのロック解除 test-api-key

ibmcloud iam api-key-unlock test-api-key

API を使用した API キーのロックおよびアンロック

ユーザー ID を表すプラットフォーム API キーの場合、API キーをロックすることにより削除されないようにすることができます。

APIを使用してAPIキーをロックする

APIを使用してAPIキーをロックするには、以下の例に示すように IAM Identity Service APIを呼び出す:

curl -X POST 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID/lock' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
LockApiKeyOptions lockApiKeyOptions = new LockApiKeyOptions.Builder()
    .id(apikeyId)
    .build();

service.lockApiKey(lockApiKeyOptions).execute();
const params = {
  id: apikeyId,
};

iamIdentityService.lockApiKey(params)
  .then(res => {
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err);
  });
lock_api_key(self,
        id: str,
        **kwargs
    ) -> DetailedResponse

response = iam_identity_service.lock_api_key(id=apikey_id)

print(response)
lockAPIKeyOptions := iamIdentityService.NewLockAPIKeyOptions(apikeyID)

response, err := iamIdentityService.LockAPIKey(lockAPIKeyOptions)
if err != nil {
  panic(err)
}

API キーのアンロック

APIを使用してAPIキーのロックを解除するには、以下の例に示すように IAM Identity Service APIを呼び出す:

curl -X DELETE 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID/lock' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
UnlockApiKeyOptions unlockApiKeyOptions = new UnlockApiKeyOptions.Builder()
    .id(apikeyId)
    .build();

service.unlockApiKey(unlockApiKeyOptions).execute();
const params = {
  id: apikeyId,
};

iamIdentityService.unlockApiKey(params)
  .then(res => {
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err);
  });
response = iam_identity_service.unlock_api_key(id=apikey_id)

print(response)
unlockAPIKeyOptions := iamIdentityService.NewUnlockAPIKeyOptions(apikeyID)

response, err := iamIdentityService.UnlockAPIKey(unlockAPIKeyOptions)
if err != nil {
  panic(err)
}

Terraformを使ったAPIキーのロックとアンロック

ユーザー ID を表すプラットフォーム API キーの場合、API キーをロックすることにより削除されないようにすることができます。

Terraformを使ってAPIキーをロックする

以下の手順で、Terraformを使ってAPIキーをロックする:

  1. Terraformの設定 main.tf ファイルで、 iam_api_key を作成するために使用したTerraformコードを探します。

  2. 以下の例では、 ibm_iam_api_key リソースを使用してAPIキーを更新している。 entity_lock は、APIキーが以降の書き込み操作に対してロックされているかどうかを示す。 デフォルト値はfalseです。

    resource "ibm_iam_api_key" "iam_api_key" {
     entity_lock        = "true"
    }
    
  3. main.tf ファイルからリソースをプロビジョニングする。 詳しくは Terraformによるインフラのプロビジョニングを参照してください。

    1. terraform plan を実行してTerraformの実行プランを生成し、提案されたアクションをプレビューする。

      terraform plan
      
    2. terraform apply を実行し、プランで定義されたリソースを作成する。

      terraform apply
      

詳しくは、Terraform の資料を参照してください。

API キーの削除

キーのローテーション戦略を使用している場合は、古いキーを削除し、新しいキーに置き換えることができます。

API キーを削除するには、以下の手順を実行します。

  1. IBM Cloud コンソールで**「管理」** > 「アクセス (IAM)」 > **「API キー」**に移動します。
  2. 削除したいAPIキーの行を特定し、 Actions アイコン Deleteをクリックする。
  3. 次に、**「削除」**をクリックして、削除を確認します。

自分のものではないが管理できる API キーを削除するには、「API キー」ページに移動します。 次に、**「表示」メニューから「すべてのユーザーの IBM Cloud API キー」**オプションを選択して対象の API キーを見つけます。

CLI を使用した API キーの削除

CLI を使用して API キーを削除するには、以下の手順を実行します。

ibmcloud iam api-key-delete NAME と入力し、削除するキーの名前を指定する。

API を使用した API キーの削除

APIを使用してAPIキーを削除するには、以下の例に示すように IAM Identity Service APIを呼び出す:

curl -X DELETE 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
DeleteApiKeyOptions deleteApiKeyOptions = new DeleteApiKeyOptions.Builder()
    .id(apikeyId)
    .build();

service.deleteApiKey(deleteApiKeyOptions).execute();
const params = {
  id: apikeyId,
};

iamIdentityService.deleteApiKey(params)
  .then(res => {
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err);
  });
delete_api_key(self,
        id: str,
        **kwargs
    ) -> DetailedResponse

response = iam_identity_service.delete_api_key(id=apikey_id)

print(response)
deleteAPIKeyOptions := iamIdentityService.NewDeleteAPIKeyOptions(apikeyID)

response, err := iamIdentityService.DeleteAPIKey(deleteAPIKeyOptions)
if err != nil {
  panic(err)
}

流出したユーザーAPIキーをコンソールで確認する

流出したユーザーAPIキーが検出された場合、コンソールを使用して確認することができます。 以下のステップを実行します。

  1. IBM Cloud コンソールにログインします。
  2. 流出したAPIキーを含むアカウント選択します。
  3. 管理アクセスAPIキーで、流出したAPIキーを確認する。

CLIを使用して流出したユーザーAPIキーをレビューする

漏洩したユーザーAPIキーが検出された場合、CLIを使用してそのキーを確認できます。 以下のステップを実行します。

  1. IBM Cloud CLI にログインします。

  2. 流出したAPIキーを含むアカウント選択します。

  3. 以下のコマンドを実行します。

    ibmcloud iam api-key <API_key_ID>