Kiro와 IAM(자격 증명 및 액세스 관리)의 동작 방식

AWS IAM의 개념과, Kiro 관리자를 위한 권한을 어떻게 구성하는지 설명합니다.

Kiro 콘솔에 접근하고 Kiro 구독과 관련된 작업을 수행하려면 AWS Identity and Access Management(IAM)를 통해 프로비저닝된 권한이 필요합니다. AWS IAM은 관리자가 AWS 리소스에 대한 액세스를 안전하게 제어하도록 돕는 AWS 서비스이며, 추가 비용 없이 사용할 수 있습니다.

액세스를 허용하려면 필요한 권한을 담은 자격 증명 기반 정책(identity-based policy)을 만들어, Kiro 구독을 구성하는 IAM 자격 증명에 연결하면 됩니다. 자세한 내용은 아래 Kiro를 위한 자격 증명 기반 정책을 참고하세요.

또한 Kiro는 AWS IAM 서비스 연결 역할(service-linked role)을 사용합니다. 서비스 연결 역할은 특정 자격 증명이 아니라 Kiro에 직접 연결되는 고유한 유형의 IAM 역할이며, 구독 시 자동으로 생성됩니다. 자세한 내용은 아래 Kiro를 위한 서비스 연결 역할을 참고하세요.

Kiro를 위한 자격 증명 기반 정책

자격 증명 기반 정책은 IAM 사용자, 사용자 그룹, 역할 같은 자격 증명에 연결할 수 있는 JSON 권한 정책 문서입니다. 이 정책은 사용자와 역할이 어떤 리소스에 대해, 어떤 조건에서, 어떤 작업을 수행할 수 있는지를 제어합니다.

사용자를 구독시키고 구독을 구성하려면, 콘솔에서 Kiro를 구성하고 구독하도록 관리자에게 허용하는 권한이 필요합니다.

자격 증명 기반 정책을 만드는 방법은 AWS IAM 사용 설명서Define custom IAM permissions with customer managed policies를 참고하세요.

정책: 관리자가 Kiro를 구성하고 사용자를 구독하도록 허용

다음 예시 정책은 Kiro 콘솔에서 작업을 수행할 수 있는 권한을 부여합니다. Kiro 콘솔은 사용자를 Kiro에 구독시키고, Kiro와 AWS IAM Identity Center 및 AWS Organizations의 연동을 구성하며, 구독 설정을 관리하는 곳입니다. 이 정책에는 고객 관리형 KMS 키를 생성하고 구성하는 권한도 포함되어 있습니다.

정책 보기
{
  "Version":"2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sso:ListInstances",
        "sso:CreateInstance",
        "sso:CreateApplication",
        "sso:PutApplicationAuthenticationMethod",
        "sso:PutApplicationGrant",
        "sso:PutApplicationAssignmentConfiguration",
        "sso:ListApplications",
        "sso:GetSharedSsoConfiguration",
        "sso:DescribeInstance",
        "sso:PutApplicationAccessScope",
        "sso:DescribeApplication",
        "sso:DeleteApplication",
        "sso:CreateApplicationAssignment",
        "sso:DeleteApplicationAssignment",
        "sso:UpdateApplication",
        "sso:DescribeRegisteredRegions",
        "sso:GetSSOStatus"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "identitystore:DescribeUser"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "sso-directory:GetUserPoolInfo",
        "sso-directory:DescribeUser",
        "sso-directory:DescribeUsers",
        "sso-directory:DescribeGroups",
        "sso-directory:SearchGroups",
        "sso-directory:SearchUsers",
        "sso-directory:DescribeDirectory"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "signin:ListTrustedIdentityPropagationApplicationsForConsole",
        "signin:CreateTrustedIdentityPropagationApplicationForConsole"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "user-subscriptions:ListClaims",
        "user-subscriptions:ListApplicationClaims",
        "user-subscriptions:ListUserSubscriptions",
        "user-subscriptions:CreateClaim",
        "user-subscriptions:DeleteClaim",
        "user-subscriptions:UpdateClaim",
        "user-subscriptions:SetOverageConfig"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "organizations:DescribeAccount",
        "organizations:DescribeOrganization",
        "organizations:ListAWSServiceAccessForOrganization",
        "organizations:DisableAWSServiceAccess",
        "organizations:EnableAWSServiceAccess"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:ListAliases",
        "kms:CreateGrant",
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey*",
        "kms:RetireGrant",
        "kms:DescribeKey"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "codeguru-security:UpdateAccountConfiguration"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:CreateServiceLinkedRole"
      ],
      "Resource": [
        "arn:aws:iam::*:role/aws-service-role/q.amazonaws.com/AWSServiceRoleForAmazonQDeveloper"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "codewhisperer:UpdateProfile",
        "codewhisperer:ListProfiles",
        "codewhisperer:TagResource",
        "codewhisperer:UnTagResource",
        "codewhisperer:ListTagsForResource",
        "codewhisperer:CreateProfile"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "q:ListDashboardMetrics",
        "q:CreateAssignment",
        "q:DeleteAssignment",
        "q:UpdateAssignment"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:GetMetricData",
        "cloudwatch:ListMetrics"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

Kiro 구독을 위한 조건 키

Kiro는 자격 증명 기반 정책이나 서비스 제어 정책(SCP)을 통해 조직 전반에 걸쳐 구독 거버넌스를 적용할 수 있는 조건 키를 지원합니다. 예를 들어, 어떤 그룹에 Kiro 구독을 할당할 수 있는지 제한하거나 개별 사용자 할당을 완전히 차단할 수 있습니다. SCP에 대한 자세한 내용은 AWS Organizations 사용 설명서Service control policies를 참고하세요.

다음 조건 키는 구독 할당 작업(q:CreateAssignment, q:UpdateAssignment, q:DeleteAssignment)에 대한 액세스를 제어하는 데 사용할 수 있습니다.

조건 키설명유형
identitystore:RequestUserArn할당 대상 사용자의 ARN으로 액세스를 필터링합니다. 형식: arn:aws:identitystore:::user/String
identitystore:RequestGroupArn할당 대상 그룹의 ARN으로 액세스를 필터링합니다. 형식: arn:aws:identitystore:::group/String

예시: SCP로 그룹 할당 거부

다음 SCP는 요청이 그룹을 대상으로 할 때 CreateAssignment를 거부하여, 구독이 개별 사용자에게만 할당되도록 보장합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "q:CreateAssignment",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "identitystore:RequestGroupArn": "arn:aws:identitystore:::group/*"
        }
      }
    }
  ]
}

Kiro를 위한 서비스 연결 역할

서비스 연결 역할은 Kiro에 직접 연결되는 고유한 유형의 IAM 역할입니다. 서비스 연결 역할은 AWS에서 미리 정의하며, Kiro가 다른 AWS 서비스를 대신 호출하는 데 필요한 모든 권한을 포함합니다.

서비스 연결 역할을 사용하면 필요한 권한을 수동으로 추가하지 않아도 되므로 Kiro 설정이 더 쉬워집니다. Kiro는 자체 서비스 연결 역할의 권한을 정의하며, 별도로 정의하지 않는 한 Kiro만 해당 역할을 맡을 수 있습니다. 정의된 권한에는 신뢰 정책과 권한 정책이 포함되며, 이 권한 정책은 다른 어떤 IAM 엔터티에도 연결할 수 없습니다.

서비스 연결 역할은 관련 리소스를 먼저 삭제한 후에만 삭제할 수 있습니다. 이는 실수로 리소스에 대한 액세스 권한을 제거하는 것을 방지하여 Kiro 리소스를 보호합니다. 서비스 연결 역할에 대한 자세한 내용은 AWS IAM 사용 설명서를 참고하세요.

Kiro 엔터프라이즈를 구독할 때 다음 두 개의 서비스 연결 역할이 자동으로 생성됩니다.

서비스 연결 역할: AWSServiceRoleForUserSubscriptions

Kiro는 AWSServiceRoleForUserSubscriptions라는 서비스 연결 역할을 사용합니다. 이 역할은 구독을 자동으로 업데이트하기 위해 Kiro가 IAM Identity Center 리소스에 접근할 수 있는 권한을 부여합니다.

AWSServiceRoleForUserSubscriptions 서비스 연결 역할은 다음 서비스가 역할을 맡을 수 있도록 신뢰합니다.

AWSServiceRoleForUserSubscriptions라는 역할 권한 정책은 Kiro가 지정된 리소스에 대해 다음 작업을 수행하도록 허용합니다.

사용자, 그룹, 역할이 서비스 연결 역할을 생성, 편집, 삭제할 수 있도록 권한을 구성해야 합니다. 자세한 내용은 AWS IAM 사용 설명서Service-linked role permissions를 참고하세요.

서비스 연결 역할: AWSServiceRoleForAmazonQDeveloper

Kiro는 AWSServiceRoleForAmazonQDeveloper라는 서비스 연결 역할을 사용합니다. 이 역할은 결제를 계산하기 위해 Kiro가 계정 내 데이터에 접근할 수 있는 권한을 부여하고, Amazon CodeGuru에서 보안 보고서를 생성하고 조회할 수 있게 하며, CloudWatch로 데이터를 전송할 수 있게 합니다.

AWSServiceRoleForAmazonQDeveloper 서비스 연결 역할은 다음 서비스가 역할을 맡을 수 있도록 신뢰합니다.

AWSServiceRoleForAmazonQDeveloper라는 역할 권한 정책은 Kiro가 지정된 리소스에 대해 다음 작업을 수행하도록 허용합니다.

사용자, 그룹, 역할이 서비스 연결 역할을 생성, 편집, 삭제할 수 있도록 권한을 구성해야 합니다. 자세한 내용은 AWS IAM 사용 설명서Service-linked role permissions를 참고하세요.

서비스 연결 역할 관리

서비스 연결 역할을 수동으로 생성할 필요는 없습니다. AWS Management Console에서 Kiro 프로필을 생성하면 Kiro가 서비스 연결 역할을 자동으로 생성합니다. 이 서비스 연결 역할을 삭제한 후 다시 생성해야 하는 경우, 동일한 절차로 계정에 역할을 다시 만들 수 있습니다.

IAM 콘솔이나 AWS CLI를 사용해 q.amazonaws.com 서비스 이름으로 서비스 연결 역할을 생성할 수도 있습니다. 자세한 내용은 AWS IAM 사용 설명서Creating a service-linked role를 참고하세요. 이 서비스 연결 역할을 삭제한 경우에도 동일한 절차로 역할을 다시 생성할 수 있습니다.

Kiro에서는 AWSServiceRoleForUserSubscriptions 또는 AWSServiceRoleForAmazonQDeveloper 서비스 연결 역할을 편집할 수 없습니다. 서비스 연결 역할을 생성한 후에는 여러 엔터티가 역할을 참조할 수 있으므로 역할 이름을 변경할 수 없습니다. 다만 IAM을 사용해 역할 설명은 편집할 수 있습니다. 자세한 내용은 AWS IAM 사용 설명서Editing a service-linked role를 참고하세요.

서비스 연결 역할이 필요한 기능이나 서비스를 더 이상 사용하지 않는다면 해당 역할을 삭제하는 것이 좋습니다. 그래야 능동적으로 모니터링되거나 유지 관리되지 않는 미사용 엔터티가 남지 않습니다. 다만 서비스 연결 역할을 수동으로 삭제하려면 먼저 관련 리소스를 정리해야 합니다. IAM 콘솔, AWS CLI, 또는 AWS API를 사용해 서비스 연결 역할을 삭제하세요. 자세한 내용은 AWS IAM 사용 설명서Deleting a service-linked role를 참고하세요.

참고: 리소스를 삭제하려 할 때 Kiro가 해당 역할을 사용 중이면 삭제가 실패할 수 있습니다. 이 경우 몇 분 정도 기다린 후 작업을 다시 시도하세요.

Kiro 서비스 연결 역할 지원 리전

AWSServiceRoleForUserSubscriptions 및 AWSServiceRoleForAmazonQDeveloper 역할은 다음 AWS 리전에서 사용할 수 있습니다. 리전에 대한 자세한 내용은 AWS 일반 참조AWS Regions and endpoints를 참고하세요.

리전 이름리전 식별자
US East (N. Virginia)us-east-1
Europe (Frankfurt)eu-central-1