모든 인스턴스가 동일한 IAM 역할을 사용하는 경우 특정 API 호출을 수행한 SageMaker 노트북 인스턴스를 어떻게 확인할 수 있습니까?

4분 분량
0

Amazon SageMaker 노트북 인스턴스가 여러 개 있습니다. 모두 동일한 AWS ID 및 액세스 관리 (IAM) 역할을 사용합니다. 각 API 작업에 대한 AWS CloudTrail 이벤트는 작업을 수행한 노트북 인스턴스와 상관없이 동일한 PrincipalID (세션 이름) 를 표시합니다. 어떤 노트북 인스턴스가 어떤 API 작업을 수행했는지 확인해야 합니다.

간략한 설명

동일한 IAM 역할을 가진 SageMaker 인스턴스가 여러 개 있는 경우 CloudTrail 이벤트는 API 작업을 수행한 인스턴스를 식별하지 않습니다.

다음 예제 CloudTrail 이벤트 로그는 주체 ID를 “SageMaker”로 보여줍니다. 기본적으로 PrincialID는 특정 SageMaker 인스턴스를 식별하지 않습니다.

{    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AAAAAAAAAAAAAAAAAA:SageMaker",

해결 방법

인스턴스를 구분하는 노트북 스크립트를 생성하려면 다음 단계를 수행하십시오.

  1. SageMaker 노트북 인스턴스에 대한 IAM 실행 역할을 생성합니다. 또는 이미 존재하는 실행 역할을 사용하십시오. 다음 단계에서 실행 역할의 Amazon 리소스 이름(ARN)은 arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole입니다. 실행 역할에 대한 ARN은 다를 수 있습니다.

  2. STS:AssumeRole이 포함된 IAM 정책을 실행 역할에 연결합니다. STS:AssumeRole 작업을 사용하면 실행 역할이 다른 세션 이름을 맡을 수 있습니다.

    예시:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Resource": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
        }
      ]
    }

    3. 실행 역할의 신뢰 정책에 다음 권한이 포함되어 있는지 확인합니다.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "sagemaker.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::111122223333:root"
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringLike": {
              "aws:PrincipalArn": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole"
            }
          }
        }
      ]
    }
  3. 다음과 비슷한 노트북 시작 라이프사이클 구성 스크립트를 작성하십시오. 이 예제 스크립트는 노트북 인스턴스 이름을 검색한 다음 이 이름을 세션 이름으로 사용합니다. 자세한 내용은 LCC 스크립트를 사용한 SageMaker 노트북 인스턴스 사용자 지정을 참조하십시오.

    
    #Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
    #Permission is hereby granted, free of charge, to any person obtaining a copy of this
    #software and associated documentation files (the "Software"), to deal in the Software
    #without restriction, including without limitation the rights to use, copy, modify,
    #merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
    #permit persons to whom the Software is furnished to do so.
    
    #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
    #INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
    #PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
    #HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    #OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    #SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    
    #!/bin/bash
    
    set -ex
    
    # Obtain the name of the notebook instance
    nbname=$(jq -r '.ResourceName' /opt/ml/metadata/resource-metadata.json)
    echo "Notebook Name = $nbname"
    
    # Use the AWS Command Line Interface (AWS CLI) to obtain the Amazon Resource Name (ARN) of the IAM execution role
    nbinfo=$(aws sagemaker describe-notebook-instance --notebook-instance-name $nbname)
    nbrole=$(jq -r '.RoleArn' <<< "$nbinfo")
    echo "Notebook Role = $nbrole"
    
    # Obtain the Region of the notebook instance
    nbregion=$(aws configure get region)
    echo "Notebook Region = $nbregion"
    
    # Write Assume Role Provider Settings to a new config file
    echo "Writing new config file"
    cat > /home/ec2-user/.aws/config.new <<EOF1
    [default]
    region=$nbregion
    role_arn = $nbrole
    credential_source = Ec2InstanceMetadata
    role_session_name = $nbname
    sts_regional_endpoints = regional
    EOF1
    
    echo "Moving new config to config file"
    sudo mv /home/ec2-user/.aws/config.new /home/ec2-user/.aws/config
    
    # Secure the "config" file so that it can't be deleted/updated without root user permissions
    sudo chattr +i /home/ec2-user/.aws/config
  4. 다음으로 SageMaker 노트북 인스턴스 (예: test-2)를 만든 다음 이전 단계의 추가 구성에서 만든 수명 주기 구성 스크립트를 연결합니다.
    참고: 루트 액세스를 해제한 상태로 위의 노트북 인스턴스를 만들려면 SageMaker 노트북 인스턴스에 대한 제어 루트 액세스 사용을 참조하십시오.노트북 인스턴스를 생성한 후 rootAccess 필드를 비활성화됨으로 설정합니다. 이 작업을 수행하면 사용자가 구성 파일을 삭제하거나 업데이트할 수 없습니다.

**클라우드트레일에서 노트북 인스턴스를 식별합니다. **

API 작업을 수행한 노트북 인스턴스를 식별하려면 CloudTrail 이벤트를 확인하십시오. UserIdentity 객체 아래에서 PrincialIDarn은 노트북 인스턴스의 이름을 표시합니다.
예를 들어, 다음 이벤트 세부 정보는 SageMaker 노트북 인스턴스 test-2가 API 호출을 수행했음을 보여줍니다.

{
  "eventVersion": "1.05",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "AAAAAAAAAAAAAAAAAAAA:test-2",
    "arn": "arn:aws:sts::111122223333:assumed-role/AmazonSageMaker-ExecutionRole/test-2",
    "accountId": "111122223333",
    "accessKeyId": "AAAAAAAAAAAAAAAAAAAA",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AAAAAAAAAAAAAAAAAAAA",
        "arn": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole",
        "accountId": "111122223333",
        "userName": "AmazonSageMaker-ExecutionRole"
      },
      "webIdFederationData": {},
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2020-09-12T00:45:04Z"
      }
    },
    "invokedBy": "im.amazonaws.com"
  },
  "eventTime": "2020-09-12T00:49:04Z",
  "eventSource": "sagemaker.amazonaws.com",
  "eventName": "CreateEndpoint",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "im.amazonaws.com",
  "userAgent": "im.amazonaws.com",
  "requestParameters": {
    "endpointName": "sagemaker-mxnet-ep",
    "endpointConfigName": "sagemaker-mxnet-epc",
    "tags": []
  },
  "responseElements": {
    "endpointArn": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/sagemaker-mxnet-ep"
  },
  "requestID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "eventID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "eventType": "AwsApiCall",
  "recipientAccountId": "111122223333"
}

관련 정보

세이지메이커 실행 역할을 사용하는 방법

AWS 공식
AWS 공식업데이트됨 한 달 전
댓글 없음