IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용
사용자 또는 역할이 DB 인스턴스에 연결할 수 있도록 허용하려면 IAM 정책을 생성해야 합니다. 그런 다음 정책을 권한 세트 또는 역할에 연결합니다.
참고
IAM 정책에 대한 자세한 정보는 Amazon RDS의 자격 증명 및 액세스 관리 단원을 참조하십시오.
다음은 사용자가 IAM 데이터베이스 인증 방식을 사용해 DB 인스턴스 에 연결할 수 있도록 허용하는 정책 예제입니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-east-2:1234567890:dbuser:db-ABCDEFGHIJKL01234/db_user" ] } ] }
중요
관리자 권한이 있는 사용자는 IAM 정책에서 명시적 권한 없이도 DB 인스턴스에 액세스할 수 있습니다. DB 인스턴스에 대한 관리자 액세스를 제한하고 싶은 경우에는 더 적은 적정 권한을 가진 IAM 역할을 생성하고 이를 관리자에게 할당할 수 있습니다.
참고
rds-db:
접두사를 rds:
로 시작하는 다른 RDS API 작업 접두사와 혼동하지 마십시오. rds-db:
접두사와 rds-db:connect
작업은 IAM 데이터베이스 인증 전용입니다. 다른 컨텍스트에서는 유효하지 않습니다.
위의 예제 정책에는 다음 요소와 함께 단일 문이 포함되어 있습니다.
-
Effect
–Allow
를 지정하여 DB 인스턴스에 대한 액세스를 부여합니다. 액세스를 명시적으로 허용하지 않으면 액세스가 기본적으로 거부됩니다. -
Action
–rds-db:connect
를 지정하여 DB 인스턴스에 대한 연결을 허용합니다. -
Resource
– 하나의 DB 인스턴스의 한 데이터베이스 계정을 기술하는 Amazon 리소스 이름(ARN)을 지정합니다. ARN 형식은 다음과 같습니다.arn:aws:rds-db:
region
:account-id
:dbuser:DbiResourceId
/db-user-name
이 형식에서 다음 항목을 교체합니다.
-
은 DB 인스턴스의 AWS 리전입니다. 정책 예제에서 사용되는 AWS 리전은region
us-east-2
입니다. -
은 DB 인스턴스의 AWS 계정 번호입니다. 정책 예제에서 사용되는 계정 번호는account-id
1234567890
입니다. 사용자는 DB 인스턴스의 계정과 동일한 계정에 있어야 합니다.크로스 계정 액세스를 수행하려면 DB 인스턴스의 계정에서 위에 있는 정책을 사용하여 IAM 역할을 생성하고 다른 계정이 해당 역할을 맡도록 허용합니다.
-
는 DB 인스턴스의 식별자입니다. 이 식별자는 AWS 리전에 고유하며, 절대로 바뀌지 않습니다. 정책 예제에서 사용되는 식별자는DbiResourceId
db-ABCDEFGHIJKL01234
입니다.Amazon RDS용 AWS Management Console에서 DB 인스턴스 리소스 ID를 찾으려면 DB 인스턴스를 선택하여 세부 정보를 확인하세요. 그런 다음 구성 탭을 선택합니다. 그러면 리소스 ID가 구성 섹션에 표시됩니다.
그 밖에 다음과 같이 AWS CLI 명령을 사용하여 현재 AWS 리전에 속한 모든 DB 인스턴스의 식별자와 리소스 ID 목록을 조회하는 방법도 있습니다.
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier,DbiResourceId]"
Amazon Aurora를 사용하는 경우
DbiResourceId
대신DbClusterResourceId
를 지정하세요. 자세한 내용은 Amazon Aurora 사용 설명서에서 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용을 참조하세요.참고
RDS 프록시를 통해 데이터베이스에 연결하는 경우, 프록시 리소스 ID(예:
prx-ABCDEFGHIJKL01234
)를 지정합니다. RDS 프록시에서 IAM 데이터베이스 인증을 사용하는 방법에 대한 자세한 내용은 IAM 인증을 사용하여 프록시에 연결 단원을 참조하십시오. -
은 IAM 인증과 연결할 데이터베이스 계정 이름입니다. 정책 예제에서 사용되는 데이터베이스 계정은db-user-name
db_user
입니다.
-
다른 ARN을 구성하여 다양한 액세스 패턴을 지원할 수 있습니다. 다음 정책에서는 DB 인스턴스에서 서로 다른 데이터베이스 계정 2개에 대한 액세스를 허용합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-east-2:123456789012:dbuser:db-ABCDEFGHIJKL01234/jane_doe", "arn:aws:rds-db:us-east-2:123456789012:dbuser:db-ABCDEFGHIJKL01234/mary_roe" ] } ] }
다음 정책에서는 "*" 문자를 사용하여 특정 AWS 계정과 AWS 리전의 모든 DB 인스턴스 및 데이터베이스 계정을 일치시킵니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-east-2:1234567890:dbuser:*/*" ] } ] }
다음 정책은 특정 AWS 계정과 AWS 리전의 모든 DB 인스턴스를 일치시킵니다. 하지만 정책에 따라 jane_doe
데이터베이스 계정을 가지고 있는 DB 인스턴스에게만 액세스 권한이 부여됩니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-east-2:123456789012:dbuser:*/jane_doe" ] } ] }
사용자 또는 역할은 데이터베이스 사용자가 액세스할 수 있는 데이터베이스에만 액세스할 수 있습니다. 예를 들어 DB 인스턴스에 이름이 dev인 데이터베이스와 test인 데이터베이스가 있다고 가정하겠습니다. 이때 데이터베이스 사용자인 jane_doe
가 dev에 대한 액세스 권한만 가지고 있다면 사용자 jane_doe
와 함께 해당 DB 인스턴스에 액세스하는 모든 사용자 또는 역할도 dev 액세스 권한만 갖게 됩니다. 이러한 액세스 제한은 테이블, 뷰 등 다른 데이터베이스 객체에 대해서도 똑같이 적용됩니다.
관리자는 지정된 필요한 리소스에서 특정 API 작업을 수행할 수 있는 권한을 엔티티에 부여하는 IAM 정책을 생성해야 합니다. 그런 다음 관리자는 해당 권한이 필요한 권한 세트 또는 역할에 이러한 정책을 연결해야 합니다. 정책에 대한 예시는 Amazon RDS 자격 증명 기반 정책 예 단원을 참조하십시오.
권한 세트 또는 역할에 IAM 정책 연결
데이터베이스 인증을 위한 IAM 정책을 생성하였으면 이제 정책을 권한 세트 또는 역할에 연결해야 합니다. 이번 주제에 대한 자습서는 IAM 사용자 안내서의 첫 번째 고객 관리형 정책 생성 및 연결을 참조하십시오.
자습서를 읽어보면 이번 단원에서 소개하는 정책 예제 중 한 가지를 출발점으로 자신만의 요건에 따라 지정하여 사용할 수 있습니다. 자습서를 끝까지 따르다 보면 연결된 정책을 통해 rds-db:connect
작업이 가능한 권한 세트를 얻게 될 것입니다.
참고
여러 권한 세트 또는 역할을 동일한 데이터베이스 사용자 계정에 매핑할 수 있습니다. 예를 들어 IAM 정책이 다음과 같은 리소스 ARN을 지정하였다고 가정하겠습니다.
arn:aws:rds-db:us-east-2:123456789012:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe
Jane, Bob 및 Diego에게 정책을 연결하면 각 사용자는 jane_doe
데이터베이스 계정을 사용하여 지정된 DB 인스턴스에 연결할 수 있습니다.