Apigee Space の作成と管理

Apigee Edge のドキュメントはこちらをご覧ください。

このトピックでは、Apigee 組織に Apigee Space を作成して、Apigee API リソースの Identity and Access Management ポリシーを大規模に管理する方法について説明します。

このガイドでは、次の手順について説明します。

Apigee Space を使用して API リソースを管理するメリットについては、Apigee Space をご覧ください。

始める前に

Space の使用を開始する前に、次の点にご注意ください。

  • Apigee をプロビジョニングします。使用する Apigee サブスクリプションまたは従量課金制の組織がプロビジョニングされていることを確認します。Apigee のプロビジョニングに必要な手順の詳細については、プロビジョニングの概要をご覧ください。
  • 認証情報を取得します。コマンドラインで Space を作成、管理するためのコマンドを実行する前に、次のコマンドを使用して gcloud 認証情報を取得します。
    export TOKEN=$(gcloud auth print-access-token)

必要なロールと権限

Make sure that you have the following role or roles on the project: Apigee > Apigee Organization Admin

Check for the roles

  1. In the Google Cloud console, go to the IAM page.

    Go to IAM
  2. Select the project.
  3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

  4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

Grant the roles

  1. In the Google Cloud console, go to the IAM page.

    [IAM] に移動
  2. プロジェクトを選択します。
  3. [ アクセスを許可] をクリックします。
  4. [新しいプリンシパル] フィールドに、ユーザー ID を入力します。 これは通常、Google アカウントのメールアドレスです。

  5. [ロールを選択] リストでロールを選択します。
  6. 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを追加します。
  7. [保存] をクリックします。

Space を作成する

このタスクを実行するには、apigee.spaces.create 権限が必要です。この権限は、Apigee Organization Admin のロールに含まれています。

Apigee 組織に Space を作成するには、次のコマンドを使用します。

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces" \
    --data-raw '{
       "name":"SPACE_NAME"
    }'

ここで

  • ORG_NAME は実際の Apigee 組織の名前です。
  • SPACE_NAME は、作成する Space の名前です。

たとえば、次のコマンドは、acme 組織に red という名前の Space を作成します。

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    https://apigee.googleapis.com/v1/organizations/acme/spaces \
    --data-raw '{
       "name":"red",
    }'

Space のメンバーとロールを管理する

Space を作成したら、チームメンバーを Space に追加し、Space で API リソースを作成して管理するために必要な IAM ロールを割り当てることができます。Apigee ユーザーは、適切な権限が付与されているチームメンバーである Space でのみ、リソースを作成および管理できます。IAM アクセス制御は Space レベルで付与されるため、組織のメンバーは、Space に明示的に追加されない限り、Spaces API リソースにアクセスしたり、管理することはできません。Space リソースの管理に必要な IAM ロールと権限の概要については、必要なロールと権限をご覧ください。

組織のメンバーを Space に追加する

組織のメンバーが Space に追加されると、2 つの引数を取る Space の IAM ポリシー バインディングが作成されます。

  • Space のメンバーのリスト
  • メンバーに付与されたロール、またはメンバーに付与されたロールのリスト

このタスクを実行するには、apigee.spaces.setIamPolicy 権限が必要です。この権限は、Apigee Organization Admin のロールに含まれています。

組織のメンバーを Space に追加して IAM ロールを割り当てるには、次のコマンドを使用します。

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME:setIamPolicy" -d \
      '{
        "policy":{
          "bindings":[
            {
              "members": ["user:USER_EMAIL"],
              "role": "roles/IAM_ROLE"
            }
          ]
        }
      }'

ここで

  • ORG_NAME は、Apigee 組織の名前です。
  • SPACE_NAME は、Space の名前です。
  • USER_EMAIL は、Space に追加するユーザーのメールアドレスです。
  • IAM_ROLE は、Space メンバーとしてユーザーに割り当てる IAM ロールの名前です。

たとえば次のコマンドは、my-email@acme.com ユーザーを acme 組織の red Space に追加し、IAM ロール apigee.apiAdminV2 を付与します。

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red:setIamPolicy" -d \
      '{ 
        "policy":{
          "bindings":[
            {
              "members": ["user:my-email@acme.com"],
              "role": "roles/apigee.apiAdminV2"
            }
          ]
        }
      }'

Space のメンバーにロールと権限を追加するには、スペースの IAM ポリシーを更新します。Space の IAM ポリシーを更新するには、このセクションで説明する setIamPolicy メソッドと、修正した目的のロールのリストと権限のリストを使用します。これにより、Space の新しい IAM ポリシーが作成され、ロールと権限が適切に調整されます。

チームのメンバーを Space に追加する

メンバーのチームを Space に追加し、1 つ以上の IAM ロールを割り当てることもできます。メンバーのチームを Space に追加して IAM ロールを割り当てるには、次のコマンドを使用します。

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
   "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME:setIamPolicy" -d \
     '{
       "policy":{
         "bindings":[
           {
             "members": ["group:GROUP_EMAIL"],
             "role": "roles/IAM_ROLE"
           }
         ]
       }
     }'

ここで

  • ORG_NAME は、Apigee 組織の名前です。
  • SPACE_NAME は、Space の名前です。
  • GROUP_EMAIL は、Space に追加するグループのメールアドレスです。
  • IAM_ROLE は、Space メンバーとしてチームに割り当てる IAM ロールの名前です。

たとえば、次のコマンドは、acme-team@acme.com グループを acme 組織の red Space に追加し、apigee.apiAdminV2 ロールをグループに付与します。

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
   "https://apigee.googleapis.com/v1/organizations/acme/spaces/red:setIamPolicy" -d \
     '{ 
       "policy":{
         "bindings":[
           {
             "members": ["group:red-team@acme.com"],
             "role": "roles/apigee.apiAdminV2"
           }
         ]
       }
     }'

組織のメンバーを Space に追加するで説明したように、IAM ロール apigee.apiAdminV2 には、Space リソースの管理に必要な多くの権限が含まれています。ただし、特定のタスクを実行するためにユーザーに追加のロールを付与する必要がある場合があります。

Space の IAM ポリシーの割り当てを確認する

このタスクを実行するには、apigee.spaces.getIamPolicy 権限が必要です。この権限は、Apigee Organization Admin のロールに含まれています。

Space に IAM ポリシーが正しく設定されていることを確認するには、次のコマンドを使用します。

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME:getIamPolicy"

ここで

  • ORG_NAME は、Apigee 組織の名前です。
  • SPACE_NAME は、Space の名前です。

たとえば、acme 組織の red Space に IAM ポリシーが正しく設定されていることを確認するには、次のコマンドを使用します。

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red:getIamPolicy"

このコマンドは、Space の現在の IAM ポリシーを返します。出力は次のようになります。

{
  "version": "0",
  "bindings": [
    {
      "role": "roles/apigee.apiAdminV2",
      "members": [
        "group:red-team@acme.com"
      ]
    }
  ]
}

この例では、Space の IAM ポリシーにより、Space のメンバー(この場合は red-team@acme.com グループのメンバー)に apigee.apiAdminV2 ロールが付与されます。

red チームのメンバーのみが red Space へのアクセスを許可されています。つまり、red Space で API リソースを作成、管理できるのは red チームのメンバーだけです。team-blue@acme.com など、別の組織チームのメンバーが red Space で作成された API プロキシにアクセスしようとすると、次のエラーが表示されます。

{
  "error": {
    "code": 403,
    "message": "Permission denied on resource \"organizations\/acme\/apis\/proxy-1\" (or it may not exist).",
    "status": "PERMISSION_DENIED"
  }
}

Space からメンバーを削除する

Space からメンバーまたはメンバーのグループを削除するには、修正したメンバーまたはグループのリストを使用して Space の新しい IAM ポリシーを設定する必要があります。setIamPolicy メソッドを使用すると、スペースの新しい IAM ポリシーが作成され、ロールとメンバーが適切に調整されます。

たとえば、blue チームの Space のメンバーを更新するには、まず次のコマンドを使用して現在の IAM ポリシーを確認します。

curl -X GET -H "Authorization: Bearer $TOKEN" \
  "https://apigee.googleapis.com/v1/organizations/acme/spaces/blue:getIamPolicy"

このコマンドは、Space の現在の IAM ポリシーを返します。出力は次のようになります。

{
  "version": "0",
  "bindings": [
    {
      "role": "roles/apigee.apiAdminV2",
      "members": [
        "group: blue-team@acme.com", 
        "users: user-a@acme.com, user-b@acme.com, user-c@acme.com"
      ]
    }
  ]
}

Space から user-b@acme.com を削除するには、次のコマンドを使用します。

curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-type: application/json" \
  "https://apigee.googleapis.com/v1/organizations/acme/spaces/blue:setIamPolicy" -d \
    '{ 
      "policy":{
        "bindings":[
          {
            "members": [
              "group:blue-team@acme.com",
              "users: user-a@acme.com, user-c@acme.com"
            ]  
            "role": "roles/apigee.apiAdminV2"
          }
        ]
      }
    }'

Space の新しい IAM ポリシーには user-b@acme.com が含まれなくなります。

Space に含まれるグループからメンバーを削除するには、まずグループからメンバーを削除してから、setIamPolicy コマンドを再実行して、グループのメール エイリアスの正しいメンバーで Space の IAM ポリシーを更新します。

組織内のすべての Space を一覧表示する

このタスクを実行するには、apigee.spaces.list 権限が必要です。この権限は、Apigee Organization Admin のロールに含まれています。

Apigee 組織内のすべての Space を一覧表示するには、次のコマンドを使用します。

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces"

ここで、ORG_NAME は Apigee 組織の名前です。

たとえば、次のコマンドは acme 組織内のすべての Space を一覧表示します。

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces"

このコマンドからは次のような出力が戻ります。

  {
    "spaces": [
        {
            "name": "red",
            "createTime": "2024-08-02T23:26:03.001512Z",
            "updateTime": "2024-08-02T23:26:03.001512Z"
        },
        {
            "name": "blue",
            "createTime": "2024-08-02T00:34:54.159331Z",
            "updateTime": "2024-08-02T00:34:54.159331Z"
      }
      ]
  }

Space の詳細を取得する

このタスクを実行するには、apigee.spaces.get 権限が必要です。この権限は、Apigee Organization Admin のロールに含まれています。

次のコマンドを使用して、Space の詳細を取得します。

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME"

ここで

  • ORG_NAME は、Apigee 組織の名前です。
  • SPACE_NAME は、Space の名前です。

たとえば、次のコマンドは、acme 組織の red スペースの詳細を取得します。

curl -X GET -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red"

このコマンドからは次のような出力が戻ります。

  {
      "name": "red",
      "createTime": "2024-08-02T23:26:03.001512Z",
      "updateTime": "2024-08-02T23:26:03.001512Z"
  }

Space を更新する

このタスクを実行するには、apigee.spaces.update 権限が必要です。この権限は、Apigee Organization Admin のロールに含まれています。

Apigee 組織の Space を更新するには、次のコマンドを使用します。

curl -X PATCH -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME" \
      --data-raw '{
        "displayName":"DISPLAY_NAME"
      }'

ここで

  • ORG_NAME は、Apigee 組織の名前です。
  • SPACE_NAME は、Space の名前です。
  • DISPLAY_NAME は、Space の新しい表示名です。

たとえば、次のコマンドは、acme 組織の red Space の表示名を更新します。

curl -X PATCH -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red" -d \
    '{
      "displayName": "Red team space"
    }'

Space を削除する

このタスクを実行するには、apigee.spaces.delete 権限が必要です。この権限は、Apigee Organization Admin のロールに含まれています。Space を削除する前に、Space 内のすべてのリソースが削除されていることを確認してください。

Apigee 組織の Space を削除するには、次のコマンドを使用します。

curl -X DELETE -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/ORG_NAME/spaces/SPACE_NAME"

たとえば、次のコマンドは acme 組織の red Space を削除します。

curl -X DELETE -H "Authorization: Bearer $TOKEN" \
    "https://apigee.googleapis.com/v1/organizations/acme/spaces/red"

アクティブなリソースがまだ関連付けられている Space を削除しようとすると、次のエラーが表示されます。

{
  "error": {
    "code": 400,
    "message": "Space \"red\" has resources associated with it. Please delete the resources before deleting the space.",
    "status": "FAILED_PRECONDITION"
  }
}

このエラーを解決するには、Space を削除する前に Space 内のリソースを削除または移動してください。

次のステップ