다른 AWS 계정에 있는 Amazon S3 버킷을 사용하도록 AWS Transfer Family 서버를 구성하려면 어떻게 해야 합니까?

4분 분량
0

계정 A의 AWS Transfer Family 서버가 다른 계정의 Amazon Simple Storage Service(Amazon S3) 버킷, 즉 계정 B에 액세스하도록 하고 싶습니다. 버킷에 대한 교차 계정 액세스 권한으로 내 서버를 설정하려고 합니다.

간략한 설명

다음 단계를 수행합니다.

  1. 계정 A에서 버킷에 대한 액세스 권한이 있는 AWS Identity and Access Management(IAM) 역할을 생성합니다.
  2. 버킷 정책을 업데이트하여 계정 B에서 IAM 역할에 대한 교차 계정 액세스 권한을 부여합니다.
  3. 계정 A에서 IAM 역할로 구성된 Transfer Family 서버 사용자를 생성합니다.
  4. 계정 A의 Transfer Family 서버 사용자가 계정 B의 S3 버킷에 액세스할 수 있는지 확인합니다.
  5. (선택 사항) 계정 B에서 S3 객체 소유권을 버킷 소유자 우선으로 설정합니다.

참고: AWS Transfer Family 콘솔에는 같은 계정에 속한 Amazon S3 버킷만 표시됩니다. 다른 계정의 버킷과 함께 Transfer Family 서버를 사용하려면 AWS Command Line Interface (AWS CLI) 또는 AWS SDK를 사용해야 합니다.

해결 방법

계정 A에서 버킷에 대한 액세스 권한이 있는 IAM 역할 생성

서버 사용자에 대한 IAM 역할을 생성합니다. 역할의 IAM 정책에 대해 다음을 사용합니다.

참고: destination-DOC-EXAMPLE-BUCKET을 서버로 액세스하고자 하는 S3 버킷의 이름으로 교체합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowListingBucketReadandWriteandDelete",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
      ]
    }
  ]
}

참고: Transfer Family에는 교차 계정 S3 업로드를 수행하기 위해 s3:PutObjectAcl 권한이 필요합니다.

IAM 역할을 생성한 후 다음과 비슷한 get-role 명령을 실행하여 해당 역할의 ID를 가져옵니다.

$ aws iam get-role --role-name "ROLE_NAME"

다음 단계에 역할 ID가 필요합니다.

계정 B에서 IAM 역할에 대한 교차 계정 액세스 권한을 부여하도록 버킷 정책을 업데이트합니다.

생성한 IAM 역할에 액세스 권한을 부여하도록 대상 버킷의 정책을 수정합니다. 다음과 비슷한 버킷 정책을 사용할 수 있습니다.

참고: arn:aws:iam::123456789012:root를 서버가 속한 계정의 Amazon 리소스 이름(ARN)으로 교체합니다. destination-DOC-EXAMPLE-BUCKET을 버킷 이름으로 교체합니다. AROA1234567890을 생성한 IAM 역할의 역할 ID로 교체합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BucketPolicyForTransferFamily",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "StringLike": {
          "aws:userId": "AROA1234567890:*"
        }
      }
    }
  ]
}

이 예제 정책의 Condition 요소는 선택 사항입니다. 지정한 IAM 역할에만 버킷 액세스 권한을 부여하려면 Condition 요소를 포함합니다. 또는 요소를 제거하여 서버가 속한 계정의 모든 IAM 역할 및 사용자에게 액세스 권한을 부여합니다.

계정 A에서 IAM 역할로 구성된 Transfer Family 서버 사용자 생성

1.    Transfer Family 서버에 SSH 키를 생성합니다.

2.    서버의 서버 ID를 가져옵니다.

3.    AWS CLI를 사용하여 create-user 명령을 실행합니다. --server-id에 서버의 ID를 입력합니다. -role에 생성한 IAM 역할의 ARN을 입력합니다. --ssh-public-key-body에 SSH 키를 생성할 때 생성한 .pub 파일의 내용을 입력합니다.

$ aws transfer create-user --user-name "MY_SERVER_USER_NAME" --server-id "MY_SERVER_ID"  --role "MY_IAM_ROLE_ARN" --home-directory "/destination-DOC-EXAMPLE-BUCKET/MY_SERVER_USER_NAME" --ssh-public-key-body "CONTENTS_OF_MY_SSH_.PUB_FILE"

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

이 명령은 서버 ID와 생성한 사용자를 반환합니다.

{
  "ServerId": "MY_SERVER_ID",
  "UserName": "MY_SERVER_USER_NAME"
}

중요: 서버 사용자의 액세스를 홈 디렉터리로만 제한하려면 IAM에서 범위 축소 정책을 생성합니다. 그런 다음 서버 사용자의 속성을 편집하여 생성한 범위 축소 정책을 적용합니다.

계정 A의 Transfer Family 서버 사용자가 계정 B의 버킷에 액세스할 수 있는지 확인합니다.

1.    생성한 사용자로 SFTP 서버에 연결합니다. 예를 들어 이 OpenSSH 명령은 SFTP 서버로 연결합니다.

$ sftp -i myserveruser MY_SERVER_USER_NAME@MY_SERVER_ID.server.transfer.us-east-1.amazonaws.com

2.    테스트로 버킷의 홈 디렉터리를 나열합니다. OpenSSH를 사용하는 경우 다음 명령을 실행합니다.

$ ls

명령이 홈 디렉터리를 반환하면 서버 사용자는 버킷에 대한 교차 계정 액세스 권한을 가집니다.

(선택 사항) 계정 B에서 S3 객체 소유권을 버킷 소유자 우선으로 설정합니다.

기본적으로 Amazon S3 객체는 해당 객체를 업로드한 AWS 계정에서 소유합니다. 즉, 대상 버킷에 업로드된 객체는 기본적으로 소스 서버 계정에서 소유합니다.

대상 계정이 교차 계정 업로드로부터 객체를 자동으로 소유하게 활성화하려면 대상 버킷의 S3 객체 소유권을 버킷 소유자 우선으로 설정합니다. 이렇게 하면 AWS Transfer Family 서버를 통해 업로드된 모든 새로운 객체를 자동으로 대상 버킷 계정에서 소유합니다.


관련 정보

CreateUser(AWS Transfer Family 사용 설명서)

사용자 추가(AWS Transfer Family 사용 설명서)

Amazon S3에서 요청에 권한을 부여하는 방법

AWS 공식
AWS 공식업데이트됨 2년 전
댓글 없음