내용으로 건너뛰기

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

3분 분량
0

AWS Systems Manager의 기능인 Run Command 출력을 다른 계정에 있는 Amazon Simple Storage Service(Amazon S3) 버킷으로 전송하려고 합니다.

간략한 설명

Run Command를 사용하여 관리형 인스턴스에서 AWS-RunPatchBaseline 및 AWS-RunPowerShellScript와 같은 Systems Manager 문서를 실행할 수 있습니다. 그런 다음 출력을 동일한 계정의 Amazon CloudWatch 및 Amazon S3로 전송하거나, 다른 계정의 S3 버킷으로 전송할 수 있습니다.
Systems Manager가 다른 계정의 S3 버킷에 액세스할 수 있도록 허용하려면 다음 AWS Identity and Access Management(IAM) 및 버킷 정책을 구성하십시오.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

해결 방법

IAM 인스턴스 프로파일 권한

인스턴스 프로파일은 시작 시 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 IAM 역할 정보를 전달하는 컨테이너입니다. 관리형 Amazon EC2 인스턴스에 연결된 IAM 역할에는 S3 버킷에 대한 액세스를 허용하기 위해 다음 작업이 설정되어 있어야 합니다.

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

참고: DOC-EXAMPLE-BUCKET을 대상 계정의 S3 버킷 이름으로 바꾸십시오.

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

대상 S3 버킷 정책

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

경고: 버킷 정책을 생성하는 것이 보안 상 가장 좋습니다. 버킷 ACL에 소스 계정을 추가하면 버킷 정책이 소스 계정의 모든 사용자 및 역할에 S3 버킷에 대한 액세스 권한을 허용하게 됩니다.

다음은 대상 S3 버킷에 대한 버킷 정책 예시입니다.

{
 "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/*"
    }
  ]
}

참고: DOC-EXAMPLE-BUCKET을 대상 계정의 S3 버킷 이름으로 바꾸십시오. SOURCE-AWS-ACCOUNT를 소스 계정 ID로 바꾸십시오. INSTANCE-PROFILE-ROLE-NAME을 EC2 인스턴스에 연결된 IAM 역할 이름으로 바꾸십시오.

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

Systems Manager 콘솔에서 Run Command를 구성하려면 다음 단계를 완료하십시오.

  1. Systems Manager 콘솔을 연 다음, 탐색 창에서 Run Command를 선택합니다.
  2. **Run a command(명령 실행)**를 선택합니다.
  3. 실행하려는 문서를 선택하고 필요한 모든 파라미터를 입력합니다.
  4. **Output Options(출력 옵션)**에서 **Enable an S3 bucket(S3 버킷 활성화)**를 선택합니다. **Enter an S3 bucket name in the text box(텍스트 상자에 S3 버킷 이름 입력)**을 선택한 다음, 대상 계정의 S3 버킷 이름을 입력합니다.
  5. (선택 사항) 명령 출력을 S3 버킷의 하위 폴더로 전송하려면 **S3 키 접두사(S3 key prefix)**에 S3 키 접두사를 입력합니다.

AWS CLI를 사용하여 Run Command를 구성할 때 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 버킷 내의 하위 폴더를 나타냅니다. output-s3-key-prefix 파라미터는 명령 출력을 S3 버킷으로 전송하는 데 필수 사항은 아닙니다. 자세한 내용은 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"

관련 정보

Systems Manager에 필요한 인스턴스 권한 구성

AWS 공식업데이트됨 7달 전