开发者社区 > 云原生 > Serverless > 正文

函数计算,求函数代码使用sts?

函数计算,求函数代码使用sts?

展开
收起
巴拉巴拉巴拉 2023-08-24 10:03:56 69 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    我已经认真阅读了 你的问题:

    【 函数计算,求函数代码使用sts?

    并思考了

    建议如下:


    在阿里云函数计算中,STS(Security Token Service)主要用于实现跨账户资源共享和权限控制。如果你希望在函数代码中使用STS,你需要遵循以下步骤: 1.配置STS:首先,

    需要在阿里云控制台中启用STS服务,并配置相应的权限。例如,您可以授权STS访问您希望在函数中使用的其他阿里云服务(如OSS、RDS等)。 2.创建并配置IAM
    角色:
    要使用STS,您需要为您的函数计算服务创建一个IAM角色,并将其与STS关联。在阿里云控制台中,选择“IAM服务”,然后创建一个新角色。在创建角色时,您需要为角色配置适当的权限,以便可以访问您希望在函数中使用的其他阿里云服务。 3.在函数代码中
    使用STS:
    在函数计算服务的代码中,您可以使用STS SDK来获取访问其他阿里云服务云服务的临时安全令牌。在函数代码的开始,引入STS SDK,并使用IAM角色的AccessKey和SecretKey进行初始化。然后,你可以使用SDK的方法来获取临时安全令牌,并在后续请求中使用该令牌进行身份验证。
    以下是一个使用Python语言和阿里云STS SDK的示例:

    import os
    from aliyunsdkcore.client import AcsClient
    from aliyunsdkcore.request import CommonRequest
    from aliyunsdksts.request.v20180823 import GetCallerIdentityRequest
    def main_handler(event, context):

    # 初始化 STS 客户端  
    client = AcsClient(access_key_id=os.environ['ACCESS_KEY_ID'],  
                        secret_access_key=os.environ['SECRET_ACCESS_KEY'],  
                        region_id='cn-hangzhou')  
    
    # 获取当前账户的临时安全令牌  
    response = client.do_action_with_exception(GetCallerIdentityRequest())  
    temp_token = response.result.get('TempToken')  
    
    # 在后续请求中使用临时安全令牌进行身份验证  
    #...
    

    if name == 'main':
    main_handler({}, {})

    2023-08-26 17:03:38
    赞同 展开评论 打赏
  • 函数计算中的入口参数 context.credentials, 是根据您在service 上配置的 role 生成的临时 token, 您的 role 具有什么权限, 这个 token 就具有什么权限, 因此可以在函数代码中使用这个参数, 从而避免在代码明文中使用 AK
    Aliyun OpenAPI
    from aliyunsdkcore import client
    from aliyunsdkcore.auth.credentials import StsTokenCredential
    def handler(event, context):
    creds = context.credentials
    sts_token_credential = StsTokenCredential(creds.access_key_id, creds.access_key_secret, creds.security_token)
    clt = client.AcsClient(region_id="cn-hangzhou", credential=sts_token_credential)
    call aliyun open api do something
    FC
    def handler(event, context):
    creds = context.credentials
    client = fc2.Client(
    endpoint=,
    accessKeyID=creds.access_key_id,
    accessKeySecret=creds.access_key_secret,
    securityToken=creds.security_token,
    )
    r = client.invoke_function(self.serviceName, helloWorld)
    ...
    OSS
    import json
    import oss2
    def my_handler(event, context):
    creds = context.credentials
    auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
    bucket = oss2.Bucket(auth, , )
    ...

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-08-24 10:06:43
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    All in Serverless 阿里云核心产品全面升级 立即下载
    AIGC 浪潮之上,森马的 Serverless 实践之旅 立即下载
    极氪大数据 Serverless 应用实践 立即下载