기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon DynamoDB에 대한 크로스 계정 액세스 구성
작성자: Shashi Dalmia(AWS), Esteban Serna Parra(AWS), Imhoertha Ojior(AWS)
요약
이 패턴은 리소스 기반 정책을 사용하여 Amazon DynamoDB에 대한 교차 계정 액세스를 구성하는 단계를 설명합니다. DynamoDB를 사용하는 워크로드의 경우 워크로드 격리 전략을
DynamoDB에 대한 리소스 기반 정책은 교차 계정 워크로드의 보안 태세를 크게 간소화합니다. 이 패턴은 다른 계정의 DynamoDB 데이터베이스 테이블에 데이터를 쓰 AWS 계정 도록 AWS Lambda 함수를 한에서 구성하는 방법을 보여주는 단계와 샘플 코드를 제공합니다.
사전 조건 및 제한 사항
사전 조건
제한 사항
일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 서비스 리전별
섹션을 참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량 페이지를 참조하고 서비스 링크를 선택합니다.
아키텍처
다음 다이어그램은 단일 계정 아키텍처를 보여줍니다. AWS Lambda Amazon Elastic Compute Cloud(Amazon EC2) 및 DynamoDB는 모두 동일한 계정에 있습니다. 이 시나리오에서는 Lambda 함수와 Amazon EC2 인스턴스가 DynamoDB에 액세스할 수 있습니다. DynamoDB 테이블에 대한 액세스 권한을 부여하려면 IAM에서 자격 증명 기반 정책을 생성하거나 DynamoDB에서 리소스 기반 정책을 생성할 수 있습니다.

다음 다이어그램은 다중 계정 아키텍처를 보여줍니다. 한의 리소스가 다른 계정의 DynamoDB 테이블에 액세스 AWS 계정 해야 하는 경우 DynamoDB에서 리소스 기반 정책을 설정하여 필요한 액세스 권한을 부여해야 합니다. 예를 들어 다음 다이어그램에서는 리소스 기반 정책을 사용하여 계정 A의 DynamoDB 테이블에 대한 액세스 권한이 계정 B의 Lambda 함수에 부여됩니다.

이 패턴은 Lambda와 DynamoDB 간의 교차 계정 액세스를 설명합니다. 두 계정 모두에 적절한 권한이 구성된 AWS 서비스 경우 다른에 유사한 단계를 사용할 수 있습니다. 예를 들어 계정 A의 Amazon Simple Storage Service(Amazon S3) 버킷에 대한 Lambda 함수 액세스를 제공하려는 경우 Amazon S3에서 리소스 기반 정책을 생성하고 계정 B의 Lambda 실행 역할에 권한을 추가할 수 있습니다.
도구
AWS 서비스
Amazon DynamoDB는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
AWS Identity and Access Management (IAM)는 인증되고 사용할 권한이 있는 사용자를 제어하여 AWS 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
코드
이 패턴에는 계정 A의 DynamoDB 테이블에 쓰도록 계정 B의 Lambda 함수를 구성하는 방법을 보여주는 추가 정보 섹션의 샘플 코드가 포함되어 있습니다.이 코드는 설명 및 테스트 목적으로만 제공됩니다. 프로덕션 환경에서이 패턴을 구현하는 경우 코드를 참조로 사용하고 자체 환경에 맞게 사용자 지정합니다.
모범 사례
DynamoDB 설명서의 리소스 기반 정책에 대한 모범 사례를 따릅니다.
최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여합니다. 자세한 내용은 IAM 설명서의 최소 권한 부여 및 보안 모범 사례를 참조하세요.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
계정 B에서 정책을 생성합니다. | 이 IAM 정책은 계정 A의 DynamoDB 테이블에 대한 PutItem 작업을 허용합니다.
| 일반 AWS |
계정 B에서 역할을 생성합니다. | 계정 B의 Lambda 함수는이 IAM 역할을 사용하여 계정 A의 DynamoDB 테이블에 액세스합니다.
역할 생성에 대한 자세한 내용은 IAM 설명서를 참조하십시오. | 일반 AWS |
역할 ARN을 기록해 둡니다. |
| 일반 AWS |
작업 | 설명 | 필요한 기술 |
---|---|---|
DynamoDB 테이블을 생성합니다. | 다음 AWS CLI 명령을 사용하여 DynamoDB 테이블을 생성합니다.
이 코드 샘플에서 다음을 바꿉니다.
참고
테이블 생성에 대한 자세한 내용은 DynamoDB 설명서를 참조하십시오. | 일반 AWS |
작업 | 설명 | 필요한 기술 |
---|---|---|
DynamoDB에 데이터를 쓰기 위해 Lambda 함수를 생성합니다. |
Lambda 함수 생성에 대한 자세한 내용은 Lambda 설명서를 참조하십시오. | 일반 AWS |
작업 | 설명 | 필요한 기술 |
---|---|---|
리소스를 삭제합니다. | 이 패턴으로 생성된 리소스와 관련된 비용이 발생하지 않도록 하려면 다음을 수행하여 이러한 리소스를 삭제합니다.
| 일반 AWS |
문제 해결
문제 | Solution |
---|---|
Lambda 함수를 생성할 때 | 계정 A의 AWS 리전 및 ID를 올바르게 입력했는지 확인합니다. 이는 DynamoDB 테이블의 ARN에 포함됩니다. |
관련 리소스
DynamoDB 시작하기(DynamoDB 설명서)
Lambda 시작하기(Lambda 설명서)
DynamoDB에 리소스 기반 정책 사용(DynamoDB 설명서)
IAM 정책 생성(IAM 설명서)
크로스 계정 정책 평가 로직(IAM 설명서)
IAM JSON 정책 요소 참조(IAM 설명서)
추가 정보
샘플 코드
import boto3
from datetime import datetime
dynamodb_client = boto3.client('dynamodb')
def lambda_handler(event, context):
now = datetime.now().isoformat()
data = dynamodb_client.put_item(TableName='arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A', Item={"category": {"S": "Fruit"},"item": {"S": "Apple"},"time": {"S": now}})
return data
참고
DynamoDB 클라이언트가 인스턴스화되면 테이블 이름 대신 DynamoDB 테이블의 ARN이 제공됩니다. 이는 Lambda 함수가 실행될 때 올바른 DynamoDB 테이블에 연결하기 위해 필요합니다.