기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
를 사용하여 Amazon S3 버킷에서 다른 계정 및 리전으로 데이터 복사 AWS CLI
Appasaheb Bagali, Purushotham G K, Amazon Web Services
요약
이 패턴은 AWS 계정의 소스 Amazon Simple Storage Service(Amazon S3) 버킷에서 동일한 AWS 리전 또는 다른 리전의 다른 AWS 계정의 대상 Amazon S3 버킷으로 데이터를 마이그레이션하는 방법을 설명합니다.
소스 Amazon S3 버킷은 연결된 리소스 정책을 사용하여 AWS Identity and Access Management (IAM) 액세스를 허용합니다. 대상 계정의 사용자는 소스 버킷에 대한 권한이 있는 PutObject 및 GetObject의 역할을 맡아야 합니다. 마지막으로 copy 및 sync 명령을 실행하여 소스 Amazon S3 버킷에서 대상 Amazon S3 버킷으로 데이터를 전송합니다.
계정은 Amazon S3 버킷에 업로드하는 객체를 소유합니다. 계정 및 리전 간에 객체를 복사하는 경우 대상 계정에 복사한 객체의 소유권을 부여합니다. 액세스 제어 목록(ACL) 을 bucket-owner-full-control로 변경하여 객체의 소유권을 변경할 수 있습니다. 그러나 여러 객체에 대해 ACL을 관리하기가 어려울 수 있으므로 대상 계정에 프로그래밍 방식의 교차 계정 권한을 부여하는 것이 좋습니다.
이 시나리오에서는 프로그래밍 방식 액세스 권한과 장기 보안 인증이 있는 IAM 사용자가 필요하며 이는 보안 위험을 내포합니다. 이 위험을 줄이려면 이러한 사용자에게 작업을 수행하는 데 필요한 권한만 제공하고 더 이상 필요하지 않을 경우 이러한 사용자를 제거하는 것이 좋습니다. 필요한 경우 액세스 키를 업데이트할 수 있습니다. 자세한 내용은 IAM 설명서의 액세스 키 업데이트를 참조하세요.
사전 조건 및 제한 사항
사전 조건
둘이 동일하거나 다른 AWS 계정 에서 활성 상태입니다 AWS 리전.
소스 계정의 기존 Amazon S3 버킷입니다.
소스 또는 대상 Amazon S3 버킷에 기본 암호화가 활성화된 경우 AWS Key Management Service (AWS KMS) 키 권한을 수정해야 합니다. 자세한 내용은이 주제에 대한 AWS re:Post 문서를 참조하세요.
교차 계정 권한에 대해 잘 알고 있어야 합니다.
제한 사항
이 패턴에서는 일회성 마이그레이션을 다룹니다. 소스 버킷에서 대상 버킷으로 새 객체를 지속적으로 자동 마이그레이션해야 하는 시나리오의 경우 Amazon S3 배치 복제를 사용할 수 있습니다.
이 패턴은 임시적이고 비영구적인 세션 자격 증명(AccessKeyIdSecretAccessKey, 및 SessionToken)을 사용합니다. 출력의 만료 타임스탬프는 이러한 자격 증명이 만료되는 시기를 나타냅니다. 역할은 최대 세션 기간으로 구성됩니다. 세션이 만료되면 복사 작업이 취소됩니다.
아키텍처
모범 사례
에픽
| 작업 | 설명 | 필요한 기술 |
|---|
IAM 사용자를 생성하고 액세스 키를 받습니다. | 에 로그인 AWS Management Console 하고 프로그래밍 방식으로 액세스할 수 있는 IAM 사용자를 생성합니다. 자세한 지침은 IAM 설명서의 IAM 사용자 생성을 참조하세요. 이 사용자에 대한 정책은 추가할 필요가 없습니다. 이 사용자의 액세스 키와 비밀 키를 생성합니다. 지침은 AWS 설명서의 AWS 계정 및 액세스 키를 참조하세요.
| DevOps |
자격 증명 기반 IAM 정책을 생성합니다. | 다음 권한을 S3MigrationPolicy 사용하여 라는 IAM 자격 증명 기반 정책을 생성합니다. 사용 사례에 따라 원본 및 대상 버킷 이름을 수정합니다. 이 ID 기반 정책을 통해 이 역할을 수임하는 사용자는 원본 버킷과 대상 버킷에 액세스할 수 있습니다. 자세한 지침은 IAM 설명서의 IAM 정책 생성을 참조하세요. {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:ListObjectsV2",
"s3:GetObject",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::amazon-s3-demo-source-bucket",
"arn:aws:s3:::amazon-s3-demo-source-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging",
"s3:GetObjectTagging",
"s3:ListObjectsV2",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::amazon-s3-demo-destination-bucket",
"arn:aws:s3:::amazon-s3-demo-destination-bucket/*"
]
}
]
}
| DevOps |
IAM 역할을 생성합니다. | 다음 신뢰 정책을 S3MigrationRole 사용하여 라는 IAM 역할을 생성합니다. 사용 사례에 따라 신뢰 정책에 있는 대상 IAM 역할 또는 사용자 이름의 Amazon 리소스 이름 ARN)을 수정합니다. 이 신뢰 정책은 새로 생성한 IAM 사용자가 S3MigrationRole을 가정하도록 허용합니다. 이전에 생성한를 연결합니다S3MigrationPolicy. 자세한 단계는 IAM 설명서의 역할을 생성하여 IAM 사용자에게 권한 위임을 참조하세요. {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<destination_account>:user/<user_name>"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
| DevOps |
| 작업 | 설명 | 필요한 기술 |
|---|
Amazon S3 버킷 정책을 생성하고 연결합니다. | 소스 계정의 AWS Management Console 에 로그인하고 Amazon S3 콘솔을 엽니다. 소스 Amazon S3 버킷을 선택한 다음 권한을 선택합니다. 버킷 정책에서 편집을 선택합니다. 다음 버킷 정책을 붙여 넣습니다. 대상 계정의 AWS 계정 ID를 포함하고 요구 사항에 따라 버킷 정책 템플릿을 구성해야 합니다. 이 리소스 기반 정책은 대상 역할이 소스 계정의 Amazon S3 객체에 액세스할 수 S3MigrationRole 있도록 허용합니다. {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::<destination_account>:role/<RoleName>"},
"Action": ["s3:ListBucket",
"s3:GetObject",
"s3:ListObjectsV2",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::amazon-s3-demo-source-bucket/*",
"arn:aws:s3:::amazon-s3-demo-source-bucket"
]
}
]
}
저장을 선택합니다.
| 클라우드 관리자 |
| 작업 | 설명 | 필요한 기술 |
|---|
대상 Amazon S3 버킷을 생성합니다. | 대상 계정의 AWS Management Console 에 로그인하고 Amazon S3 콘솔을 엽니다. 버킷 생성을 선택합니다. 요구 사항에 따라 Amazon S3 버킷을 생성합니다. 자세한 내용은 Amazon S3 설명서의 버킷 생성을 참조하세요.
| 클라우드 관리자 |
| 작업 | 설명 | 필요한 기술 |
|---|
새로 생성된 사용자 자격 증명 AWS CLI 으로를 구성합니다. | | DevOps |
Amazon S3 마이그레이션 역할을 수임합니다. | 를 사용하여를 가정 AWS CLI 합니다S3MigrationRole. aws sts assume-role \
--role-arn "arn:aws:iam::<destination_account>:role/S3MigrationRole" \
--role-session-name AWSCLI-Session
이 명령은 여러 정보를 출력합니다. 보안 인증 정보 블록 내에는 AccessKeyId, SecretAccessKey 및 SessionToken이 필요합니다. 이 예제에서는 환경 변수 RoleAccessKeyID, RoleSecretKey, 및 RoleSessionToken를 사용합니다. : 세션 자격 증명(AccessKeyId, SecretAccessKey및 SessionToken)은 일시적이며 비영구적입니다. 출력의 만료 타임스탬프는 이러한 자격 증명이 만료되는 시기를 나타냅니다. 역할은 최대 세션 기간으로 구성됩니다. 자격 증명이 만료되면를 sts:AssumeRole 다시 호출하여 새 임시 자격 증명을 얻어야 합니다. IAM 역할을 맡을 환경 변수 3개를 생성합니다. 이러한 환경 변수는 다음 출력으로 완료됩니다. # Linux
export AWS_ACCESS_KEY_ID=<RoleAccessKeyID from command output>
export AWS_SECRET_ACCESS_KEY=<RoleSecretKey from command output>
export AWS_SESSION_TOKEN=<RoleSessionToken from command output>
# Windows
set AWS_ACCESS_KEY_ID=<RoleAccessKeyID from command output>
set AWS_SECRET_ACCESS_KEY=<RoleSecretKey from command output>
set AWS_SESSION_TOKEN=<RoleSessionToken from command output>
다음 명령을 실행하여 IAM 역할을 가정했는지 검증합니다. aws sts get-caller-identity
자세한 내용은 를 사용하여 IAM 역할을 수임 AWS CLI 하려면 어떻게 해야 하나요?를 참조하세요. | 관리자 |
소스 버킷에서 대상 버킷으로 데이터를 복사하고 동기화합니다. | 역할을 수임한 경우 복사(cp) 또는 동기화(sync) 명령을 사용하여 데이터를 복사S3MigrationRole할 수 있습니다. 복사: aws s3 cp s3://amazon-s3-demo-source-bucket/ \
s3://amazon-s3-demo-destination-bucket/ \
--recursive --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
동기화: aws s3 sync s3://amazon-s3-demo-source-bucket/ \
s3://amazon-s3-demo-destination-bucket/ \
--source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
| 클라우드 관리자 |
문제 해결
| 문제 | Solution |
|---|
ListObjects 작업을 호출할 때 오류(AccessDenied)가 발생했습니다.
| S3MigrationRole 역할을 맡았는지 확인합니다.
aws sts get-caller-identity를 실행하여 사용된 역할을 확인합니다. 출력에에 대한 ARN이 표시되지 않는 경우 IAM 역할을 다시 S3MigrationRole수임하고 다시 시도하십시오.
|
관련 리소스