다른 AWS 계정의 S3 버킷으로 출력을 전송하도록 AWS Systems Manager Run Command를 구성하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 9월 12일

AWS Systems Manager Run Command 출력을 다른 AWS 계정의 Amazon Simple Storage Service(S3) 버킷으로 전송하려고 합니다. 어떻게 해야 하나요?

해결 방법

AWS Systems Manager Run Command를 사용하여 AWS-RunPatchBaselineAWS-RunPowerShellScript와 같은 Systems Manager 문서를 관리형 인스턴스에서 실행할 수 있습니다. 그런 다음 출력을 동일한 AWS 계정의 Amazon CloudWatch 및 Amazon S3 또는 다른 AWS 계정의 S3 버킷으로 전송할 수 있습니다.

Systems Manager가 다른 AWS 계정의 S3 버킷에 액세스할 수 있도록 허용하려면 다음 AWS Identity and Access Management(IAM) 및 버킷 정책을 구성합니다.

IAM 인스턴스 프로파일에 대한 권한

인스턴스 프로파일은 시작 시 IAM 역할 정보를 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 전달하는 컨테이너입니다. S3 버킷에 대한 액세스를 허용하려면 관리형 EC2 인스턴스에 연결된 IAM 역할에 다음 작업을 수행해야 합니다. DOC-EXAMPLE-BUCKET을 대상 계정의 S3 버킷 이름으로 바꿉니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:PutObjectAcl"
      ],
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

특정 시나리오에 필요한 S3 권한에 대한 자세한 내용은 S3 버킷 액세스에 대한 사용자 지정 정책 생성을 참조하세요.

대상 S3 버킷 정책

대상 S3 버킷은 관리형 EC2 인스턴스에 연결된 인스턴스 프로파일 역할이 버킷에 액세스하도록 허용해야 합니다. 버킷 정책을 생성하거나 버킷 액세스 제어 목록(ACL)의 소스 AWS 계정에 대한 액세스 권한을 부여할 수 있습니다.

경고: 버킷 정책을 생성하는 것이 좋습니다. 버킷 ACL에 소스 AWS 계정을 추가하면 소스 AWS 계정의 모든 사용자와 역할이 S3 버킷에 액세스할 수 있습니다.

다음은 대상 S3 버킷에 대한 버킷 정책의 예입니다. DOC-EXAMPLE-BUCKET을 대상 계정의 S3 버킷 이름으로 바꿉니다. SOURCE-AWS-ACCOUNT를 소스 AWS 계정 ID로 바꿉니다. INSTANCE-PROFILE-ROLE-NAME을 EC2 인스턴스에 연결된 IAM 역할 이름으로 바꿉니다.

{
  "Version": "2012-10-17",
  "Id": "Policy1589684413780",
  "Statement": [
    {
      "Sid": "Stmt1589684412557",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::SOURCE-AWS-ACCOUNT:role/INSTANCE-PROFILE-ROLE-NAME"
      },
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

명령 출력을 Amazon S3로 전송하도록 Run Command 구성

AWS Systems Manager 콘솔

1.    Systems Manager 콘솔을 열고 탐색창에서 Run Command를 선택합니다.

2.    Run command를 선택합니다.

3.    실행할 문서를 선택하고 필요한 모든 파라미터를 입력합니다.

4.    출력 옵션의 경우 S3 버킷 활성화를 선택합니다. 텍스트 상자에 S3 버킷 이름 입력을 선택한 다음, 대상 계정에 S3 버킷의 이름을 입력합니다.

5.    (선택 사항) 명령 출력을 S3 버킷의 하위 폴더로 전송하려면 S3 키 접두사(S3 key prefix)에 S3 키 접두사를 입력합니다.

AWS CLI

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

AWS CLI에서 SendCommand API 호출을 실행할 때 다음 파라미터를 추가하여 출력 옵션을 지정할 수 있습니다.

--output-s3-bucket-name "DOC-EXAMPLE-BUCKET" --output-s3-key-prefix "DOC-EXAMPLE-BUCKET-PREFIX"

참고: 앞의 파라미터 예시에서 DOC-EXAMPLE-BUCKET은 대상 계정에 있는 S3 버킷의 이름입니다. DOC-EXAMPLE-BUCKET-PREFIX는 응답을 저장할 S3 버킷 내의 하위 폴더를 나타냅니다. 명령 출력을 S3 버킷으로 전송하는 데 output-s3-key-prefix 파라미터가 필요하지 않습니다. 자세한 내용은 send-command를 참조하세요.

다음 AWS CLI 예시는 AWS-RunPowerShellScript 문서를 사용하여 Key=tag:Env,Values=Dev,Test로 태그가 지정된 관리형 인스턴스에서 echo helloWorld를 원격으로 실행하는 명령을 시작합니다. 명령 출력은 대상 계정의 DOC-EXAMPLE-BUCKET이라는 이름의 S3 버킷으로 전송되고 접두사 DOC-EXAMPLE-BUCKET-PREFIX라는 이름의 하위 폴더에 저장됩니다.

aws ssm send-command --document-name "AWS-RunPowerShellScript" --parameters '{"commands":["echo helloWorld"]}'  --targets '[{"Key":"tag:Env","Values":["Dev","Test"]}]' --output-s3-bucket-name "DOC-EXAMPLE-BUCKET" --output-s3-key-prefix "DOC-EXAMPLE-BUCKET-PREFIX"

이 문서가 도움이 되었나요?


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