You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需配置文件,安全使用OCI API删除存储桶对象的方案咨询

安全实现OCI对象删除API的几种思路

以下是几种无需依赖本地配置文件、安全可靠的OCI对象删除方案,适配不同部署场景:

1. 实例主体(Instance Principals)

适合部署在OCI计算实例(VM/BM)上的API服务。通过给计算实例授予对象存储操作权限,让服务直接以实例身份调用OCI API,无需存储任何凭证文件。

配置步骤:

  • 在IAM中创建动态组,将你的计算实例纳入组内
  • 编写IAM策略,允许该动态组对目标存储桶执行删除操作:
    Allow dynamic-group <你的动态组名> to manage objects in compartment <compartment名> where target.bucket.name = '<你的桶名>'
    

代码示例(JavaScript):

const common = require("oci-common");
const os = require("oci-objectstorage");

// 使用实例主体认证,无需配置文件
const provider = new common.InstancePrincipalsAuthenticationDetailsProvider();
const client = new os.ObjectStorageClient({ authenticationDetailsProvider: provider });

// 执行删除操作
async function deleteObject(bucketName, objectName, namespace) {
  const request = {
    namespaceName: namespace,
    bucketName: bucketName,
    objectName: objectName
  };
  await client.deleteObject(request);
}

2. 资源主体(Resource Principals)

如果你的API部署在OCI托管服务(如OCI Functions、API Gateway、Stream Analytics)上,推荐使用资源主体。服务本身会自动获取身份凭证,无需手动管理。

配置步骤:

  • 为托管服务(比如OCI Function)配置资源主体权限,添加IAM策略允许其操作目标存储桶:
    Allow resource-type functions-family to manage objects in compartment <compartment名> where target.bucket.name = '<你的桶名>'
    

代码示例(JavaScript):

const common = require("oci-common");
const os = require("oci-objectstorage");

// 使用资源主体认证
const provider = new common.ResourcePrincipalsAuthenticationDetailsProvider();
const client = new os.ObjectStorageClient({ authenticationDetailsProvider: provider });

// 删除对象逻辑同前
async function deleteObject(bucketName, objectName, namespace) {
  const request = {
    namespaceName: namespace,
    bucketName: bucketName,
    objectName: objectName
  };
  await client.deleteObject(request);
}

3. OIDC身份提供商 + 临时凭证

适合需要外部客户端(如用户浏览器、第三方服务)触发删除操作的场景。通过你的身份系统认证用户后,向OCI STS服务申请临时凭证,用临时凭证执行删除,避免长期凭证泄露。

流程:

  1. 在OCI IAM中配置外部OIDC身份提供商(比如你的企业IDP)
  2. 用户通过你的系统完成身份认证,获取OIDC ID Token
  3. 调用OCI STS服务,用ID Token换取临时密钥(Access Key、Secret Key、Session Token)
  4. 使用临时密钥初始化对象存储客户端,执行删除操作

代码示例(JavaScript):

const common = require("oci-common");
const os = require("oci-objectstorage");
const sts = require("oci-sts");

async function getTemporaryCredentials(idToken) {
  const stsClient = new sts.SecurityTokenClient({});
  const request = {
    createSessionTokenDetails: {
      token: idToken,
      sessionExpirationDurationInSeconds: 3600 // 凭证有效期1小时
    }
  };
  const response = await stsClient.createSessionToken(request);
  return response.securityToken;
}

async function deleteObjectWithTempCreds(bucketName, objectName, namespace, idToken) {
  const tempToken = await getTemporaryCredentials(idToken);
  // 用临时凭证创建认证提供者
  const provider = new common.SessionTokenAuthenticationDetailsProvider(tempToken);
  const client = new os.ObjectStorageClient({ authenticationDetailsProvider: provider });
  
  const request = {
    namespaceName: namespace,
    bucketName: bucketName,
    objectName: objectName
  };
  await client.deleteObject(request);
}

4. API Gateway 封装删除接口

将对象删除操作封装到OCI API Gateway,通过网关统一处理认证和权限控制,客户端只需调用网关接口,无需接触OCI凭证。

实现方式:

  • 在OCI API Gateway中创建一个DELETE端点,后端绑定到你的业务服务(或直接调用OCI对象存储API)
  • 为网关配置认证方式(如OAuth2、API密钥、JWT验证),确保只有授权用户能访问
  • 网关使用资源主体或实例主体身份调用对象存储API,执行删除操作

这种方式的优势是将OCI凭证完全隔离在网关层,客户端无需了解OCI认证细节,同时可以通过网关的限流、日志功能增强管控。


内容的提问来源于stack exchange,提问作者Albesher Haiajneh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:35:15