Amazon S3와 RDS for Oracle 통합을 위한 IAM 권한 구성 - Amazon Relational Database Service

Amazon S3와 RDS for Oracle 통합을 위한 IAM 권한 구성

RDS for Oracle이 Amazon S3와 통합되게 하려면 DB 인스턴스에 Amazon S3 버킷에 대한 액세스 권한이 있어야 합니다. DB 인스턴스가 사용하는 Amazon VPC가 Amazon S3 엔드포인트에 대한 액세스 권한을 제공할 필요가 없습니다.

RDS for Oracle은 한 계정의 DB 인스턴스와 다른 계정의 Amazon S3 버킷 간에 파일 전송을 지원합니다. 추가 단계가 필요한 경우 다음 섹션에 설명되어 있습니다.

1단계: Amazon RDS 역할에 대한 IAM 정책 생성

이 단계에서는 Amazon S3 버킷과 RDS DB 인스턴스 간에 파일을 전송하는 데 필요한 권한이 있는 AWS Identity and Access Management(IAM) 정책을 만듭니다. 이 단계에서는 이미 S3 버킷을 생성한 것으로 가정합니다.

정책을 생성하기 전에 다음 정보를 기록해 둡니다.

  • 버킷의 Amazon 리소스 이름(ARN)

  • 버킷에서 SSE-KMS 또는 SSE-S3 암호화를 사용하는 경우 AWS KMS 키에 대한 ARN

    참고

    RDS for Oracle DB 인스턴스는 SSE-C로 암호화된 Amazon S3 버킷에 액세스할 수 없습니다.

자세한 내용은 Amazon Simple Storage Service 사용 설명서의 서버 측 암호화를 사용하여 데이터 보호를 참조하세요.

Amazon S3 버킷에 Amazon RDS 액세스를 허용하는 IAM 정책을 생성하려면
  1. IAM 관리 콘솔을 엽니다.

  2. 액세스 관리에서 정책을 선택합니다.

  3. 정책 생성(Create Policy)을 선택합니다.

  4. [Visual editor] 탭에서 [Choose a service]를 선택한 다음 [S3]을 선택합니다.

  5. 작업에서 모두 확장을 선택한 후 Amazon S3 버킷에서 Amazon RDS(으)로 파일을 전송하는 데 필요한 버킷 권한 및 객체 권한을 선택합니다. 예를 들어, 다음을 수행합니다.

    • 목록을 확장한 후 ListBucket을 선택합니다.

    • 읽기를 확장한 후 GetObject를 선택합니다.

    • 쓰기(Write)를 확장한 다음 PutObjectDeleteObject를 선택합니다.

    • 권한 관리(Permissions management)를 확장한 다음 PutObjectAcl을 선택합니다. 이 권한은 다른 계정에서 소유한 버킷에 파일을 업로드할 계획이고 이 계정이 버킷 콘텐츠를 완전히 제어해야 하는 경우에 필요합니다.

    객체 권한(Object permissions)은 Amazon S3 객체 작업에 대한 권한입니다. 이 권한은 버킷 자체가 아닌 버킷의 객체에 부여해야 합니다. 자세한 내용은 객체 작업에 대한 권한을 참조하세요.

  6. 리소스를 선택하고 다음을 수행합니다.

    1. 특정 항목을 선택합니다.

    2. bucket의 경우 ARN 추가를 선택합니다. 버킷 ARN을 입력합니다. 버킷 이름은 자동으로 입력됩니다. 그런 다음 추가를 선택합니다.

    3. object 리소스가 표시되면 ARN 추가를 선택하여 리소스를 수동으로 추가하거나 임의를 선택합니다.

      참고

      Amazon Resource Name(ARN)(Amazon 리소스 이름(ARN))을 더 구체적인 ARN 값으로 설정하여 Amazon RDS에서 Amazon S3 버킷의 특정 파일 또는 폴더에만 액세스하도록 허용할 수 있습니다. Amazon S3에 대한 액세스 정책을 정의하는 방법에 대한 자세한 내용은 Amazon S3 리소스에 대한 액세스 권한 관리 단원을 참조하십시오.

  7. (선택 사항) 추가 권한 추가를 선택하여 정책에 리소스를 추가합니다. 예를 들어, 다음을 수행합니다.

    1. 버킷이 사용자 지정 KMS 키로 암호화되면 서비스에 대해 KMS를 선택합니다.

    2. 수동 작업의 경우 다음을 선택합니다.

      • 암호화

      • ReEncrypt 시작 지점ReEncrypt 종료 지점

      • Decrypt

      • DescribeKey

      • GenerateDataKey

    3. 리소스에서 특정 항목을 선택합니다.

    4. key의 경우 ARN 추가를 선택합니다. 사용자 지정 키의 ARN을 리소스로 입력한 다음, 추가를 선택합니다.

      자세한 내용은 Amazon Simple Storage Service 사용 설명서AWS Key Management Service(SSE-KMS)에 저장된 KMS 키로 서버 측 암호화를 사용하여 데이터 보호를 참조하세요.

    5. Amazon RDS가 다른 버킷에 액세스하게 하려면 이러한 버킷에 대한 ARN을 추가합니다. 또는 Amazon S3의 모든 버킷 및 객체에 대한 액세스 권한을 부여할 수도 있습니다.

  8. Next: Tags(다음: 태그)를 선택한 후 Next: Review(다음: 검토)를 선택합니다.

  9. 이름에서 IAM 정책의 이름을 입력합니다(예: rds-s3-integration-policy). IAM 역할을 만들어 DB 인스턴스와 연결할 때 이 이름을 사용합니다. Description 값(선택 사항)을 추가할 수도 있습니다.

  10. 정책 생성을 선택합니다.

Amazon RDS에 Amazon S3 버킷에 대한 액세스 권한을 부여하는 AWS Identity and Access Management(IAM) 정책을 생성합니다. 정책을 생성한 후 정책의 ARN을 기록해 둡니다. 이후 단계에 이 ARN이 필요합니다.

필요한 액세스 유형에 따라 정책에 적절한 조치를 포함합니다.

  • GetObject – Amazon S3 버킷에서 Amazon RDS로 파일을 전송하는 데 필요합니다.

  • ListBucket – Amazon S3 버킷에서 Amazon RDS로 파일을 전송하는 데 필요합니다.

  • PutObject – Amazon RDS에서 Amazon S3 버킷으로 파일을 전송하는 데 필요합니다.

다음 AWS CLI 명령은 이 옵션으로 rds-s3-integration-policy라는 IAM 정책을 만듭니다. amzn-s3-demo-bucket이라는 버킷에 대한 액세스 권한을 부여합니다.

대상 LinuxmacOS, 또는Unix:

aws iam create-policy \ --policy-name rds-s3-integration-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'

다음 예제에는 사용자 지정 KMS 키에 대한 사용 권한이 포함되어 있습니다.

aws iam create-policy \ --policy-name rds-s3-integration-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:DescribeKey", ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:kms:::your-kms-arn" ] } ] }'

Windows의 경우:

aws iam create-policy ^ --policy-name rds-s3-integration-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'

다음 예제에는 사용자 지정 KMS 키에 대한 사용 권한이 포함되어 있습니다.

aws iam create-policy ^ --policy-name rds-s3-integration-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt", "kms:GenerateDataKey", "kms:DescribeKey", ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:kms:::your-kms-arn" ] } ] }'

2단계: (선택 사항) Amazon S3 버킷에 대한 IAM 정책 생성

이 단계는 다음 조건에서만 필요합니다.

  • 한 계정(계정 A)에서 Amazon S3 버킷에 파일을 업로드하고 다른 계정(계정 B)에서 액세스할 계획입니다.

  • 계정 B가 버킷을 소유하고 있습니다.

  • 계정 B는 버킷에 로드된 객체를 완전히 제어해야 합니다.

앞서 나온 조건에 해당하지 않는 경우 3단계: DB 인스턴스에 대한 IAM 역할 생성 및 정책 연결으로 건너뜁니다.

버킷 정책을 생성하려면 다음이 있어야 합니다.

  • 계정 A의 계정 ID

  • 계정 A의 사용자 이름

  • 계정 B의 Amazon S3 버킷에 대한 ARN 값

버킷 정책 생성 또는 편집
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 목록에서 버킷 정책을 만들 버킷 이름 또는 버킷 정책을 편집할 버킷 이름을 선택합니다.

  3. Permissions를 선택합니다.

  4. 버킷 정책에서 편집을 선택합니다. 버킷 정책 편집(Edit bucket policy) 페이지가 열립니다.

  5. 버킷 정책 편집 페이지에서 Amazon S3 사용 설명서정책 예제를 탐색하거나 정책 생성기를 선택하여 정책을 자동으로 생성하거나 정책 섹션에서 JSON을 편집합니다.

    정책 생성기(Policy generator)를 선택하면 새 창에서 AWS 정책 생성기가 열립니다.

    1. AWS 정책 생성기 페이지의 정책 유형 선택에서 S3 버킷 정책을 선택합니다.

    2. 제공된 필드에 정보를 입력하여 명령문을 추가한 다음 명령문 추가(Add Statement)를 선택합니다. 명령문을 추가하려는 만큼 반복합니다. 이러한 필드에 대한 자세한 내용은 IAM 사용 설명서IAM JSON 정책 요소 참조를 참조하세요.

      참고

      편의상 버킷 정책 편집(Edit bucket policy) 페이지는 정책(Policy) 텍스트 필드 위에 현재 버킷의 버킷 ARN(Bucket ARN)(Amazon 리소스 이름)을 표시합니다. AWS 정책 생성기 페이지의 명령문에 사용하기 위해 이 ARN을 복사할 수 있습니다.

    3. 명령문 추가를 마친 후 정책 생성(Generate Policy)을 선택합니다.

    4. 생성된 정책 텍스트를 복사하고 닫기(Close)를 선택하고 Amazon S3 콘솔의 버킷 정책 편집(Edit bucket policy) 페이지로 돌아갑니다.

  6. 정책(Policy) 상자에서 기존 정책을 편집하거나 정책 생성기에서 버킷 정책을 붙여 넣습니다. 정책을 저장하기 전에 보안 경고, 오류, 일반 경고 및 제안 사항을 해결해야 합니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-A-ID:account-A-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } ] }
  7. 변경 사항 저장을 선택하면 버킷 권한 페이지로 돌아갑니다.

3단계: DB 인스턴스에 대한 IAM 역할 생성 및 정책 연결

이 단계에서는 1단계: Amazon RDS 역할에 대한 IAM 정책 생성에서 IAM 정책을 생성했다고 가정합니다. 그리고 RDS for Oracle DB 인스턴스에 대한 역할을 생성한 다음 해당 역할에 정책을 연결합니다.

Amazon S3 버킷에 Amazon RDS 액세스를 허용하는 IAM 역할을 생성하려면
  1. IAM 관리 콘솔을 엽니다.

  2. 탐색 창에서 Roles를 선택합니다.

  3. 역할 생성을 선택합니다.

  4. AWS 서비스를 선택합니다.

  5. 기타 AWS 서비스 사용 사례에서 RDS를 선택한 다음 RDS - 데이터베이스에 역할 추가를 선택합니다. 이후 다음을 선택합니다.

  6. 권한 정책검색1단계: Amazon RDS 역할에 대한 IAM 정책 생성에서 생성한 IAM 정책의 이름을 입력하고, 목록에 표시된 정책을 선택합니다. 다음을 선택합니다.

  7. 역할 이름에 IAM 역할의 이름을 입력합니다(예: rds-s3-integration-role). 설명 값(선택 사항)을 추가할 수도 있습니다.

  8. 역할 생성을 선택합니다.

역할을 생성하고 역할에 정책을 연결하는 방법
  1. Amazon RDS가 Amazon S3 버킷에 액세스하기 위해 사용자 대신 가정할 수 있는 IAM 역할을 만듭니다.

    서비스 권한을 특정 리소스로 제한하는 리소스 기반 신뢰 관계의 aws:SourceArnaws:SourceAccount 전역 조건 컨텍스트 키를 사용하는 것이 좋습니다. 이는 혼동된 대리자 문제를 방지하는 가장 효과적인 방법입니다.

    전역 조건 컨텍스트 키를 모두 사용하고 aws:SourceArn 값에 계정 ID가 포함되도록 할 수 있습니다. 이 경우 aws:SourceAccount 값과 aws:SourceArn 값의 계정이 동일한 문에서 사용될 때 동일한 계정 ID를 사용해야 합니다.

    • 단일 리소스에 대한 교차 서비스 액세스를 원하는 경우 aws:SourceArn을 사용하세요.

    • 해당 계정의 모든 리소스가 교차 서비스 사용과 연결되도록 허용하려는 경우 aws:SourceAccount를 사용하세요.

    신뢰 정책에서는 역할에 액세스하는 리소스의 전체 Amazon 리소스 이름(ARN)이 포함된 aws:SourceArn 전역 조건 컨텍스트 키를 사용해야 합니다.

    다음 AWS CLI 명령은 이 목적으로 rds-s3-integration-role이라는 역할을 생성합니다.

    대상 LinuxmacOS, 또는Unix:

    aws iam create-role \ --role-name rds-s3-integration-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": my_account_ID, "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname" } } } ] }'

    Windows의 경우:

    aws iam create-role ^ --role-name rds-s3-integration-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": my_account_ID, "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname" } } } ] }'

    자세한 내용은 IAM 사용 설명서IAM 사용자에게 권한을 위임하기 위한 역할 생성을 참조하십시오.

  2. 역할이 생성되면 역할의 ARN을 기록하십시오. 이후 단계에 이 ARN이 필요합니다.

  3. 생성한 정책을 생성한 역할에 연결하십시오.

    다음 AWS CLI 명령은 정책을 rds-s3-integration-role이라는 역할에 연결합니다.

    대상 LinuxmacOS, 또는Unix:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-integration-role

    Windows의 경우:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-integration-role

    your-policy-arn을 이전 단계에서 기록한 정책 ARN으로 바꾸세요.

4단계: IAM 역할을 RDS for Oracle DB 인스턴스와 연결하는 방법

Amazon S3 통합 권한을 구성하는 마지막 단계는 IAM 역할을 DB 인스턴스와 연결하는 것입니다. 다음과 같은 요구 사항을 확인합니다.

  • 필수 Amazon S3 권한 정책이 연결된 IAM 역할에 대한 액세스 권한이 있어야 합니다.

  • 한 번에 하나의 IAM 역할만 RDS for Oracle DB 인스턴스에 연결할 수 있습니다.

  • DB 인스턴스는 사용 가능 상태여야 합니다.

IAM 역할을 RDS for Oracle DB 인스턴스와 연결하는 방법
  1. https://console.aws.amazon.com/rds/에서 AWS Management Console에 로그인한 후 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 데이터베이스를 선택합니다.

  3. 세부 정보를 표시하고자 하는 RDS for Oracle DB 인스턴스 이름을 선택합니다.

  4. 연결성 및 보안(Connectivity & security) 탭에서 페이지 하단의 IAM 역할 관리(Manage IAM roles) 섹션이 나올 때까지 아래로 스크롤합니다.

  5. IAM 역할을 이 인스턴스에 추가에는 3단계: DB 인스턴스에 대한 IAM 역할 생성 및 정책 연결에서 생성한 역할을 선택합니다.

  6. 기능에서 S3_INTEGRATION을 선택하십시오.

    S3_INTEGRATION 역할 추가
  7. [Add role]을 선택합니다.

다음 AWS CLI 명령은 mydbinstance라는 Oracle DB 인스턴스에 역할을 추가합니다.

대상 LinuxmacOS, 또는Unix:

aws rds add-role-to-db-instance \ --db-instance-identifier mydbinstance \ --feature-name S3_INTEGRATION \ --role-arn your-role-arn

Windows의 경우:

aws rds add-role-to-db-instance ^ --db-instance-identifier mydbinstance ^ --feature-name S3_INTEGRATION ^ --role-arn your-role-arn

your-role-arn을 이전 단계에서 기록한 역할 ARN으로 바꿉니다. S3_INTEGRATION 옵션에 대해 --feature-name을 지정해야 합니다.