кросс-аккаунт s3 доступ с использованием ключа KMS для роли IAM - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь настроить кросс-аккаунт s3, используя ключ KMS для роли IAM. У нас 2 aws аккаунтов. Давайте назовем это учетной записью A и учетной записью B. Цель состоит в том, чтобы передать файл с использованием лямбда-службы в учетной записи A в зашифрованную корзину S3 ключа B (управляемую клиентом) для учетной записи B. Итак, в учетной записи B я обновил политику ключей KMS, как показано ниже.

Учетная запись A -> 12345678912

Учетная запись B -> 98765432198

{
"Version": "2012-10-17",
"Id": "key-default-1",
"Statement": [
    {
        "Sid": "Enable IAM User Permissions",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::98765432198:root"
        }
    },
    {
        "Sid": "Allow administration of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::98765432198:role/adminaccesstononprod"
        },
        "Action": [
            "kms:Create*",
            "kms:Describe*",
            "kms:Enable*",
            "kms:List*",
            "kms:Put*",
            "kms:Update*",
            "kms:Revoke*",
            "kms:Disable*",
            "kms:Get*",
            "kms:Delete*",
            "kms:ScheduleKeyDeletion",
            "kms:CancelKeyDeletion"
        ],
        "Resource": "*"
    },
    {
        "Sid": "Allow use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::98765432198:role/demo-sharedstorage-InternalRole"
        },
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
        ],
        "Resource": "*"
    },
    {
        "Sid": "Allow use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::98765432198:role/demo-sharedstorage-ExternalRole"
        },
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
        ],
        "Resource": "*"
    },
    {
        "Sid": "Allow IAM role use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::98765432198:role/adminaccesstononprod"
        },
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
        ],
        "Resource": "*"
    },
    {
        "Sid": "Allow attachment using IAM role of persistent resources",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::98765432198:role/adminaccesstononprod"
        },
        "Action": [
            "kms:CreateGrant",
            "kms:ListGrants",
            "kms:RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    },
    {
        "Sid": "Allow attachment using internal IAM role of persistent resources",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::98765432198:role/demo-sharedstorage-InternalRole"
        },
        "Action": [
            "kms:CreateGrant",
            "kms:ListGrants",
            "kms:RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    },
    {
        "Sid": "Allow attachment using external IAM role of persistent resources",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::98765432198:role/demo-instance-profile-InstanceIAMRole"
        },
        "Action": [
            "kms:CreateGrant",
            "kms:ListGrants",
            "kms:RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    },
    {
        "Sid": "Allow instances to encrypt/decrypt with this key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::98765432198:role/demo-instance-profile-InstanceIAMRole"
        },
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
        ],
        "Resource": "*"
    },
    {
        "Sid": "Actually let users use this key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
        ],
        "Resource": "*",
        "Condition": {
            "StringLike": {
                "aws:username": "sit-actimize-*User-*"
            }
        }
    },
    {
        "Sid": "Allow IAM role use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::12345678912:root"
        },
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
        ],
        "Resource": "*"
    },
    {
        "Sid": "Allow attachment using IAM role of persistent resources",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::12345678912:root"
        },
        "Action": [
            "kms:CreateGrant",
            "kms:ListGrants",
            "kms:RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    }
]
}

Что работает, как и ожидалось, при изменении ARN учетной записи A с arn:aws:iam::12345678912:root на arn:aws:iam::12345678912:role/file-transfer-lambda за предоставление доступа к указанной c роли, которую лямбда-запись в учетной записи A начинает получать по причине отказа в доступе.

Насколько я понимаю, роль IAM будет иметь привилегию использования ключа KMS и записи в корзину s3 , Пожалуйста, поправьте меня, если мое понимание неверно. Я обновляю следующие aws документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...