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

최종 업데이트 날짜: 2020년 9월 2일

특정 Amazon Elastic Compute Cloud Amazon(Amazon EC2) 인스턴스에 대한 디렉터리 액세스 권한을 부여하고 싶습니다. AWS Identity and Access Management(IAM) 역할 및 정책과 Amazon Elastic File System(Amazon EFS) 액세스 포인트를 사용하려면 어떻게 해야 합니까?

간략한 설명

Amazon EFS 액세스 포인트를 사용하면 다른 인스턴스에 대해 동일한 파일 시스템을 사용할 수 있으며 필수 디렉터리에만 액세스 권한을 부여할 수 있습니다. 액세스 포인트와 IAM을 사용하여 디렉터리에 대한 액세스를 제어하려면 다음을 수행해야 합니다.

  1. 파일 시스템에 대한 Amazon EFS 액세스 포인트를 생성합니다.
  2. ClientMountClientWrite 권한을 부여하는 각 인스턴스에 대해 IAM 정책을 생성한 다음 정책에 대한 역할을 만듭니다.
  3. 파일 시스템에 대한 EFS 정책을 만듭니다.
  4. 구성을 테스트합니다.

요구 사항

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

2.    다음 마운트 명령을 사용하여 설치가 제대로 구성되었는지 확인합니다. 이 명령은 파일 시스템을 두 EC2 인스턴스에 모두 마운트합니다. 예제 파일 시스템을 사용자의 파일 시스템으로 바꿉니다.

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

3.    파일 시스템 및 모든 인스턴스에서 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에 대한 설치 지침이 필요한 경우 다른 Linux 배포에 amazon-efs-utils 패키지 설치를 참조하십시오. 

해결 방법

다음 사항에 유의하십시오.

  • 다음 해결 방법에서는 액세스 포인트 또는 IAM 정책 없이 Amazon EFS를 이미 생성했다고 가정합니다. 파일 시스템에 연결된 보안 그룹이 사용 중인 인스턴스에 대해 포트 2049에서 인바운드 액세스를 허용하는지 확인합니다.
  • 다음 해결 방법에서는 몇 가지 단계에서 예제를 제공합니다. 예제 이름은 APP_team 및 DB_team입니다. 이러한 예제 이름을 사용자의 리소스 이름으로 바꿉니다.

Amazon EFS 액세스 포인트 생성

1.    Amazon EFS 콘솔을 엽니다.

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

3.    [액세스 지점(Access points)]을 선택한 다음 [액세스 포인트 만들기(Create access point)]를 선택합니다.

4.    [이름(Name)] 및 [루트 디렉터리 경로(Root directory path)]를 입력하여 첫 번째 액세스 포인트를 만듭니다.

예제

이름: App_team_AP
루트 디렉터리 경로: /App_team

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

6.    2단계부터 4단계까지 반복하여 두 번째 액세스 포인트를 만듭니다.

예제

이름: DB_team_AP
루트 디렉터리 경로: /DB_team

7.    [액세스 포인 만들기(Create access point)]를 선택합니다. 액세스 포인트 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.    생성한 액세스 포인트에 대해 ClientMount ClientWrite를 허용하려면 다음 정책을 추가합니다. 리소스의 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:instance-profile/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:instance-profile/App_team_role",
                    "elasticfilesystem:AccessPointArn": "arn:aws:elasticfilesystem:ap-southeast-2:123456789012:access-point/fsap-0093c87d798ae5ccb"
                }
            }
        }
    ]
}

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

구성 테스트

1.    모든 IAM 역할을 인스턴스에 연결하지 않은 상태로 인스턴스(이 예에서는 DB_team 인스턴스)에 액세스합니다.

2.    파일 시스템을 마운트해 봅니다. 다음과 유사한 오류 메시지가 나타납니다.

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)을 DB_team 인스턴스에 할당합니다. 자세한 내용은 EC2 인스턴스에 기존 IAM 역할을 할당하려면 어떻게 해야 합니까?를 참조하십시오.

4.    생성한 첫 번째 액세스 포인트(이 예에서는App_team_AP)를 사용하여 파일 시스템을 마운트합니다.

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:/

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

sudo umount /efs

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

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

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

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


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


결제 또는 기술 지원이 필요합니까?