无需配置文件,安全使用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服务申请临时凭证,用临时凭证执行删除,避免长期凭证泄露。
流程:
- 在OCI IAM中配置外部OIDC身份提供商(比如你的企业IDP)
- 用户通过你的系统完成身份认证,获取OIDC ID Token
- 调用OCI STS服务,用ID Token换取临时密钥(Access Key、Secret Key、Session Token)
- 使用临时密钥初始化对象存储客户端,执行删除操作
代码示例(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
相关产品推荐
相关产品推荐

