One change
cmek-azure-key-vault
manage-claude/cmek-azure-key-vault
Nearest release: v2.1.247, published under an hour before this site recorded the change. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
manage-claude/cmek-azure-key-vault Changed · +358 / -30 lines
from line 147
<Step title="Register the key with Anthropic"> Create an external key configuration through the Admin API. - ```bash - curl -sS https://api.anthropic.com/v1/organizations/external_keys \ - -H "x-api-key: <anthropic-admin-api-key>" \ - -H "anthropic-version: 2023-06-01" \ - -H "content-type: application/json" \ - -d '{ - "display_name": "<friendly-name>", - "geo": "us", - "provider_config": { - "type": "azure", - "vault_uri": "https://<your-vault-name>.vault.azure.net/", - "key_name": "<your-key-name>", - "tenant_id": "<your-tenant-id>" + <CodeGroup> + ```bash cURL + curl -sS "https://api.anthropic.com/v1/organizations/external_keys" \ + -H "x-api-key: $ANTHROPIC_API_KEY" \ + -H "anthropic-version: 2023-06-01" \ + -H "content-type: application/json" \ + -d '{ + "display_name": "<friendly-name>", + "geo": "us", + "provider_config": { + "type": "azure", + "vault_uri": "https://<your-vault-name>.vault.azure.net/", + "key_name": "<your-key-name>", + "tenant_id": "<your-tenant-id>" + } + }' + ``` + + ```bash CLI + ant beta:organization:external-keys create <<'YAML' + display_name: "<friendly-name>" + geo: us + provider_config: + type: azure + vault_uri: "https://<your-vault-name>.vault.azure.net/" + key_name: "<your-key-name>" + tenant_id: "<your-tenant-id>" + YAML + ``` + + ```python Python + client = anthropic.Anthropic() + + external_key = client.beta.organization.external_keys.create( + display_name="<friendly-name>", + geo="us", + provider_config={ + "type": "azure", + "vault_uri": "https://<your-vault-name>.vault.azure.net/", + "key_name": "<your-key-name>", + "tenant_id": "<your-tenant-id>", + }, + ) + + print(f"id: {external_key.id}") + print(f"display_name: {external_key.display_name}") + ``` + + ```typescript TypeScript + const client = new Anthropic(); + + const externalKey = await client.beta.organization.externalKeys.create({ + display_name: "<friendly-name>", + geo: "us", + provider_config: { + type: "azure", + vault_uri: "https://<your-vault-name>.vault.azure.net/", + key_name: "<your-key-name>", + tenant_id: "<your-tenant-id>" } - }' - ``` + }); + console.log(`id: ${externalKey.id}`); + console.log(`display_name: ${externalKey.display_name}`); + ``` + + ```csharp C# + using Anthropic.Models.Beta.Organization.ExternalKeys; + + AnthropicClient client = new(); + + var externalKey = await client.Beta.Organization.ExternalKeys.Create(new() + { + DisplayName = "<friendly-name>", + Geo = Geo.Us, + ProviderConfig = new BetaAzureExternalKeyConfigParam + { + VaultUri = "https://<your-vault-name>.vault.azure.net/", + KeyName = "<your-key-name>", + TenantID = "<your-tenant-id>" + } + }); + + Console.WriteLine($"id: {externalKey.ID}"); + Console.WriteLine($"display_name: {externalKey.DisplayName}"); + ``` + + ```go Go + client := anthropic.NewClient() + + externalKey, err := client.Beta.Organization.ExternalKeys.New(context.Background(), anthropic.BetaOrganizationExternalKeyNewParams{ + DisplayName: anthropic.String("<friendly-name>"), + Geo: anthropic.BetaOrganizationExternalKeyNewParamsGeoUs, + ProviderConfig: anthropic.BetaOrganizationExternalKeyNewParamsProviderConfigUnion{ + OfAzure: &anthropic.BetaAzureExternalKeyConfigParam{ + VaultURI: "https://<your-vault-name>.vault.azure.net/", + KeyName: "<your-key-name>", + TenantID: "<your-tenant-id>", + }, + }, + }) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("id: %s\n", externalKey.ID) + fmt.Printf("display_name: %s\n", externalKey.DisplayName) + ``` + + ```java Java + import com.anthropic.models.beta.organization.externalkeys.BetaAzureExternalKeyConfigParam; + import com.anthropic.models.beta.organization.externalkeys.ExternalKeyCreateParams; + + void main() { + AnthropicClient client = AnthropicOkHttpClient.fromEnv(); + + var params = ExternalKeyCreateParams.builder() + .displayName("<friendly-name>") + .geo(ExternalKeyCreateParams.Geo.US) + .providerConfig(BetaAzureExternalKeyConfigParam.builder() + .vaultUri("https://<your-vault-name>.vault.azure.net/") + .keyName("<your-key-name>") + .tenantId("<your-tenant-id>") + .build()) + .build(); + var externalKey = client.beta().organization().externalKeys().create(params); + + IO.println("id: " + externalKey.id()); + IO.println("display_name: " + externalKey.displayName().orElseThrow()); + } + ``` + + ```php PHP + use Anthropic\Beta\Organization\ExternalKeys\ExternalKeyCreateParams\Geo; + // ... + + $client = new Client(); + + $externalKey = $client->beta->organization->externalKeys->create( + displayName: '<friendly-name>', + geo: Geo::US, + providerConfig: [ + 'type' => 'azure', + 'vaultURI' => 'https://<your-vault-name>.vault.azure.net/', + 'keyName' => '<your-key-name>', + 'tenantID' => '<your-tenant-id>', + ], + ); + + echo "id: {$externalKey->id}\n"; + echo "display_name: {$externalKey->displayName}\n"; + ``` + + ```ruby Ruby + client = Anthropic::Client.new + + external_key = client.beta.organization.external_keys.create( + display_name: "<friendly-name>", + geo: :us, + provider_config: { + type: :azure, + vault_uri: "https://<your-vault-name>.vault.azure.net/", + key_name: "<your-key-name>", + tenant_id: "<your-tenant-id>" + } + ) + + puts "id: #{external_key.id}" + puts "display_name: #{external_key.display_name}" + ``` + </CodeGroup> + The response contains the external key ID: ```json
from line 333
<Step title="Validate the key"> Trigger an encrypt and decrypt round-trip against your key. This confirms that Anthropic can authenticate to your tenant and perform wrap and unwrap operations. - ```bash - curl -sS -X POST https://api.anthropic.com/v1/organizations/external_keys/ekey_<id>/validate \ - -H "x-api-key: <anthropic-admin-api-key>" \ - -H "anthropic-version: 2023-06-01" \ - -H "content-type: application/json" -d '{}' - ``` + <CodeGroup> + ```bash cURL + curl -sS -X POST "https://api.anthropic.com/v1/organizations/external_keys/ekey_<id>/validate" \ + -H "x-api-key: $ANTHROPIC_API_KEY" \ + -H "anthropic-version: 2023-06-01" + ``` + ```bash CLI + ant beta:organization:external-keys validate --external-key-id "ekey_<id>" + ``` + + ```python Python + client = anthropic.Anthropic() + + validation = client.beta.organization.external_keys.validate("ekey_<id>") + + print(f"status: {validation.status}") + print(f"error: {validation.error}") + ``` + + ```typescript TypeScript + const client = new Anthropic(); + + const validation = await client.beta.organization.externalKeys.validate("ekey_<id>"); + + console.log(`status: ${validation.status}`); + console.log(`error: ${validation.error}`); + ``` + + ```csharp C# + AnthropicClient client = new(); + + var validation = await client.Beta.Organization.ExternalKeys.Validate("ekey_<id>"); + + Console.WriteLine($"status: {validation.Status.Raw()}"); + Console.WriteLine($"error: {validation.Error}"); + ``` + + ```go Go + client := anthropic.NewClient() + + validation, err := client.Beta.Organization.ExternalKeys.Validate(context.Background(), "ekey_<id>") + if err != nil { + log.Fatal(err) + } + + fmt.Printf("status: %s\n", validation.Status) + fmt.Printf("error: %s\n", validation.Error) + ``` + + ```java Java + AnthropicClient client = AnthropicOkHttpClient.fromEnv(); + + var validation = client.beta().organization().externalKeys().validate("ekey_<id>"); + + IO.println("status: " + validation.status().asString()); + IO.println("error: " + validation.error().orElse("")); + ``` + + ```php PHP + $client = new Client(); + + $validation = $client->beta->organization->externalKeys->validate( + externalKeyID: 'ekey_<id>', + ); + + echo "status: {$validation->status}\n"; + echo "error: {$validation->error}\n"; + ``` + + ```ruby Ruby + client = Anthropic::Client.new + + validation = client.beta.organization.external_keys.validate("ekey_<id>") + + puts "status: #{validation.status}" + puts "error: #{validation.error}" + ``` + </CodeGroup> + A successful response looks like this: ```json
from line 429
<Step title="Attach the key to a workspace"> Once the key is validated, attach it to a new workspace before you send any requests to that workspace. For a workspace that already receives requests, the key can take [up to a day to take effect](https://platform.claude.com/docs/en/manage-claude/cmek#how-it-works). - ```bash - curl -sS -X POST https://api.anthropic.com/v1/organizations/workspaces/<workspace-id> \ - -H "x-api-key: <anthropic-admin-api-key>" \ - -H "anthropic-version: 2023-06-01" \ - -H "content-type: application/json" \ - -d '{ - "external_key_id": "ekey_<id>" - }' - ``` + <CodeGroup> + ```bash cURL + curl -sS -X POST "https://api.anthropic.com/v1/organizations/workspaces/<workspace-id>" \ + -H "x-api-key: $ANTHROPIC_API_KEY" \ + -H "anthropic-version: 2023-06-01" \ + -H "content-type: application/json" \ + -d '{ + "external_key_id": "ekey_<id>" + }' + ``` + + ```bash CLI + ant beta:organization:workspaces update \ + --workspace-id "<workspace-id>" \ + --external-key-id "ekey_<id>" + ``` + + ```python Python + client = anthropic.Anthropic() + + workspace = client.beta.organization.workspaces.update( + "<workspace-id>", external_key_id="ekey_<id>" + ) + + print(f"id: {workspace.id}") + print(f"external_key_id: {workspace.external_key_id}") + ``` + + ```typescript TypeScript + const client = new Anthropic(); + + const workspace = await client.beta.organization.workspaces.update("<workspace-id>", { + external_key_id: "ekey_<id>" + }); + + console.log(`id: ${workspace.id}`); + console.log(`external_key_id: ${workspace.external_key_id}`); + ``` + + ```csharp C# + AnthropicClient client = new(); + + var workspace = await client.Beta.Organization.Workspaces.Update("<workspace-id>", new() + { + ExternalKeyID = "ekey_<id>" + }); + + Console.WriteLine($"id: {workspace.ID}"); + Console.WriteLine($"external_key_id: {workspace.ExternalKeyID}"); + ``` + + ```go Go + client := anthropic.NewClient() + + workspace, err := client.Beta.Organization.Workspaces.Update( + context.Background(), + "<workspace-id>", + anthropic.BetaOrganizationWorkspaceUpdateParams{ + ExternalKeyID: anthropic.String("ekey_<id>"), + }, + ) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("id: %s\n", workspace.ID) + fmt.Printf("external_key_id: %s\n", workspace.ExternalKeyID) + ``` + + ```java Java + import com.anthropic.models.beta.organization.workspaces.WorkspaceUpdateParams; + + void main() { + AnthropicClient client = AnthropicOkHttpClient.fromEnv(); + + var params = WorkspaceUpdateParams.builder() + .externalKeyId("ekey_<id>") + .build(); + var workspace = client.beta().organization().workspaces().update("<workspace-id>", params); + + IO.println("id: " + workspace.id()); + IO.println("external_key_id: " + workspace.externalKeyId().orElseThrow()); + } + ``` + + ```php PHP + $client = new Client(); + + $workspace = $client->beta->organization->workspaces->update( + workspaceID: '<workspace-id>', + externalKeyID: 'ekey_<id>', + ); + + echo "id: {$workspace->id}\n"; + echo "external_key_id: {$workspace->externalKeyID}\n"; + ``` + + ```ruby Ruby + client = Anthropic::Client.new + + workspace = client.beta.organization.workspaces.update( + "<workspace-id>", + external_key_id: "ekey_<id>" + ) + + puts "id: #{workspace.id}" + puts "external_key_id: #{workspace.external_key_id}" + ``` + </CodeGroup> </Step> </Steps> </Tab>