diff --git a/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/access/aliyun-access.test.ts b/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/access/aliyun-access.test.ts new file mode 100644 index 000000000..f8713bc16 --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/access/aliyun-access.test.ts @@ -0,0 +1,41 @@ +/// + +import assert from "node:assert/strict"; + +import { AliyunAccess } from "./aliyun-access.js"; + +function createAccess(result: Record) { + const access = new AliyunAccess(); + access.ctx = { + logger: { + log() {}, + }, + } as any; + access.getStsClient = async () => + ({ + getCallerIdentity: async () => result, + }) as any; + return access; +} + +describe("AliyunAccess", () => { + it("rejects STS error responses when testing access keys", async () => { + const access = createAccess({ + Code: "InvalidAccessKeyId.NotFound", + Message: "Specified access key is not found.", + RequestId: "request-id", + }); + + await assert.rejects(() => access.onTestRequest(), /InvalidAccessKeyId\.NotFound/); + }); + + it("returns ok for valid STS identity responses", async () => { + const access = createAccess({ + AccountId: "123456789", + Arn: "acs:ram::123456789:user/test", + UserId: "test-user", + }); + + assert.equal(await access.onTestRequest(), "ok"); + }); +}); diff --git a/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/access/aliyun-access.ts b/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/access/aliyun-access.ts index 4ecf5a7f3..1b7857458 100644 --- a/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/access/aliyun-access.ts +++ b/packages/ui/certd-server/src/plugins/plugin-lib/aliyun/access/aliyun-access.ts @@ -41,7 +41,7 @@ export class AliyunAccess extends BaseAccess { async onTestRequest() { await this.getCallerIdentity(); - return "ok" + return "ok"; } @@ -64,6 +64,11 @@ export class AliyunAccess extends BaseAccess { const sts = await this.getStsClient(); // 调用 GetCallerIdentity 接口 const result = await sts.getCallerIdentity(); + if (result.Code || !result.AccountId) { + const message = result.Message || "阿里云密钥校验失败"; + const code = result.Code ? `[${result.Code}] ` : ""; + throw new Error(`${code}${message}`); + } this.ctx.logger.log("✅ 密钥有效!"); this.ctx.logger.log(` 账户ID: ${result.AccountId}`);