aac-cli 0.2.1__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {aac_cli-0.2.1/aac_cli.egg-info → aac_cli-0.2.3}/PKG-INFO +34 -10
- {aac_cli-0.2.1 → aac_cli-0.2.3}/README.md +33 -9
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/__init__.py +1 -1
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/cli.py +58 -4
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/config_render.py +2 -1
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/init_cli.py +3 -2
- {aac_cli-0.2.1 → aac_cli-0.2.3/aac_cli.egg-info}/PKG-INFO +34 -10
- {aac_cli-0.2.1 → aac_cli-0.2.3}/pyproject.toml +1 -1
- {aac_cli-0.2.1 → aac_cli-0.2.3}/LICENSE +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/MANIFEST.in +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/__main__.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/admin_key_pem.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/agent_cli.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/agent_config.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/agent_health.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/agent_layout.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/agent_record.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/api_key_rotation_state.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/config.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/dev_material.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/idp_recovery.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/material_cases.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/profiles.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/reference.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/registration_state.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/secure_files.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/sso_login.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli/supplied_material.py +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli.egg-info/SOURCES.txt +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli.egg-info/dependency_links.txt +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli.egg-info/entry_points.txt +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli.egg-info/requires.txt +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/aac_cli.egg-info/top_level.txt +0 -0
- {aac_cli-0.2.1 → aac_cli-0.2.3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aac-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: The aac platform CLI — headless operator interface to the AAC control plane (tenant registration, chain audit).
|
|
5
5
|
Author: Agent Authority Cloud Project
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -24,7 +24,7 @@ which tenant they belong to and what they were authorised to do. A
|
|
|
24
24
|
runs beside an AAC sidecar that signs outgoing requests and verifies
|
|
25
25
|
incoming ones against public trust material the tenant publishes.
|
|
26
26
|
|
|
27
|
-
New to AAC? [What AAC is for](https://cascadeauth.github.io/aac-
|
|
27
|
+
New to AAC? [What AAC is for](https://cascadeauth.github.io/aac-starter-guide/#what-aac-is-for)
|
|
28
28
|
explains what delegated authority between agents buys you, and what it does not.
|
|
29
29
|
|
|
30
30
|
The `aac` command is how a tenant's operator does everything that is not
|
|
@@ -242,9 +242,24 @@ peer identities are known. No self destination is added.
|
|
|
242
242
|
|
|
243
243
|
**Chain-start boundary:** restrict `/v1/agent/delegations` and
|
|
244
244
|
`/v1/agent/mint-root` to the authorized originating application at the
|
|
245
|
-
network/ingress boundary.
|
|
246
|
-
|
|
247
|
-
|
|
245
|
+
network/ingress boundary. Sidecar **v0.4.0 and later** also require the existing
|
|
246
|
+
pair's AAC1-HMAC-SHA256 signature over the exact alias and raw request body.
|
|
247
|
+
Older releases do not authenticate these callers, so sharing a private network
|
|
248
|
+
with peers is insufficient. An authorized separate originator may hold the pair
|
|
249
|
+
secret only inside the same trusted tenant-application boundary; it gains
|
|
250
|
+
callback-signing capability too. Never share secrets across pairs or tenants.
|
|
251
|
+
Pairing freshness is not idempotent chain creation; do not automatically retry
|
|
252
|
+
an uncertain mint. Development certificates do not require `dev_mode`.
|
|
253
|
+
|
|
254
|
+
Applications using v0.4.0 can supply per-request `obligations` for T1. Equal
|
|
255
|
+
configured/request values combine once; differing values refuse rather than
|
|
256
|
+
override or intersect. Put dynamic limits in the request instead of also
|
|
257
|
+
configuring a different class value. Native request `valid_until` is reserved;
|
|
258
|
+
remove it and use class `valid_for`. For signed correlation, normally supply a
|
|
259
|
+
`task_ref` obligation per request: top-level `task_ref` alone is correlation
|
|
260
|
+
metadata, while a static class predicate deliberately shares one convergence
|
|
261
|
+
key across that class's chains. Omitted/null metadata inherits a configured or
|
|
262
|
+
obligation predicate; an explicit conflicting value refuses before minting.
|
|
248
263
|
|
|
249
264
|
The following is the complete input schema. Unknown fields, duplicate mapping
|
|
250
265
|
keys, YAML aliases/merge keys, object tags and files over 64 KiB are refused.
|
|
@@ -449,7 +464,7 @@ name and `<tenant-id>` the tenant id AAC allocated.
|
|
|
449
464
|
For what each of these proves, who else ever gets a copy, what never leaves you
|
|
450
465
|
and how the pieces fit together — including when your own certificate authority
|
|
451
466
|
signs instead of this tool — see
|
|
452
|
-
[Keys and certificates](https://cascadeauth.github.io/aac-
|
|
467
|
+
[Keys and certificates](https://cascadeauth.github.io/aac-starter-guide/keys-and-certificates.html).
|
|
453
468
|
|
|
454
469
|
<!-- inventory-table:start -->
|
|
455
470
|
| No. | Material | Where | Used for | Lifetime | Back up? |
|
|
@@ -891,10 +906,19 @@ aac tenant reissue-api-key --profile prod
|
|
|
891
906
|
|
|
892
907
|
### Domains and workloads
|
|
893
908
|
|
|
894
|
-
Every tenant gets
|
|
895
|
-
the
|
|
896
|
-
|
|
897
|
-
|
|
909
|
+
Every tenant gets an AAC-assigned trust domain: the tenant id plus a suffix
|
|
910
|
+
the control plane selects for its environment,
|
|
911
|
+
`<tenant_id>.tenants.stage.cascadeauth.dev` on stage and
|
|
912
|
+
`<tenant_id>.tenants.cascadeauth.com` on production. No DNS record or proof
|
|
913
|
+
of ownership is needed; the first call allocates the name permanently and
|
|
914
|
+
every later call returns the same one, so use the name the command returns
|
|
915
|
+
rather than building it yourself. Registration saves it in the profile as
|
|
916
|
+
`hosted_trust_domain`. Signing in with `aac sso login` does not write it:
|
|
917
|
+
`aac tenant assign-hosted-domain` requests the same allocation and saves it
|
|
918
|
+
into the profile bound to that tenant, as `aac init` does during setup. To
|
|
919
|
+
use a custom domain you own as a trust domain instead, prove control of it
|
|
920
|
+
with a DNS TXT record, then bind it; a domain you own is recorded on the
|
|
921
|
+
server and never written to the profile:
|
|
898
922
|
|
|
899
923
|
```bash
|
|
900
924
|
aac tenant issue-domain-challenge --profile prod --domain example.com
|
|
@@ -7,7 +7,7 @@ which tenant they belong to and what they were authorised to do. A
|
|
|
7
7
|
runs beside an AAC sidecar that signs outgoing requests and verifies
|
|
8
8
|
incoming ones against public trust material the tenant publishes.
|
|
9
9
|
|
|
10
|
-
New to AAC? [What AAC is for](https://cascadeauth.github.io/aac-
|
|
10
|
+
New to AAC? [What AAC is for](https://cascadeauth.github.io/aac-starter-guide/#what-aac-is-for)
|
|
11
11
|
explains what delegated authority between agents buys you, and what it does not.
|
|
12
12
|
|
|
13
13
|
The `aac` command is how a tenant's operator does everything that is not
|
|
@@ -225,9 +225,24 @@ peer identities are known. No self destination is added.
|
|
|
225
225
|
|
|
226
226
|
**Chain-start boundary:** restrict `/v1/agent/delegations` and
|
|
227
227
|
`/v1/agent/mint-root` to the authorized originating application at the
|
|
228
|
-
network/ingress boundary.
|
|
229
|
-
|
|
230
|
-
|
|
228
|
+
network/ingress boundary. Sidecar **v0.4.0 and later** also require the existing
|
|
229
|
+
pair's AAC1-HMAC-SHA256 signature over the exact alias and raw request body.
|
|
230
|
+
Older releases do not authenticate these callers, so sharing a private network
|
|
231
|
+
with peers is insufficient. An authorized separate originator may hold the pair
|
|
232
|
+
secret only inside the same trusted tenant-application boundary; it gains
|
|
233
|
+
callback-signing capability too. Never share secrets across pairs or tenants.
|
|
234
|
+
Pairing freshness is not idempotent chain creation; do not automatically retry
|
|
235
|
+
an uncertain mint. Development certificates do not require `dev_mode`.
|
|
236
|
+
|
|
237
|
+
Applications using v0.4.0 can supply per-request `obligations` for T1. Equal
|
|
238
|
+
configured/request values combine once; differing values refuse rather than
|
|
239
|
+
override or intersect. Put dynamic limits in the request instead of also
|
|
240
|
+
configuring a different class value. Native request `valid_until` is reserved;
|
|
241
|
+
remove it and use class `valid_for`. For signed correlation, normally supply a
|
|
242
|
+
`task_ref` obligation per request: top-level `task_ref` alone is correlation
|
|
243
|
+
metadata, while a static class predicate deliberately shares one convergence
|
|
244
|
+
key across that class's chains. Omitted/null metadata inherits a configured or
|
|
245
|
+
obligation predicate; an explicit conflicting value refuses before minting.
|
|
231
246
|
|
|
232
247
|
The following is the complete input schema. Unknown fields, duplicate mapping
|
|
233
248
|
keys, YAML aliases/merge keys, object tags and files over 64 KiB are refused.
|
|
@@ -432,7 +447,7 @@ name and `<tenant-id>` the tenant id AAC allocated.
|
|
|
432
447
|
For what each of these proves, who else ever gets a copy, what never leaves you
|
|
433
448
|
and how the pieces fit together — including when your own certificate authority
|
|
434
449
|
signs instead of this tool — see
|
|
435
|
-
[Keys and certificates](https://cascadeauth.github.io/aac-
|
|
450
|
+
[Keys and certificates](https://cascadeauth.github.io/aac-starter-guide/keys-and-certificates.html).
|
|
436
451
|
|
|
437
452
|
<!-- inventory-table:start -->
|
|
438
453
|
| No. | Material | Where | Used for | Lifetime | Back up? |
|
|
@@ -874,10 +889,19 @@ aac tenant reissue-api-key --profile prod
|
|
|
874
889
|
|
|
875
890
|
### Domains and workloads
|
|
876
891
|
|
|
877
|
-
Every tenant gets
|
|
878
|
-
the
|
|
879
|
-
|
|
880
|
-
|
|
892
|
+
Every tenant gets an AAC-assigned trust domain: the tenant id plus a suffix
|
|
893
|
+
the control plane selects for its environment,
|
|
894
|
+
`<tenant_id>.tenants.stage.cascadeauth.dev` on stage and
|
|
895
|
+
`<tenant_id>.tenants.cascadeauth.com` on production. No DNS record or proof
|
|
896
|
+
of ownership is needed; the first call allocates the name permanently and
|
|
897
|
+
every later call returns the same one, so use the name the command returns
|
|
898
|
+
rather than building it yourself. Registration saves it in the profile as
|
|
899
|
+
`hosted_trust_domain`. Signing in with `aac sso login` does not write it:
|
|
900
|
+
`aac tenant assign-hosted-domain` requests the same allocation and saves it
|
|
901
|
+
into the profile bound to that tenant, as `aac init` does during setup. To
|
|
902
|
+
use a custom domain you own as a trust domain instead, prove control of it
|
|
903
|
+
with a DNS TXT record, then bind it; a domain you own is recorded on the
|
|
904
|
+
server and never written to the profile:
|
|
881
905
|
|
|
882
906
|
```bash
|
|
883
907
|
aac tenant issue-domain-challenge --profile prod --domain example.com
|
|
@@ -431,7 +431,8 @@ def _print_api_key_verification_guidance(
|
|
|
431
431
|
"""
|
|
432
432
|
verification_url = f"{data_plane_url}/v1/trust-anchors"
|
|
433
433
|
print(
|
|
434
|
-
"\nVERIFY THIS API KEY NOW
|
|
434
|
+
"\nVERIFY THIS API KEY NOW: copy/paste and run ONE of the two commands below "
|
|
435
|
+
"(API-key authentication only):\n"
|
|
435
436
|
f" aac trust-anchor list --tenant-id {tenant_id} "
|
|
436
437
|
f"--profile {shlex.quote(profile)}\n\n"
|
|
437
438
|
" { printf 'header = \"Authorization: Bearer '; \\\n"
|
|
@@ -1493,7 +1494,7 @@ def _print_staged_api_key_guidance(
|
|
|
1493
1494
|
verification_url = f"{data_plane_url}/v1/trust-anchors"
|
|
1494
1495
|
print(
|
|
1495
1496
|
"\nSTAGED MIGRATION (the current profile credential is unchanged):\n"
|
|
1496
|
-
f" 1. Verify the staged key from {staged_path}
|
|
1497
|
+
f" 1. Verify the staged key from {staged_path}: copy/paste and run\n"
|
|
1497
1498
|
" { printf 'header = \"Authorization: Bearer '; \\\n"
|
|
1498
1499
|
f" tr -d '\\n' < {shlex.quote(str(staged_path))}; \\\n"
|
|
1499
1500
|
" printf '\"\\n'; } | \\\n"
|
|
@@ -4973,10 +4974,63 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
4973
4974
|
for verb, reactivation in (("assign-hosted-domain", False), ("reactivate-hosted-domain", True)):
|
|
4974
4975
|
hosted = tenant_verbs.add_parser(
|
|
4975
4976
|
verb,
|
|
4977
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
4976
4978
|
help=(
|
|
4977
|
-
"Reactivate the
|
|
4979
|
+
"Reactivate the tenant's AAC-assigned trust domain after a revocation; "
|
|
4980
|
+
"the name does not change."
|
|
4978
4981
|
if reactivation
|
|
4979
|
-
else "
|
|
4982
|
+
else "Request the AAC-assigned trust domain for your tenant and save it "
|
|
4983
|
+
"in the bound profile; repeated calls reuse it."
|
|
4984
|
+
),
|
|
4985
|
+
epilog=(
|
|
4986
|
+
(
|
|
4987
|
+
"What this command does\n"
|
|
4988
|
+
"\n"
|
|
4989
|
+
" Reactivates your tenant's existing AAC-assigned trust domain after a\n"
|
|
4990
|
+
" revocation, when self-service reactivation is allowed or under the\n"
|
|
4991
|
+
" platform ceremony. On an active binding it changes nothing. It never\n"
|
|
4992
|
+
" allocates a new name, and it is not for a domain you own. The name is\n"
|
|
4993
|
+
" your tenant id plus a suffix the control plane selects for its\n"
|
|
4994
|
+
" environment. Use the name the command returns rather than building\n"
|
|
4995
|
+
" it yourself:\n"
|
|
4996
|
+
if reactivation
|
|
4997
|
+
else "What this command does\n"
|
|
4998
|
+
"\n"
|
|
4999
|
+
" Requests the AAC-assigned trust domain for your tenant. The name is your\n"
|
|
5000
|
+
" tenant id plus a suffix the control plane selects for its environment;\n"
|
|
5001
|
+
" no DNS record or proof of ownership is needed. The first call allocates\n"
|
|
5002
|
+
" the name permanently and every later call returns the same one. Use the\n"
|
|
5003
|
+
" name the command returns rather than building it yourself:\n"
|
|
5004
|
+
)
|
|
5005
|
+
+ "\n"
|
|
5006
|
+
" on stage <tenant_id>.tenants.stage.cascadeauth.dev\n"
|
|
5007
|
+
" on production <tenant_id>.tenants.cascadeauth.com\n"
|
|
5008
|
+
"\n"
|
|
5009
|
+
"Where the domain is saved\n"
|
|
5010
|
+
"\n"
|
|
5011
|
+
" On success it is written into the selected profile as hosted_trust_domain,\n"
|
|
5012
|
+
" if that profile is bound to this tenant; a profile bound to another tenant\n"
|
|
5013
|
+
" is left unchanged. Signing in with `aac sso login` does not write it, so a\n"
|
|
5014
|
+
+ (
|
|
5015
|
+
" profile bound that way has no such line until this command,\n"
|
|
5016
|
+
" `aac tenant assign-hosted-domain` or `aac init` runs. Replace main with\n"
|
|
5017
|
+
" your profile name:\n"
|
|
5018
|
+
if reactivation
|
|
5019
|
+
else " profile bound that way has no such line until this command or\n"
|
|
5020
|
+
" `aac init` runs. Replace main with your profile name:\n"
|
|
5021
|
+
)
|
|
5022
|
+
+ "\n"
|
|
5023
|
+
f" aac tenant {verb} --profile main\n"
|
|
5024
|
+
" aac profile show main\n"
|
|
5025
|
+
"\n"
|
|
5026
|
+
"To use a custom domain you own instead\n"
|
|
5027
|
+
"\n"
|
|
5028
|
+
" Prove control of it with a DNS TXT record, then bind it. A domain you\n"
|
|
5029
|
+
" own is recorded on the server and never written to the profile:\n"
|
|
5030
|
+
"\n"
|
|
5031
|
+
" aac tenant issue-domain-challenge --profile main --domain example.com\n"
|
|
5032
|
+
" aac tenant verify-domain --profile main --domain example.com\n"
|
|
5033
|
+
" aac tenant bind-trust-domain --profile main --trust-domain example.com\n"
|
|
4980
5034
|
),
|
|
4981
5035
|
)
|
|
4982
5036
|
_add_common_flags(hosted)
|
|
@@ -71,7 +71,8 @@ def generated_header(
|
|
|
71
71
|
+ "# Apply changes with --agent-config PATH; refresh and renewal use saved values.\n"
|
|
72
72
|
+ "# Restart the sidecar after applying configuration or renewing certificates.\n"
|
|
73
73
|
+ "# Restrict /v1/agent/delegations and /v1/agent/mint-root to the authorized\n"
|
|
74
|
-
+ "# originating application
|
|
74
|
+
+ "# originating application. Sidecar v0.4.0+ also requires pairing signatures;\n"
|
|
75
|
+
+ "# older releases rely on the network/ingress restriction.\n"
|
|
75
76
|
)
|
|
76
77
|
|
|
77
78
|
|
|
@@ -1861,8 +1861,9 @@ def add_init_parser(nouns: argparse._SubParsersAction) -> None:
|
|
|
1861
1861
|
epilog=(
|
|
1862
1862
|
"Pass --agent-config to explicitly apply tenant configuration; omit it on a "
|
|
1863
1863
|
"rerun to refresh the last applied values. Restart the sidecar after applying. "
|
|
1864
|
-
"
|
|
1865
|
-
"and /v1/agent/mint-root
|
|
1864
|
+
"Sidecar v0.4.0 and later require pairing signatures on /v1/agent/delegations "
|
|
1865
|
+
"and /v1/agent/mint-root. On older releases, restrict these routes to your "
|
|
1866
|
+
"authorized originating application at ingress."
|
|
1866
1867
|
),
|
|
1867
1868
|
)
|
|
1868
1869
|
init.add_argument(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aac-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: The aac platform CLI — headless operator interface to the AAC control plane (tenant registration, chain audit).
|
|
5
5
|
Author: Agent Authority Cloud Project
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -24,7 +24,7 @@ which tenant they belong to and what they were authorised to do. A
|
|
|
24
24
|
runs beside an AAC sidecar that signs outgoing requests and verifies
|
|
25
25
|
incoming ones against public trust material the tenant publishes.
|
|
26
26
|
|
|
27
|
-
New to AAC? [What AAC is for](https://cascadeauth.github.io/aac-
|
|
27
|
+
New to AAC? [What AAC is for](https://cascadeauth.github.io/aac-starter-guide/#what-aac-is-for)
|
|
28
28
|
explains what delegated authority between agents buys you, and what it does not.
|
|
29
29
|
|
|
30
30
|
The `aac` command is how a tenant's operator does everything that is not
|
|
@@ -242,9 +242,24 @@ peer identities are known. No self destination is added.
|
|
|
242
242
|
|
|
243
243
|
**Chain-start boundary:** restrict `/v1/agent/delegations` and
|
|
244
244
|
`/v1/agent/mint-root` to the authorized originating application at the
|
|
245
|
-
network/ingress boundary.
|
|
246
|
-
|
|
247
|
-
|
|
245
|
+
network/ingress boundary. Sidecar **v0.4.0 and later** also require the existing
|
|
246
|
+
pair's AAC1-HMAC-SHA256 signature over the exact alias and raw request body.
|
|
247
|
+
Older releases do not authenticate these callers, so sharing a private network
|
|
248
|
+
with peers is insufficient. An authorized separate originator may hold the pair
|
|
249
|
+
secret only inside the same trusted tenant-application boundary; it gains
|
|
250
|
+
callback-signing capability too. Never share secrets across pairs or tenants.
|
|
251
|
+
Pairing freshness is not idempotent chain creation; do not automatically retry
|
|
252
|
+
an uncertain mint. Development certificates do not require `dev_mode`.
|
|
253
|
+
|
|
254
|
+
Applications using v0.4.0 can supply per-request `obligations` for T1. Equal
|
|
255
|
+
configured/request values combine once; differing values refuse rather than
|
|
256
|
+
override or intersect. Put dynamic limits in the request instead of also
|
|
257
|
+
configuring a different class value. Native request `valid_until` is reserved;
|
|
258
|
+
remove it and use class `valid_for`. For signed correlation, normally supply a
|
|
259
|
+
`task_ref` obligation per request: top-level `task_ref` alone is correlation
|
|
260
|
+
metadata, while a static class predicate deliberately shares one convergence
|
|
261
|
+
key across that class's chains. Omitted/null metadata inherits a configured or
|
|
262
|
+
obligation predicate; an explicit conflicting value refuses before minting.
|
|
248
263
|
|
|
249
264
|
The following is the complete input schema. Unknown fields, duplicate mapping
|
|
250
265
|
keys, YAML aliases/merge keys, object tags and files over 64 KiB are refused.
|
|
@@ -449,7 +464,7 @@ name and `<tenant-id>` the tenant id AAC allocated.
|
|
|
449
464
|
For what each of these proves, who else ever gets a copy, what never leaves you
|
|
450
465
|
and how the pieces fit together — including when your own certificate authority
|
|
451
466
|
signs instead of this tool — see
|
|
452
|
-
[Keys and certificates](https://cascadeauth.github.io/aac-
|
|
467
|
+
[Keys and certificates](https://cascadeauth.github.io/aac-starter-guide/keys-and-certificates.html).
|
|
453
468
|
|
|
454
469
|
<!-- inventory-table:start -->
|
|
455
470
|
| No. | Material | Where | Used for | Lifetime | Back up? |
|
|
@@ -891,10 +906,19 @@ aac tenant reissue-api-key --profile prod
|
|
|
891
906
|
|
|
892
907
|
### Domains and workloads
|
|
893
908
|
|
|
894
|
-
Every tenant gets
|
|
895
|
-
the
|
|
896
|
-
|
|
897
|
-
|
|
909
|
+
Every tenant gets an AAC-assigned trust domain: the tenant id plus a suffix
|
|
910
|
+
the control plane selects for its environment,
|
|
911
|
+
`<tenant_id>.tenants.stage.cascadeauth.dev` on stage and
|
|
912
|
+
`<tenant_id>.tenants.cascadeauth.com` on production. No DNS record or proof
|
|
913
|
+
of ownership is needed; the first call allocates the name permanently and
|
|
914
|
+
every later call returns the same one, so use the name the command returns
|
|
915
|
+
rather than building it yourself. Registration saves it in the profile as
|
|
916
|
+
`hosted_trust_domain`. Signing in with `aac sso login` does not write it:
|
|
917
|
+
`aac tenant assign-hosted-domain` requests the same allocation and saves it
|
|
918
|
+
into the profile bound to that tenant, as `aac init` does during setup. To
|
|
919
|
+
use a custom domain you own as a trust domain instead, prove control of it
|
|
920
|
+
with a DNS TXT record, then bind it; a domain you own is recorded on the
|
|
921
|
+
server and never written to the profile:
|
|
898
922
|
|
|
899
923
|
```bash
|
|
900
924
|
aac tenant issue-domain-challenge --profile prod --domain example.com
|
|
@@ -32,7 +32,7 @@ build-backend = "setuptools.build_meta"
|
|
|
32
32
|
|
|
33
33
|
[project]
|
|
34
34
|
name = "aac-cli"
|
|
35
|
-
version = "0.2.
|
|
35
|
+
version = "0.2.3"
|
|
36
36
|
description = "The aac platform CLI — headless operator interface to the AAC control plane (tenant registration, chain audit)."
|
|
37
37
|
readme = "README.md"
|
|
38
38
|
requires-python = ">=3.10"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|