쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

Amazon DynamoDB에 대한 크로스 계정 액세스 구성 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon DynamoDB에 대한 크로스 계정 액세스 구성

작성자: Shashi Dalmia(AWS), Esteban Serna Parra(AWS), Imhoertha Ojior(AWS)

요약

이 패턴은 리소스 기반 정책을 사용하여 Amazon DynamoDB에 대한 교차 계정 액세스를 구성하는 단계를 설명합니다. DynamoDB를 사용하는 워크로드의 경우 워크로드 격리 전략을 사용하여 보안 위협을 최소화하고 규정 준수 요구 사항을 충족하는 것이 점점 더 일반적이 되고 있습니다. 워크로드 격리 전략을 구현하려면 AWS Identity and Access Management (IAM) 자격 증명 기반 정책을 사용하여 DynamoDB 리소스에 대한 교차 계정 및 교차 리전 액세스가 필요한 경우가 많습니다. 여기에는 IAM 권한을 설정하고 간에 신뢰 관계를 설정하는 작업이 포함됩니다 AWS 계정.

DynamoDB에 대한 리소스 기반 정책은 교차 계정 워크로드의 보안 태세를 크게 간소화합니다. 이 패턴은 다른 계정의 DynamoDB 데이터베이스 테이블에 데이터를 쓰 AWS 계정 도록 AWS Lambda 함수를 한에서 구성하는 방법을 보여주는 단계와 샘플 코드를 제공합니다.

사전 조건 및 제한 사항

사전 조건 

  • 두 개가 활성 상태입니다 AWS 계정. 이 패턴은 이러한 계정을 계정 A계정 B라고 합니다.

  • AWS Command Line Interface (AWS CLI) DynamoDB 테이블을 생성하기 위해 계정 A에 액세스하도록 설치구성되었습니다. 이 패턴의 다른 단계는 IAM, DynamoDB 및 Lambda 콘솔 사용에 대한 지침을 제공합니다. AWS CLI 대신를 사용할 계획이라면 두 계정에 모두 액세스하도록 구성합니다.

제한 사항

아키텍처

다음 다이어그램은 단일 계정 아키텍처를 보여줍니다. AWS Lambda Amazon Elastic Compute Cloud(Amazon EC2) 및 DynamoDB는 모두 동일한 계정에 있습니다. 이 시나리오에서는 Lambda 함수와 Amazon EC2 인스턴스가 DynamoDB에 액세스할 수 있습니다. DynamoDB 테이블에 대한 액세스 권한을 부여하려면 IAM에서 자격 증명 기반 정책을 생성하거나 DynamoDB에서 리소스 기반 정책을 생성할 수 있습니다.

IAM 권한을 사용하여 동일한 계정의 DynamoDB 테이블에 액세스합니다.

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

리소스 기반 정책을 사용하여 다른 계정의 DynamoDB 테이블에 액세스합니다.

이 패턴은 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 함수를 구성하는 방법을 보여주는 추가 정보 섹션의 샘플 코드가 포함되어 있습니다.이 코드는 설명 및 테스트 목적으로만 제공됩니다. 프로덕션 환경에서이 패턴을 구현하는 경우 코드를 참조로 사용하고 자체 환경에 맞게 사용자 지정합니다.

모범 사례

에픽

작업설명필요한 기술

계정 B에서 정책을 생성합니다.

이 IAM 정책은 계정 A의 DynamoDB 테이블에 대한 PutItem 작업을 허용합니다.

  1. 에서 계정 B에 로그인합니다 AWS Management Console.

  2. IAM 콘솔을 엽니다.

  3. 탐색 창에서 정책을 선택한 후 정책 생성을 선택합니다.

  4. 권한 지정 페이지의 정책 편집기에서 JSON을 선택합니다.

  5. 다음 정책을 입력합니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }
  6. <Region><Account-A-ID>를 값으로 바꾸고 다음을 선택합니다.

  7. 정책 이름에와 같은 정책의 고유한 이름을 입력합니다DynamoDB-PutItem-Policy.

  8. (선택 사항) 정책 설명을 추가합니다.

  9. 정책 생성을 선택합니다.

일반 AWS

계정 B에서 역할을 생성합니다.

계정 B의 Lambda 함수는이 IAM 역할을 사용하여 계정 A의 DynamoDB 테이블에 액세스합니다.

  1. IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

  3. Select trusted entity(신뢰할 수 있는 엔터티 선택)에서 AWS 서비스를 선택합니다.

  4. 사용 사례 섹션에서 Lambda를 선택합니다.

  5. 다음: 권한을 선택합니다.

  6. 필터 정책란에 DynamoDB를 입력합니다.

  7. DynamoDB 정책 목록에서를 선택합니다DynamoDB-PutItem-Policy.

  8. 정책 필터링 상자의 선택을 취소한 다음 Lambda를 입력합니다.

  9. Lambda 정책 목록에서 AWSLambdaExecute를 선택합니다.

  10. 다음: 이름, 검토 및 생성을 선택합니다.

  11. 역할 이름에 역할의 고유한 이름(예: DynamoDB-PutItemAccess)을 입력합니다.

  12. (선택 사항) 역할 설명을 추가합니다.

  13. (선택 사항)태그를 키-값 페어로 연결하여 메타데이터를 역할에 추가합니다.

  14. 역할 생성을 선택합니다.

역할 생성에 대한 자세한 내용은 IAM 설명서를 참조하십시오.

일반 AWS

역할 ARN을 기록해 둡니다.

  1. IAM 콘솔(IAM console)을 엽니다.

  2. 탐색 창에서 역할를 선택합니다.

  3. 검색 상자에를 입력한 DynamoDB-PutItemAccess다음 역할을 선택합니다.

  4. 역할의 요약 페이지에서 Amazon 리소스 이름(ARN)을 복사합니다. Lambda 함수를 설정할 때 ARN을 사용합니다.

일반 AWS

계정 B에서 Lambda 함수에 대한 IAM 정책 및 역할 생성

작업설명필요한 기술

계정 B에서 정책을 생성합니다.

이 IAM 정책은 계정 A의 DynamoDB 테이블에 대한 PutItem 작업을 허용합니다.

  1. 에서 계정 B에 로그인합니다 AWS Management Console.

  2. IAM 콘솔을 엽니다.

  3. 탐색 창에서 정책을 선택한 후 정책 생성을 선택합니다.

  4. 권한 지정 페이지의 정책 편집기에서 JSON을 선택합니다.

  5. 다음 정책을 입력합니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }
  6. <Region><Account-A-ID>를 값으로 바꾸고 다음을 선택합니다.

  7. 정책 이름에와 같은 정책의 고유한 이름을 입력합니다DynamoDB-PutItem-Policy.

  8. (선택 사항) 정책 설명을 추가합니다.

  9. 정책 생성을 선택합니다.

일반 AWS

계정 B에서 역할을 생성합니다.

계정 B의 Lambda 함수는이 IAM 역할을 사용하여 계정 A의 DynamoDB 테이블에 액세스합니다.

  1. IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

  3. Select trusted entity(신뢰할 수 있는 엔터티 선택)에서 AWS 서비스를 선택합니다.

  4. 사용 사례 섹션에서 Lambda를 선택합니다.

  5. 다음: 권한을 선택합니다.

  6. 필터 정책란에 DynamoDB를 입력합니다.

  7. DynamoDB 정책 목록에서를 선택합니다DynamoDB-PutItem-Policy.

  8. 정책 필터링 상자의 선택을 취소한 다음 Lambda를 입력합니다.

  9. Lambda 정책 목록에서 AWSLambdaExecute를 선택합니다.

  10. 다음: 이름, 검토 및 생성을 선택합니다.

  11. 역할 이름에 역할의 고유한 이름(예: DynamoDB-PutItemAccess)을 입력합니다.

  12. (선택 사항) 역할 설명을 추가합니다.

  13. (선택 사항)태그를 키-값 페어로 연결하여 메타데이터를 역할에 추가합니다.

  14. 역할 생성을 선택합니다.

역할 생성에 대한 자세한 내용은 IAM 설명서를 참조하십시오.

일반 AWS

역할 ARN을 기록해 둡니다.

  1. IAM 콘솔(IAM console)을 엽니다.

  2. 탐색 창에서 역할를 선택합니다.

  3. 검색 상자에를 입력한 DynamoDB-PutItemAccess다음 역할을 선택합니다.

  4. 역할의 요약 페이지에서 Amazon 리소스 이름(ARN)을 복사합니다. Lambda 함수를 설정할 때 ARN을 사용합니다.

일반 AWS
작업설명필요한 기술

DynamoDB 테이블을 생성합니다.

다음 AWS CLI 명령을 사용하여 DynamoDB 테이블을 생성합니다.

aws dynamodb create-table \ --table-name Table-Account-A \ --attribute-definitions \ AttributeName=category,AttributeType=S \ AttributeName=item,AttributeType=S \ --key-schema \ AttributeName=category,KeyType=HASH \ AttributeName=item,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=5,WriteCapacityUnits=5 \ --resource-policy \ '{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Account-B-ID>:role/<Role-Name>" }, "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }'

이 코드 샘플에서 다음을 바꿉니다.

  • <Account-B-ID>는 계정 B의 ID입니다.

  • <Role-Name>는와 같이 생성한 IAM 역할의 이름입니다DynamoDB-PutItemAccess.

  • <Region>는 DynamoDB 테이블을 생성하는 AWS 리전 입니다.

  • <Account-A-ID>는 계정 A의 ID입니다.

참고

--resource-policy 플래그를 사용하여 create-table 문에서 리소스 기반 정책 구성을 지정합니다. 이 정책은 계정 A의 DynamoDB 테이블에 대한 ARN을 참조합니다.

테이블 생성에 대한 자세한 내용은 DynamoDB 설명서를 참조하십시오.

일반 AWS

계정 A에서 DynamoDB 테이블 생성

작업설명필요한 기술

DynamoDB 테이블을 생성합니다.

다음 AWS CLI 명령을 사용하여 DynamoDB 테이블을 생성합니다.

aws dynamodb create-table \ --table-name Table-Account-A \ --attribute-definitions \ AttributeName=category,AttributeType=S \ AttributeName=item,AttributeType=S \ --key-schema \ AttributeName=category,KeyType=HASH \ AttributeName=item,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=5,WriteCapacityUnits=5 \ --resource-policy \ '{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Account-B-ID>:role/<Role-Name>" }, "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }'

이 코드 샘플에서 다음을 바꿉니다.

  • <Account-B-ID>는 계정 B의 ID입니다.

  • <Role-Name>는와 같이 생성한 IAM 역할의 이름입니다DynamoDB-PutItemAccess.

  • <Region>는 DynamoDB 테이블을 생성하는 AWS 리전 입니다.

  • <Account-A-ID>는 계정 A의 ID입니다.

참고

--resource-policy 플래그를 사용하여 create-table 문에서 리소스 기반 정책 구성을 지정합니다. 이 정책은 계정 A의 DynamoDB 테이블에 대한 ARN을 참조합니다.

테이블 생성에 대한 자세한 내용은 DynamoDB 설명서를 참조하십시오.

일반 AWS
작업설명필요한 기술

DynamoDB에 데이터를 쓰기 위해 Lambda 함수를 생성합니다.

  1. 에서 계정 B에 로그인합니다 AWS Management Console.

  2. Lambda 콘솔을 엽니다.

  3. 탐색 창에서 함수를 선택한 후, 함수 생성을 선택합니다.

  4. 이름lambda_write_function을 입력합니다.

  5. 런타임에서 Python 3.8 이상을 선택합니다.

  6. 기본 실행 역할 변경에서 기존 역할 사용을 선택합니다.

  7. 기존 역할에서와 같이 생성한 IAM 역할을 선택합니다DynamoDB-PutItemAccess.

  8. 함수 생성(Create function)을 선택합니다.

  9. 코드 탭에서이 패턴의 추가 정보 섹션에 제공된 샘플 코드를 붙여 넣습니다. 이 코드 샘플에서 다음을 바꿉니다.

    • <Account-A-ID>는 계정 A의 ID입니다.

    • <Region>는 DynamoDB 테이블을 생성한 AWS 리전 입니다.

  10. 배포(Deploy)를 선택합니다.

  11. 테스트를 선택합니다. 그러면 테스트 이벤트를 구성하라는 메시지가 표시됩니다. 와 같이 원하는 이름으로 새 이벤트를 생성한 MyTestEventForWrite다음 구성을 저장합니다.

  12. 테스트를 다시 선택합니다. 그러면 제공한 이벤트 이름으로 Lambda 함수가 실행됩니다.

  13. 함수의 출력을 확인합니다. 함수가 계정 A의 DynamoDB 테이블에 액세스하여 여기에 데이터를 쓸 수 있음을 나타내야 합니다.

Lambda 함수 생성에 대한 자세한 내용은 Lambda 설명서를 참조하십시오.

일반 AWS

계정 B에서 Lambda 함수 생성

작업설명필요한 기술

DynamoDB에 데이터를 쓰기 위해 Lambda 함수를 생성합니다.

  1. 에서 계정 B에 로그인합니다 AWS Management Console.

  2. Lambda 콘솔을 엽니다.

  3. 탐색 창에서 함수를 선택한 후, 함수 생성을 선택합니다.

  4. 이름lambda_write_function을 입력합니다.

  5. 런타임에서 Python 3.8 이상을 선택합니다.

  6. 기본 실행 역할 변경에서 기존 역할 사용을 선택합니다.

  7. 기존 역할에서와 같이 생성한 IAM 역할을 선택합니다DynamoDB-PutItemAccess.

  8. 함수 생성(Create function)을 선택합니다.

  9. 코드 탭에서이 패턴의 추가 정보 섹션에 제공된 샘플 코드를 붙여 넣습니다. 이 코드 샘플에서 다음을 바꿉니다.

    • <Account-A-ID>는 계정 A의 ID입니다.

    • <Region>는 DynamoDB 테이블을 생성한 AWS 리전 입니다.

  10. 배포(Deploy)를 선택합니다.

  11. 테스트를 선택합니다. 그러면 테스트 이벤트를 구성하라는 메시지가 표시됩니다. 와 같이 원하는 이름으로 새 이벤트를 생성한 MyTestEventForWrite다음 구성을 저장합니다.

  12. 테스트를 다시 선택합니다. 그러면 제공한 이벤트 이름으로 Lambda 함수가 실행됩니다.

  13. 함수의 출력을 확인합니다. 함수가 계정 A의 DynamoDB 테이블에 액세스하여 여기에 데이터를 쓸 수 있음을 나타내야 합니다.

Lambda 함수 생성에 대한 자세한 내용은 Lambda 설명서를 참조하십시오.

일반 AWS
작업설명필요한 기술

리소스를 삭제합니다.

이 패턴으로 생성된 리소스와 관련된 비용이 발생하지 않도록 하려면 다음을 수행하여 이러한 리소스를 삭제합니다.

  1. 계정 B에서 DynamoDB에 연결하기 위해 생성한 Lambda 함수를 삭제합니다. 지침은 Lambda 설명서를 참조하세요.

  2. 계정 A에서 생성한 DynamoDB 테이블을 삭제합니다. 지침은 DynamoDB 설명서를 참조하세요.

  3. 보안 모범 사례의 경우 더 이상 필요하지 않은 경우 IAM 정책(DynamoDB-PutItem-Policy)을 삭제합니다. 자세한 내용은 IAM 설명서를 참조하세요.

  4. 보안 모범 사례의 경우 더 이상 필요하지 않은 IAM 역할(DynamoDB-PutItemAccess)을 삭제합니다. 자세한 내용은 IAM 설명서를 참조하세요.

일반 AWS

정리

작업설명필요한 기술

리소스를 삭제합니다.

이 패턴으로 생성된 리소스와 관련된 비용이 발생하지 않도록 하려면 다음을 수행하여 이러한 리소스를 삭제합니다.

  1. 계정 B에서 DynamoDB에 연결하기 위해 생성한 Lambda 함수를 삭제합니다. 지침은 Lambda 설명서를 참조하세요.

  2. 계정 A에서 생성한 DynamoDB 테이블을 삭제합니다. 지침은 DynamoDB 설명서를 참조하세요.

  3. 보안 모범 사례의 경우 더 이상 필요하지 않은 경우 IAM 정책(DynamoDB-PutItem-Policy)을 삭제합니다. 자세한 내용은 IAM 설명서를 참조하세요.

  4. 보안 모범 사례의 경우 더 이상 필요하지 않은 IAM 역할(DynamoDB-PutItemAccess)을 삭제합니다. 자세한 내용은 IAM 설명서를 참조하세요.

일반 AWS

문제 해결

문제Solution

Lambda 함수를 생성할 때 ResourceNotFoundException 오류가 발생합니다.

계정 A의 AWS 리전 및 ID를 올바르게 입력했는지 확인합니다. 이는 DynamoDB 테이블의 ARN에 포함됩니다.

관련 리소스

추가 정보

샘플 코드

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 테이블에 연결하기 위해 필요합니다.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.