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

최종 업데이트 날짜: 2019년 8월 22일

AWS Transfer for SFTP(AWS SFTP) 서버에서 다른 AWS 계정의 Amazon Simple Storage Service(Amazon S3) 버킷에 액세스하려고 합니다. 버킷에 대한 교차 계정 액세스가 가능하도록 서버를 설정하려면 어떻게 해야 합니까?

간략한 설명

다음 단계를 따르십시오.

  1. 버킷에 대한 액세스 권한이 있는 AWS Identity and Access Management(IAM) 역할을 생성합니다.
  2. IAM 역할에 대한 교차 계정 액세스 권한을 부여하도록 버킷 정책을 업데이트합니다.
  3. IAM 역할로 구성된 SFTP 서버 사용자를 생성합니다.
  4. SFTP 서버 사용자가 버킷에 액세스할 수 있는지 확인합니다.

참고: AWS SFTP 콘솔은 동일한 계정의 S3 버킷만 표시합니다. 다른 계정의 버킷과 함께 SFTP 서버를 사용하려면 AWS CLI(명령줄 인터페이스) 또는 AWS SDK를 사용해야 합니다.

해결 방법

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

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

참고: destination-awsexamplebucket을 SFTP 서버에서 액세스할 S3 버킷의 이름으로 교체합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowListingBucket",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": [
        "arn:aws:s3:::destination-awsexamplebucket"
      ]
    },
    {
      "Sid": "AllowReadandWriteandDelete",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject*",
        "s3:GetObject*",
        "s3:DeleteObject*"
      ],
      "Resource": [
        "arn:aws:s3:::destination-awsexamplebucket/*"
      ]
    }
  ]
}

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

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

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

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

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

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

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BucketPolicyForSFTP",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": [
        "s3:GetObject*",
        "s3:ListBucket",
        "s3:PutObject*",
        "s3:DeleteObject*"
      ],
      "Resource": [
        "arn:aws:s3:::destination-awsexamplebucket",
        "arn:aws:s3:::destination-awsexamplebucket/*"
      ],
      "Condition": {
        "StringLike": {
          "aws:userId": "AROA1234567890:*"
        }
      }
    }
  ]
}

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

IAM 역할로 구성된 SFTP 서버 사용자 생성

1.    SFTP 서버에 대한 SSH 키를 생성합니다.

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

3.    다음과 비슷한 AWS CLI(명령줄 인터페이스)를 사용하여 create-user 명령을 실행합니다.

참고: -server-id에 SFTP 서버의 ID를 입력합니다. -role에 생성한 IAM 역할의 ARN을 입력합니다. -ssh-public-key-body에 SSH 키를 생성할 때 생성한 .pub 파일의 내용을 입력합니다.

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

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

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

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

SFTP 서버 사용자가 버킷에 액세스할 수 있는지 확인

1.    생성한 사용자로 SFTP 서버에 연결합니다. 예를 들어, 다음 OpenSSH 명령을 실행하여 서버에 연결합니다.

$ sftp -i mysftpuser MY_SFTP_USER_NAME@MY_SERVER_ID.server.transfer.us-east-1.amazonaws.com

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

$ ls 

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


CreateUser(AWS Transfer for SFTP 사용 설명서)

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

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

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?