모든 인스턴스가 동일한 IAM 역할을 사용하는 경우 특정 API 호출을 수행한 SageMaker 노트북 인스턴스를 어떻게 확인할 수 있습니까?
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",
해결 방법
인스턴스를 구분하는 노트북 스크립트를 생성하려면 다음 단계를 수행하십시오.
-
SageMaker 노트북 인스턴스에 대한 IAM 실행 역할을 생성합니다. 또는 이미 존재하는 실행 역할을 사용하십시오. 다음 단계에서 실행 역할의 Amazon 리소스 이름(ARN)은 arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole입니다. 실행 역할에 대한 ARN은 다를 수 있습니다.
-
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" } } } ] }
-
다음과 비슷한 노트북 시작 라이프사이클 구성 스크립트를 작성하십시오. 이 예제 스크립트는 노트북 인스턴스 이름을 검색한 다음 이 이름을 세션 이름으로 사용합니다. 자세한 내용은 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
-
다음으로 SageMaker 노트북 인스턴스 (예: test-2)를 만든 다음 이전 단계의 추가 구성에서 만든 수명 주기 구성 스크립트를 연결합니다.
참고: 루트 액세스를 해제한 상태로 위의 노트북 인스턴스를 만들려면 SageMaker 노트북 인스턴스에 대한 제어 루트 액세스 사용을 참조하십시오.노트북 인스턴스를 생성한 후 rootAccess 필드를 비활성화됨으로 설정합니다. 이 작업을 수행하면 사용자가 구성 파일을 삭제하거나 업데이트할 수 없습니다.
**클라우드트레일에서 노트북 인스턴스를 식별합니다. **
API 작업을 수행한 노트북 인스턴스를 식별하려면 CloudTrail 이벤트를 확인하십시오. UserIdentity 객체 아래에서 PrincialID와 arn은 노트북 인스턴스의 이름을 표시합니다.
예를 들어, 다음 이벤트 세부 정보는 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" }
관련 정보
관련 콘텐츠
- 질문됨 일 년 전lg...
- 질문됨 7달 전lg...
- AWS 공식업데이트됨 3년 전