Credential provider is never deleted, despite remove credential saying the deploy will apply it
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 68/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 技术栈
- aws, typescript
调研方向
跟踪 TypeScript CLI 中的凭据移除路径和部署路径,然后将其与 issue 中描述的现有支付提供商删除调用进行比较。为在部署前移除的 API-key 凭据增加覆盖测试,并验证提供商和底层 secret 会被删除,而不是仅仅在后续创建时被省略;复现命令提供端到端检查。
由索引模型根据 Issue 内容生成。
描述
Description
agentcore remove credential --name <n> --yes returns a note saying the removal will be applied to AWS on the next deploy:
{"success":true,"resourceType":"credential","resourceName":"retiretest-fake-token",
"message":"Removed credential 'retiretest-fake-token'",
"note":"Your agent app source code has not been modified. Deploy with `agentcore deploy` to apply your removal changes to AWS."}
That does not happen. The API-key credential provider is never deleted from AWS. It survives the removal, the following deploy, and a full stack teardown. There appears to be no CLI path that deletes one at all, so the only way to remove it is a manual aws bedrock-agentcore-control delete-api-key-credential-provider call.
The misleading note is the reason I am filing this as a bug rather than a feature request. An operator who follows the CLI's own guidance will reasonably believe the credential is gone. It is not, and neither is its backing secret, which is a security-relevant leak whenever the credential holds a real token.
Two details suggest the missing deletion is an oversight rather than a deliberate design decision:
- The CLI does implement provider deletion for payment credential providers, via a direct
POST /identities/DeletePaymentCredentialProvidercall. There is no equivalent call for API-key providers anywhere in the CLI. - The credential provider is not a CloudFormation resource, so
cdk destroycannot remove it even in principle. On a two-runtime Container project the stack contained 24 resources (Runtime, ECR, KMS, Lambda, Logs, IAM, CodeBuild, CustomResource, CDK Metadata) and no credential-provider resource of any type. Only an explicit API call can delete it.
Steps to Reproduce
1. Scaffold a project with one runtime and one API-key credential.
agentcore create --no-agent --project-name RetireTest
agentcore add agent --type byo --name alpha_amp --language TypeScript \
--framework Strands --model-provider Bedrock --code-location app/alpha_amp \
--entrypoint dist/main.js --build Container --protocol HTTP
agentcore add credential --name retiretest-fake-token --type api-key --api-key not-a-real-token
2. Deploy. The output includes a Creating credentials... step.
agentcore deploy --target <target>
3. Confirm the provider now exists in AWS.
aws bedrock-agentcore-control list-api-key-credential-providers --region us-east-1
retiretest-fake-token is present. Correct so far.
4. Remove the credential. Note the message it returns about deploying to apply the change.
agentcore remove credential --name retiretest-fake-token --yes
5. Deploy again, exactly as that message instructs.
agentcore deploy --target <target>
6. Check AWS again.
aws bedrock-agentcore-control list-api-key-credential-providers --region us-east-1
retiretest-fake-token is still present. This is the bug.
7. Optionally, confirm it also survives a full teardown.
agentcore remove agent --name alpha_amp --yes
agentcore deploy --target <target> --yes # output shows a "Tear down stack" step
aws cloudformation describe-stacks --stack-name AgentCore-RetireTest-<target> --region us-east-1
# ValidationError: Stack ... does not exist -- the stack is correctly gone
aws bedrock-agentcore-control list-api-key-credential-providers --region us-east-1
# retiretest-fake-token is STILL present
Expected Behavior
One of the following:
- The deploy after
remove credentialdeletes the credential provider from AWS, as the returned note says it will. Or, remove credentialstates that the AWS-side provider must be deleted separately, and prints the command to do it.
Either way, an operator following the CLI's output should end up with no orphaned provider and no orphaned backing secret.
Actual Behavior
The credential provider is never deleted. It remains in the account after remove credential, after the deploy that the CLI said would apply the removal, and after a full stack teardown that reported success.
The deploy in step 5 does correctly omit the Creating credentials... step that appeared in step 2, so the CLI clearly notices the credential is no longer declared in agentcore.json. It simply has no concept of deleting one that already exists in AWS, while telling the operator the opposite.
Deleting it requires dropping out of the CLI entirely:
aws bedrock-agentcore-control delete-api-key-credential-provider \
--name retiretest-fake-token --region us-east-1
CLI Version
0.27.0
Operating System
macOS
Additional Context
Environment: @aws/agentcore 0.27.0 installed via mise (npm:@aws/agentcore), @aws/agentcore-cdk ^0.1.0-alpha.19, aws-cdk-lib ^2.248.0, aws-cdk CLI 2.1126.0, Node v22.22.1, aws-cli 2.35.24, macOS 15 arm64. Project managedBy: CDK, Container build, single deploy target. No modifications to the CLI or to the generated agentcore/cdk/ sources.
This was found while building tooling to retire AgentCore projects in an internal sandbox, and reproduced on a throwaway project created solely to confirm it. We had previously orphaned a provider on a real retirement without noticing, because the CLI reported success.
A related but separate gap, filed as #2023: a teardown also orphans one Lambda log group per Container runtime, because those log groups carry DeletionPolicy: Retain. cdk diff shows this as orphan, but the CLI's own teardown output never mentions that anything was retained.
For reference, the complete teardown procedure we ended up needing, where steps 3 and 4 have no CLI equivalent:
1. agentcore remove agent --name <each> --yes # local config only
2. agentcore deploy --target <target> --yes # destroys the stack
3. aws bedrock-agentcore-control delete-api-key-credential-provider --name <n> --region <region>
4. aws logs delete-log-group --log-group-name <n> --region <region>
- 主要语言
- TypeScript
- 星标
- 302
- 派生
- 103
- 平均合并
- 20 小时 56 分钟
- 30 天内合并 PR
- 192
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
aws/agentcore-cli 的其他 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 82/100
aws/agentcore-cli#2546 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
aws/agentcore-cli#2538 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
aws/agentcore-cli#2533 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 78/100
aws/agentcore-cli#2520 ·
维护者通常 1 天内回复
-
bug(policy): add policy --target generates an undeployable Cedar statement (wrong action id suffix, resource scope not narrowed)可能已有人在做 @rksharma-owg 于 12 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 70/100
aws/agentcore-cli#2395 ·
维护者通常 1 天内回复
查看 aws/agentcore-cli 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 66/100
cockpit-project/cockpit-machines#2835 ·
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
cloudflare/kumo#866 ·
维护者通常 1 天内回复
-
area:connector bug
难度 1/5 1 小时以内 新手友好度 82/100
维护者通常 1 天内回复
-
environment: OPENCODE_API_KEY is described as a Console service account key, but a Go subscription key works可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 2/5 1-3 小时 新手友好度 78/100
tester-army/e2e#1015 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复