IAM 및 EFS 액세스 포인트로 특정 EC2 인스턴스에 대한 디렉터리 액세스 권한을 부여하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2023년 1월 18일

AWS Identity and Access Management(AWS IAM) 및 Amazon Elastic File System(Amazon EFS)를 사용하여 특정 Amazon Elastic Compute Cloud(Amazon EC2) Amazon 인스턴스에 디렉터리 액세스 권한을 부여하고 싶습니다.

간략한 설명

여러 인스턴스에 동일한 파일 시스템을 사용하고 Amazon EFS 액세스 포인트를 통해 특정 디렉터리에 대한 액세스 권한을 부여합니다. 액세스 포인트와 IAM을 사용하여 디렉터리에 대한 액세스를 제어하려면 다음을 수행해야 합니다.

1.    파일 시스템에 대한 Amazon EFS 액세스 포인트를 생성합니다.

2.    각 인스턴스에 대한 IAM 정책을 생성할 수 있는 ClientMountClientWrite 권한을 부여합니다. 그런 다음 정책에 대한 역할을 생성합니다.

3.    파일 시스템에 대한 Amazon EFS 정책을 만듭니다.

4.    구성을 테스트합니다.

해결 방법

요구 사항

1.    파일 시스템에 사용되는 동일한 VPC에 두 개의 Amazon EC2 인스턴스가 있어야 하거나 또는 파일 시스템에 연결할 수 있는지 확인해야 합니다. 가장 좋은 방법은 최신 Amazon Linux 2 AMI를 사용하는 것입니다. 인스턴스에 연결된 보안 그룹은 포트 2049에서 Amazon EFS를 향한 아웃바운드 액세스를 허용해야 합니다.

2.    파일 시스템을 마운트하기 전에 Amazon EC2 보안 그룹으로부터의 인바운드 NFS 액세스를 허용하는 규칙을 마운트 대상 보안 그룹에 추가하세요. 자세한 내용은 Amazon EC2 인스턴스 및 마운트 대상에 VPC 보안 그룹 사용을 참조하세요.
참고: 파일 시스템의 DNS 이름을 마운트 옵션으로 사용하는 것이 가장 좋습니다. 파일 시스템 DNS 이름은 연결하는 EC2 인스턴스의 가용 영역에 있는 탑재 대상의 IP 주소로 자동 확인됩니다. 콘솔에서 파일 시스템 DNS 이름을 가져옵니다. 또는 파일 시스템 ID가 있는 경우 다음 예시를 사용하여 파일 시스템 DNS 이름을 구성합니다.

file-system-id.efs.aws-region.amazonaws.com

3.    EFS FQDN이나 짧은 이름으로 마운트하는 클라이언트 시스템에서 연결을 테스트하려면 다음 중 하나를 수행해야 합니다.

  • telnet 2049를 수행합니다.
  • amazon-efs-utils가 필요하지 않은 EFS FQDN을 사용하여 EFS를 NFS 유형으로 마운트합니다.

다음 명령은 파일 시스템을 두 EC2 인스턴스에 모두 마운트합니다.

sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.efs.ap-southeast-2.amazonaws.com:/ /efs

참고: 예시 파일 시스템을 파일 시스템으로 교체하세요.

마운트하여 테스트하는 경우 마운트한 후 파일 시스템과 모든 EC2 인스턴스에서 umount 명령을 실행합니다. umount가 실행되지 않은 경우 나중에 EFS 정책을 적용할 때 실수를 하면 I/O 오류가 발생합니다.

sudo umount /efs

4.    Amazon EFS에서 액세스 포인트 및 IAM 정책을 사용하려면 amazon-efs-utils 도구가 필요합니다. amazon-efs-utils를 설치하려면 다음 명령을 실행합니다.

sudo yum install -y amazon-efs-utils

Amazon Linux 2가 아닌 다른 배포판을 실행하고 Amazon-efs-utils에 대한 설치 지침이 필요한 경우 amazon-efs-utils 도구 사용을 참조하세요. 또한 GitHub와 같은 타사의 소스 코드도 확인하세요.

Amazon EFS 액세스 포인트 생성

중요: 이 해결 방법에서는 액세스 포인트나 IAM 정책 없이 이미 Amazon EFS를 생성했다고 가정합니다. 파일 시스템에 연결된 보안 그룹이 사용 중인 EC2 인스턴스의 포트 2049에서 인바운드 액세스를 허용하는지 확인합니다.

참고: 예시 이름(App_team 및 DB_team)을 리소스 이름으로 바꾸세요.

1.    Amazon EFS 콘솔을 엽니다.

2.    [파일 시스템(File systems)]을 선택하고 액세스를 관리할 파일 시스템을 선택한 다음 [세부정보 보기(View details)]를 선택합니다.

3.    [액세스 포인트(Access points)]를 선택한 다음 [액세스 포인트 생성(Create access point)]을 선택합니다.

4.    Name(이름) 및 Root directory path(루트 디렉터리 경로)를 입력하여 첫 번째 액세스 포인트를 생성합니다. 예를 들어, 다음과 같습니다.

이름: App_team_AP

루트 디렉터리 경로: /App_team

참고: Amazon EFS에서는 디렉터리에 OwnUid, OwnGID 및 권한이 지정된 경우에만 액세스 포인트 루트 디렉터리를 생성합니다. 이 정보를 제공하지 않으면 Amazon EFS가 루트 디렉터리를 생성하지 않습니다. 루트 디렉터리가 없는 경우 액세스 포인트를 사용하여 마운트를 시도하면 실패하고 ''b'mount.nfs4: access denied by server while mounting 127.0.0.1:/('b'mount.nfs4: 127.0.0.1:/을 마운트하는 동안 서버에서 액세스가 거부되었습니다.)와 같은 오류 메시지가 표시됩니다.

액세스 포인트 루트 디렉터리의 소유권 및 권한을 지정하지 않으면 Amazon EFS가 루트 디렉터리를 생성하지 않습니다. 액세스 포인트를 마운트하려는 모든 시도가 실패하고 'access denied'(액세스가 거부되었습니다)라는 오류가 발생합니다. 자세한 내용은 EFS의 루트 디렉터리 액세스 포인트 적용을 참조하세요.

5.    [액세스 포인트 생성(Create access point)]을 선택합니다.

6.    2단계부터 4단계까지 반복하여 두 번째 액세스 포인트를 만듭니다. 예를 들어, 다음과 같습니다.

이름: DB_team_AP

루트 디렉터리 경로: /DB_team

7.    Create access point(액세스 포인트 생성)을 선택합니다.

8.    액세스 포인트 ID를 알아두세요. 액세스 포인트 ID는 다음 예와 유사합니다.

액세스 포인트 ID: fsap-0093c87d798ae5ccb

참고: 액세스 포인트를 사용하여 액세스 포인트를 통해 이루어진 모든 파일 시스템 요청에 대해 POSIX ID(사용자 ID, 그룹 ID)를 적용할 수도 있습니다. 이 기능을 활성화하려면 액세스 포인트를 만들 때 사용자 및 그룹 ID를 지정하세요. 자세한 내용은 액세스 포인트를 사용하여 사용자 ID 강제 적용을 참조하세요.

인스턴스에 대한 IAM 정책 및 역할 생성

1.    IAM 콘솔을 엽니다.

2.    각 인스턴스에 대한 IAM 정책을 생성합니다. 다음 정책은 ClientMountClientWrite 권한을 부여합니다. 이러한 정책을 참조로 사용할 수 있습니다. 먼저 이 예시의 Resource에 표시된 값을 리소스의 ARN으로 바꾸세요. 그런 다음 파일 시스템 ID와 액세스 포인트 ID를 올바른 값으로 바꿉니다. 예를 들어, 다음과 같습니다.

App_team_policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticfilesystem:ClientMount",
        "elasticfilesystem:ClientWrite"
      ],
      "Resource": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:file-system/fs-8ce001b4",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:access-point/fsap-0093c87d798ae5ccb"
        }
      }
    }
  ]
}

DB_team_policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticfilesystem:ClientMount",
        "elasticfilesystem:ClientWrite"
      ],
      "Resource": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:file-system/fs-8ce001b4",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:access-point/fsap-054969ebbe52a6121"
        }
      }
    }
  ]
}

3.    [역할(Roles)]을 선택한 다음, [역할 생성(Create role)]을 선택합니다.

4.    사용 사례로 [EC2]를 선택하고 [다음: 권한(Next: Permissions)]을 선택합니다.

5.    방금 생성한 정책 중 하나를 선택하고 [다음: 태그(Next: Tags)]를 선택합니다.

6.    [Next: Review]를 선택합니다.

7.    Role name(역할 이름)을 입력한 후 Create role(역할 생성)을 선택합니다. 예를 들어, 다음과 같습니다.

역할 이름: App_team_role

정책: App_team_policy

8.    두 번째 정책에 대해 3~7단계를 반복합니다. 예를 들어, 다음과 같습니다.

역할 이름: DB_team_role

정책: DB_team_policy

EFS 정책 생성

1.    Amazon EFS 콘솔을 엽니다.

2.    [파일 시스템(File systems)]을 선택한 다음 [세부 정보 보기(View Details)]를 선택합니다.

3.    [파일 시스템 정책(File system policy)]을 선택한 다음 [정책(Policy)] 섹션에서 [편집(Edit)]을 선택합니다.

4.    생성한 액세스 포인트에 대해 ClientMountClientWrite를 허용하려면 다음 정책을 추가합니다. 리소스의 ARN으로 리소스를 업데이트하고 파일 시스템 ID 및 액세스 포인트 ID를 올바른 값으로 바꿔야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "elasticfilesystem:ClientMount",
        "elasticfilesystem:ClientWrite"
      ],
      "Resource": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:file-system/fs-8ce001b4",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:role/DBA_team_role",
          "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:access-point/fsap-054969ebbe52a6121"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "elasticfilesystem:ClientMount",
        "elasticfilesystem:ClientWrite"
      ],
      "Resource": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:file-system/fs-8ce001b4",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:role/App_team_role",
          "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:access-point/fsap-0093c87d798ae5ccb"
        }
      }
    }
  ]
}

5.    [저장(Save)]을 선택합니다. 파일 시스템을 사용할 준비가 되었습니다.

구성 테스트

1.    Amazon EC2 인스턴스에 IAM 역할을 연결하지 않고도 Amazon EC2 인스턴스(이 예에서는 DB_team 인스턴스)에 액세스할 수 있습니다.

2.    mount 명령을 NFS 유형으로 사용하여 파일 시스템을 마운트를 시도해 보세요. 파일 시스템 수준 리소스 기반 액세스 정책을 사용하는 경우 다음과 비슷한 오류 메시지가 나타납니다.

sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-8ce001b4.efs.ap-southeast-2.amazonaws.com:/ /efs
        
mount.nfs4: access denied by server while mounting fs-8ce001b4.efs.ap-southeast-2.amazonaws.com:/

3.    이 Amazon EC2 인스턴스에 대해 생성한 역할(이 예에서는 DB_team_role)을 Amazon EC2 콘솔을 사용하여 DB_team Amazon EC2 인스턴스에 할당합니다. 자세한 내용은 기존 IAM 역할을 EC2 인스턴스에 할당하려면 어떻게 해야 합니까?를 참조하세요. Amazon EC2 인스턴스에 프로필 역할로 역할을 할당할 수 없는 경우 지정된 프로필을 액세스 포인트와 함께 마운트 옵션으로 사용하여 IAM을 마운트할 수 있습니다. 예를 들어, 다음과 같습니다.

sudo mount -t efs -o tls,iam,awsprofile=namedprofile,accesspoint=fsap- file-system-id efs-mount-point/

4.    mount 명령을 실행하여 생성한 두 번째 액세스 포인트(이 예에서는 DB_team_AP)를 사용하여 파일 시스템을 마운트합니다. 파일 시스템이 성공적으로 마운트되면 인스턴스 역할이 권한을 부여합니다.

sudo mount -t efs -o tls,accesspoint=fsap-054969ebbe52a6121,iam fs-8ce001b4:/ /efs

5.    umount 명령을 실행하여 파일 시스템의 마운트를 해제합니다.

sudo umount /efs

6.    DB_team_role이 할당된 동일한 Amazon EC2 인스턴스에서 생성한 첫 번째 액세스 포인트(예: App_team_AP)를 사용하여 파일 시스템을 마운트합니다. 예상대로 EFS 액세스 정책 및 IAM 역할 호출로 인해 마운트 작업이 거부되었습니다.

sudo mount -t efs -o tls,accesspoint=fsap-0093c87d798ae5ccb,iam fs-8ce001b4:/ /efs 

mount.nfs4: access denied by server while mounting 127.0.0.1:/

7.    SSH를 사용하여 App_team 인스턴스에 연결하고 이전 단계를 수행합니다. App_team_role을 사용하는 동안에는 DB_team_AP를 사용하여 파일 시스템을 마운트할 수 없습니다.

이제 파일 시스템은 관련된 EC2 인스턴스가 필요한 IAM 역할을 사용하는 경우에만 마운트를 허용합니다.

sudo mount -t efs -o tls,accesspoint=fsap-0093c87d798ae5ccb,iam fs-8ce001b4:/ /efs

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


결제 또는 기술 지원이 필요하세요?