AWS Lambda에서 STS(임시자격증명) 이용

유정훈·2023년 3월 20일
1

AWS

목록 보기
1/4

STS

STS(Security Token Service : 임시 자격 증명 서비스)는 적게는 몇 분에서 많게는 몇 시간까지 수명을 가지고 임시로 자격을 증명해주는 서비스이다. 자격 증명이 만료된 후의 Access Key와 Secret Key는 사용하지 못하게 된다. 또한 동적으로 원할 때 얼마든지 생성이 가능하다. 고정 Access Key와 다르게 STS는 보안에 조금 더 안전하다.

요약

람다를 사용할 계정(A), 임시 자격을 발급하는 계정(B)

A 계정

  • Lambda 생성 후 Execution role 생성, 연결
  • Execution role 설정(B 계정에서 Role 생성 후 진행)
    • Permission(권한) 추가
      • B 계정에서 생성한 role에 대해 sts:assumerole 액션 허용

B 계정

  • IAM Role 생성
    • Permission(권한) 추가
      • (허용할 권한 추가)
      • ex) CloudWatchReadOnlyAccess 추가
    • Trust relationships(신뢰 관계) 추가 (A 계정의 Lambda Execution role 생성 후 진행)
      • A의 Lambda Execution role에 대해 sts:AssumeRole 허용

Lambda

import { STSClient, AssumeRoleCommand } from "@aws-sdk/client-sts";
import { CloudWatchClient, GetMetricStatisticsCommand } from "@aws-sdk/client-cloudwatch";
 
// ELB Request
async function getProdELBRequest(msg) {
    const REGION = "";
    const ROLEARN = "";
 
    // sts
    const sts_client = new STSClient({ region: REGION });
    const assumeRoleCommand = new AssumeRoleCommand({
        RoleArn: ROLEARN,
        RoleSessionName: "cross_acct_lambda",
    })
    const assumedRole = await sts_client.send(assumeRoleCommand);
 
    // prod/cloudwatch
    const cloudwatch_client = new CloudWatchClient({
        region: REGION,
        credentials: {
            accessKeyId: assumedRole.Credentials.AccessKeyId,
            secretAccessKey: assumedRole.Credentials.SecretAccessKey,
            sessionToken: assumedRole.Credentials.SessionToken,
        },
    });
    const getMetricStatisticsCommand = new GetMetricStatisticsCommand({
        "StartTime": "",
        "EndTime": "",
        "Period": "86400",
        "Statistics": ["Sum"],
        "MetricName": "RequestCount",
        "Namespace": "AWS/ELB",
        "Dimensions": [
            {
                "Name": "LoadBalancerName",
                "Value": "Enter load balancer name"
            }
        ],
    });
 
    try {
        const data = await cloudwatch_client.send(getMetricStatisticsCommand);
    } catch (error) {
        console.log(error);
    }
     
     
}
profile
안녕하세요!

1개의 댓글

comment-user-thumbnail
2023년 4월 16일

포스팅 -감사합니다-

답글 달기