サービス ID の API キーの管理

サービス ID は、IBM Cloud® の内部および外部の両方でホストされているアプリケーションによる IBM Cloud サービスへのアクセスを可能にするために作成されます。 API キーは、特定のサービス ID としてアプリケーションを認証し、その特定のサービス ID に関連付けられたアクセス権限をアプリケーションに付与するために使用されます。

サービス ID を作成したら、API キーの作成とサービス・ポリシーの割り当てを開始できます。 各ポリシーは、サービスでの認証に API キーが使用された時に許可されるアクセス・レベルを指定します。 サービス ID の作成およびポリシーの割り当てについて詳しくは、『サービス ID の作成と処理』を参照してください。 サービス ID の API キーの管理に使用される CLI コマンドの詳細については、『 IAM アクセス権限、API キー、サービス ID、およびアクセス・グループの管理』を参照してください。

サービス ID に関連付けられている各 API キーは、そのサービス ID に割り当てられているポリシーを継承します。 例えば、あるアプリケーションで、特定のサービスのリソースを表示するには、ビューアー役割を割り当てたポリシーを適用したサービス ID に関連付けられている API キーを使用する必要があります。 別のアプリケーションでは、サービス内でフルアクセスを持てるようにしたい場合は、管理者役割が割り当てられたポリシーを持つ 2 番目のサービス ID に関連付けられた API キーを使用する必要があります。

サービス ID の使用方法については、 Object Storage ドキュメントの Using HMAC credentials、または IBM Cloud Data Engine ビデオ How to use IBM Cloud Data Engine REST API を参照してください。

サービス ID の API キーを管理するために必要なアクセス権限

すべてのユーザーがアカウントでサービス ID を作成できます。また、ID の作成者は ID の管理者であり、関連付けられた API キーとアクセス・ポリシーを作成できます。 ただし、アカウント所有者および IAM Identity サービスに対する管理者役割を割り当てられたユーザーは、アカウントのすべてのサービス ID の API キーを管理できます。 また、単一のサービス ID に対するアクセス権限のみをユーザーに付与することもできます。そのためには、管理者がアクセス権限を割り当てるときにサービス ID を指定します。

必要なアクセス権限を持つユーザーは、アカウントのすべてのサービス ID の API キーを表示、更新、削除できます。 **「API キー」ページに移動し、「表示」メニューの「すべてのサービス ID API キー」**オプションを選択して、詳細表示、更新、または削除を行う API キーを見つけます。

サービス ID 用の API キーの作成

サービス ID に関連付ける API キーをコンソールで作成するには、次のようにします。

  1. IBM Cloud コンソールで**「管理」** > **「アクセス (IAM)」と移動し、「サービス ID」**を選択します。
  2. サービス ID を作成していない場合は、サービス ID を作成します。
  3. アクション・アイコンアクション・アイコン > サービス ID の管理をクリックします。
  4. **「API キー」**をクリックします。
  5. 「作成」 をクリックします。
  6. API キーを容易に識別するための名前と説明を追加します。
  7. 「作成」 をクリックします。
  8. API キーを安全な場所にコピーまたはダウンロードして保存します。

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

コンソールを使ってサービスIDのAPIキーを更新する

API キーの更新は、UI で API キーを識別するために使用される名前または説明を編集することによって実行できます。

  1. IBM Cloud コンソールで**「管理」** > **「アクセス (IAM)」と移動し、「サービス ID」**を選択します。
  2. アクション・アイコンアクション・アイコン > サービス ID の管理をクリックします。
  3. **「API キー」**をクリックします。
  4. アクション・アイコンアクション・アイコン > 名前の編集 & 説明をクリックします。

サービス ID の作成者でなくても、アカウント所有者または IAM Identity サービスの管理者である場合は、アカウントのすべてのサービス ID の API キーを更新できます。 **「API キー」ページに移動し、「表示」メニューの「すべてのサービス ID API キー」**オプションを選択して、操作する API キーを見つけます。

CLI を使用したサービス ID 用の API キーの作成

CLI を使用してサービス ID の API キーを作成するには、ibmcloud iam service-api-key-create コマンドを使用します。

ibmcloud iam service-api-key-create NAME (SERVICE_ID_NAME|SERVICE_ID_UUID) [-d, --description DESCRIPTION] [--file FILE] [-f, --force] [--lock]

CLI を使用したサービス ID の API キーの更新

CLI を使用してサービス ID の API キーを更新するには、ibmcloud iam service-api-key-update コマンドを使用します。

ibmcloud iam service-api-key-update NAME SERVICE_ID [-n, --name NEW_sNAME] [-d, --description DESCRIPTION] [-v, --version VERSION] [-f, --force]

サービス ID の API キーのロック

サービス ID のアイデンティティーを表す API キーの場合、API キーをロックすることにより削除されないようにすることができます。 ロックされた API キーは、UI のロック済みアイコンロック済みアイコンで示されます。

  1. IBM Cloud コンソールで**「管理」** > **「アクセス (IAM)」をクリックし、「サービス ID」**を選択します。
  2. API キーの選択対象サービス ID の行を特定し、サービス ID の名前を選択します。
  3. **「API キー」**をクリックします。
  4. ロックする API キーの行の上にカーソルを移動し、アクション・アイコンアクション・アイコンをクリックしてオプションのリストを開きます。
  5. **「API キーのロック (Lock API key)」**をクリックします。

アクセス・ポリシーを更新、削除、または追加したり、API キーを削除したりするために、API キーはいつでもアンロックできます。

CLI を使用したサービス ID の API キーのロックまたはアンロック

サービス ID のアイデンティティーを表す API キーの場合、API キーをロックすることにより削除されないようにすることができます。 ロックされた API キーは、UI のロック済みアイコンロック済みアイコンで示されます。 サービス ID の API キーをロックするには、以下のコマンドを使用します。

ibmcloud iam service-api-key-lock (APIKEY_NAME|APIKEY_UUID) (SERVICE_ID_NAME|SERVICE_ID_UUID) [-f, --force]
前提条件
エンドポイント、ログイン、ターゲット

コマンド・オプション

APIKEY_NAME (必須)
API キーの名前。APIKEY_UUID と同時に指定することはできません。
APIKEY_UUID (必須)
API キーの UUID。APIKEY_NAME と同時に指定することはできません。
SERVICE_ID_NAME (必須)
サービス ID の名前。SERVICE_ID_UUID と同時に指定することはできません。
SERVICE_ID_UUID (必須)
サービス ID の UUID。SERVICE_ID_NAME と同時に指定することはできません。
-f, --force
確認を求めずにロックします

:

サービス ID sample-key のサービス API キー sample-service をロックします

ibmcloud iam service-api-key-lock sample-key sample-service

サービス ID の API キーをアンロックするには、以下のコマンドを使用します。

ibmcloud iam service-api-key-unlock (APIKEY_NAME|APIKEY_UUID) (SERVICE_ID_NAME|SERVICE_ID_UUID) [-f, --force]

サービス ID 用の API キーの削除

サービス ID に関連付けられている API キーを削除することができます。 しかし、アプリケーションによって使用されている API キーを削除すると、サービスでそのアプリケーションの認証を行えなくなります。

  1. IBM Cloud コンソールで**「管理」** > **「アクセス (IAM)」と移動し、「サービス ID」**を選択します。
  2. サービス ID を作成していない場合は、サービス ID を作成します。
  3. アクション・アイコンアクション・アイコン > サービス ID の管理をクリックします。
  4. **「API キー」**をクリックします。
  5. アクション・アイコンアクション・アイコン > 削除をクリックします。

サービス ID の作成者でなくても、アカウント所有者または IAM Identity サービスの管理者である場合は、アカウントのすべてのサービス ID の API キーを削除できます。 **「API キー」ページに移動し、「表示」メニューの「すべてのサービス ID API キー」**オプションを選択して、操作する API キーを見つけます。

CLI を使用したサービス ID 用の API キーの削除

サービス ID に関連付けられている API キーを削除することができます。 しかし、アプリケーションによって使用されている API キーを削除すると、サービスでそのアプリケーションの認証を行えなくなります。 CLI を使用してサービス ID の API キーを削除するには、ibmcloud iam service-api-key-delete コマンドを使用します。

ibmcloud iam service-api-key-delete NAME SERVICE_ID [-f, --force]

API を使用したサービス ID 用の API キーの作成

サービスID 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": "Service-apikey",
  "description": "my service key",
  "iam_id": "IBMid-123WEREW",
  "account_id": "ACCOUNT_ID"
  "store_value": 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

API を使用したサービス ID 用の API キーの更新

APIを使用してサービスIDの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": "Service-apikey",
  "description": "my service 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))

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

サービス ID のアイデンティティーを表す API キーの場合、API キーをロックすることにより削除されないようにすることができます。

API キーのロック

APIを使用してサービスIDの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);
  });
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を使用してサービスIDのAPIキーのロックを解除するには、次の例に示すように IAM Identity Service APIを呼び出す:

curl -X DELETE 'https://iam.cloud.ibm.com/v1/serviceids/SERVICE_ID_UNIQUE_ID/lock' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
UnlockServiceIdOptions unlockServiceIdOptions = new UnlockServiceIdOptions.Builder()
    .id(svcId)
    .build();

service.unlockServiceId(unlockServiceIdOptions).execute();
const params = {
  id: svcId,
};

iamIdentityService.unlockServiceId(params)
  .then(res => {
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err);
    done(err);
  });
response = iam_identity_service.unlock_service_id(id=svc_id)

print(response)
unlockServiceIDOptions := iamIdentityService.NewUnlockServiceIDOptions(svcID)

response, err := iamIdentityService.UnlockServiceID(unlockServiceIDOptions)
if err != nil {
  panic(err)
}

API を使用したサービス ID 用の API キーの削除

APIを使用してサービスIDの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)
}

開始前に

Terraformを使ってサービスIDのAPIキーを管理する前に、以下のことが完了していることを確認してください:

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

Terraformを使ってサービスIDのAPIキーを作成する

以下の手順で、Terraformを使ってサービスIDのAPIキーを作成します。

  1. main.tf ファイルに引数を作成する。 以下の例では、 ibm_iam_service_api_key リソースを使用して、サービス ID の API キーを作成している。 name は、サービス API キーを識別するための一意の名前である。 タスクを完了するには、サービスのIAM IDが必要です。

    resource "ibm_iam_service_id" "serviceID" {
     name = "servicetest"
    }
    
    resource "ibm_iam_service_api_key" "testacc_apiKey" {
     name = "testapikey"
     iam_service_id = ibm_iam_service_id.serviceID.iam_id
    }
    

    詳しくは 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
      

Terraformを使ってサービスIDのAPIキーを更新する

以下の手順で、Terraformを使ってサービスIDのAPIキーを更新します:

  1. main.tf ファイルに引数を作成する。 以下の例では、 nameiam_service_id オプションに新しい値を追加することで、サービスIDのAPIキーを更新できる。

    resource "ibm_iam_service_id" "serviceID" {
     name = "servicetest"
    }
    
    resource "ibm_iam_service_api_key" "testacc_apiKey" {
     name = "testapikey"
     iam_service_id = ibm_iam_service_id.serviceID.iam_id
    }
    

    詳しくは 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
      

TerraformでサービスIDのAPIキーを削除する

Terraformファイルを使用してサービスIDのAPIキーを作成している必要があります。 以下の手順で、Terraformを使ってサービスIDのAPIキーを削除します。

  1. 次の例は、サービスIDのAPIキーを削除する方法を示している。

    resource "ibm_iam_service_id" "serviceID" {
     name = "servicetest"
    }
    
    resource "ibm_iam_service_api_key" "testacc_apiKey" {
     name = "testapikey"
     iam_service_id = ibm_iam_service_id.serviceID.iam_id
    }
    

    詳しくは 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
      

流出したサービスIDのAPIキーをコンソールで確認する

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

  1. IBM Cloud コンソールにログインします。
  2. 流出したサービスIDのAPIキーを含むアカウント選択します。
  3. 管理」 >「 アクセス 」>「 サービスID 」に進みます。
  4. サービスIDの名前を選択します。
  5. **「API キー」**を選択します。
  6. 流出したAPIキーの名前を選択して確認する。

CLIを使用して流出したサービスIDのAPIキーを確認する

漏洩したサービスID APIキーが検出された場合は、CLIを使用して確認することができます。 以下のステップを実行します。

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

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

    ibmcloud iam service-api-key <API_key_ID> <service_id_name>