AWS 계정 간에 AWS Secrets Manager 보안 정보를 공유하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 7월 20일

다른 AWS 계정에서 내 AWS Secrets Manager 보안 정보를 공유하고 싶습니다. 어떻게 해야 합니까?

간략한 설명

이 예시에서 Security_Account 사용자는 계정 A의 자격 증명을 관리하고, Dev_Account 사용자는 계정 B의 개발자에 의해 사용됩니다. Dev_Account의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행 중인 AWS Identity and Access Management(IAM) 사용자 또는 애플리케이션은 Security_Account 사용자 계정에서 보안을 검색합니다. 보안 정보에 대해 리소스 기반 정책을 사용할 수 있으며 이를 통해 보안 정보에 권한 정책을 연결할 수 있습니다. 이 정책을 사용하면 Dev_Account의 IAM 엔터티에서 Security_Account의 보안 정보에 액세스하도록 허용할 수 있습니다.

Security_Account(계정 A)에서 DevSecret이라는 보안 정보는 AWS Key Management Service (AWS KMS) 키 DevSecretKMS를 사용하여 암호화됩니다. 그런 다음, 보안 정보는 Dev_Account(계정 B)와 공유됩니다.

참고: 계정의 AWS KMS 기본 키는 사용할 수 없습니다. AWS KMS 기본 키는 AWS Key Management Service에서 실행되는 AWS 서비스에서 자동으로 생성, 관리 및 사용됩니다. AWS KMS 기본 키는 AWS 계정 및 리전에 고유합니다. AWS 관리형 키를 생성하는 서비스만 해당 기본 키를 사용할 수 있습니다. 자세한 내용은 AWS KMS 키를 참조하세요.

해결 방법

보안 정보가 있는 리전의 Security_Account(계정 A)에서 다음 단계를 따릅니다.

1.    보안 정보가 없는 경우 보안 정보 생성 지침을 따릅니다. 보안 정보에 대한 AWS KMS 키 ID 파라미터에 Amazon 리소스 이름(ARN)을 지정해야 합니다.

2.    별칭을 사용하는 기존 보안이 있는 경우 보안 정보 수정 지침을 따릅니다. 보안 정보에 대해 AWS KMS 키 ID 파라미터에서 AWS KMS 키 ARN을 지정해야 합니다.

참고: 다른 AWS 계정의 보안에 액세스하려면 전체 AWS KMS 키 ARN을 사용해야 합니다.

3.    AWS KMS 키의 키 정책에 권한을 부여합니다. Secrets Manager는 기본적으로 보안을 암호화합니다. 이러한 보안 정보를 검색하는 자격 증명에는 복호화에 대한 액세스 권한이 필요합니다. DevSecret는 DevSecretKMS를 사용하여 암호화되므로 다음 권한을 추가하여 키 정책을 변경해야 합니다.

참고: your-regionAWS 리전으로 대체합니다.

{
  "Sid": "AllowUseOfTheKey",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"
  },
  "Action": [
    "kms:Decrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": "secretsmanager.your-region.amazonaws.com"
    },
    "StringLike": {
      "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
    }
  }
}

이 정책은 Dev_Account(계정 B)의 SecretsUser에게 Security_Account(계정 A)에서 DevSecretKMS를 사용할 수 있는 권한을 부여합니다. 또한 이 정책은 DevSecretKMS에서 decrypt 및 describe-key 명령을 사용하는 기능도 SecretsUser에 부여합니다. 4) IAM 엔터티에서 보안에 액세스하는 권한을 허용합니다. Security_Account의 경우 SecretsUser에 대해 DevSecret을 검색할 권한을 부여하는 리소스 기반 정책을 연결합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"
      },
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "*"
    }
  ]
}

Dev_Account(계정 B)에서 다음 단계를 수행합니다.

1.    보안 정보를 검색할 IAM 자격 증명에 권한을 연결합니다. 다음과 비슷한 신뢰 정책을 사용합니다.

참고: your-regionAWS 리전으로 대체합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGetSecretValue",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
      ]
    },
    {
      "Sid": "AllowKMSDecrypt",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:kms:your-region:Security_Account:key/DevSecretKMS_id"
      ]
    }
  ]
}

Dev_Account의 IAM 사용자 SecretsUser가 보안 정보를 검색하려면 보안 정보사용자에게 secretsmanager:GetSecretValue에 대한 권한이 있어야 합니다. DevSecret은 DevSecretKey를 사용하여 암호화되기 때문에 SecretsUser에는 AWS 복호화 권한이 필요합니다.

2.    다음과 유사하게 보안 정보를 SecretsUser로 검색합니다.

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret --version-stage AWSCURRENT --region your-region

참고: your-region을(를) 보안 정보가 있는 AWS 리전으로 교체하십시오.

모든 IAM 엔터티에 대해 이 지침을 사용할 수 있습니다. 예를 들어, Amazon EC2 인스턴스 프로파일 또는 역할의 경우 리소스 정책에서 ARN을 대체하거나 추가하고 IAM 엔터티에 연결된 권한을 편집합니다.